利用nginx加速web访问
起因
----------
在最近新系统的设计中对于首页打开速度的问题做了一些考虑,由于页面上还是以动态数据为主,所以简单的静态化数据可能并不行,所以需要从业务和技术结合的角度去考虑这个问题。由于有些数据并不敏感,其实可以放入缓存并定时更新。另外就是有些本身是静态,能否加快并发相应速度。
这里对动态数据想到了2种办法:1)把Action设置成单例,请求的结果直接加在缓存里,再用一个定时线程去刷新这个缓存;2)让输出的结果页静态化,定时更新结果页。
前者控制起来非常灵活,利用双缓冲也能让人感觉不到缓冲时的速度下降,缺点就是要改动比较多的代码。后者正好相反,静态化要依靠外层的框架配置,代码完全不用改动。
选型
-----------
目前比较流行的反向代理服务器有squid和nginx,查了一下资料,发现nginx比较擅长反向代理和负载均衡,而squid强在自身的缓存机制,另外lightd貌似多用来做图片服务器。经过比较感觉nginx的配置文件简单一些,所以决定用这个先尝试一下。
性能测试
----------------
安装完成当然是先做一下性能测试了,这次同样使用ab来进行压力测试。为了做对比,这里也启动了一个tomcat,nginx配置成其的反向代理。我就在本机进行访问,但测试结果令我惊叹。
测试命令:ab -n 10000 -k -c 1000 http://localhost:8080/pscms_hlj_web/images/logo.jpg
tomcat:
- Server Software: Apache-Coyote/1.1
- Server Hostname: localhost
- Server Port: 8080
- Document Path: /pscms_hlj_web/images/logo.jpg
- Document Length: 17619 bytes
- Concurrency Level: 1000
- Time taken for tests: 3.671 seconds
- Complete requests: 4254
- Failed requests: 0
- Write errors: 0
- Keep-Alive requests: 4254
- Total transferred: 76035996 bytes
- HTML transferred: 74951226 bytes
- Requests per second: 1158.92 [#/sec] (mean)
- Time per request: 862.874 [ms] (mean)
- Time per request: 0.863 [ms] (mean, across all concurrent requests)
- Transfer rate: 20228.99 [Kbytes/sec] received
- Connection Times (ms)
- min mean[+/-sd] median max
- Connect: 0 33 67.4 0 261
- Processing: 52 255 60.1 272 315
- Waiting: 15 129 61.7 127 261
- Total: 52 288 108.0 272 559
nginx:
- Server Software: nginx/0.7.67
- Server Hostname: localhost
- Server Port: 8000
- Document Path: /pscms_hlj_web/images/logo.jpg
- Document Length: 17619 bytes
- Concurrency Level: 1000
- Time taken for tests: 0.597 seconds
- Complete requests: 10000
- Failed requests: 0
- Write errors: 0
- Keep-Alive requests: 10000
- Total transferred: 179370000 bytes
- HTML transferred: 176190000 bytes
- Requests per second: 16744.67 [#/sec] (mean)
- Time per request: 59.721 [ms] (mean)
- Time per request: 0.060 [ms] (mean, across all concurrent requests)
- Transfer rate: 293309.69 [Kbytes/sec] received
- Connection Times (ms)
- min mean[+/-sd] median max
- Connect: 0 2 8.1 0 44
- Processing: 0 49 19.7 48 97
- Waiting: 0 44 19.8 42 93
- Total: 0 51 19.4 52 99
nginx的性能远远胜出,这应该是这个页面会被缓存的原因,另外支持epoll肯定也有较高的IO性能提升。但这个测试中也发现tomcat已经很稳的挂掉了,nginx的高并发支持真不是盖的。
结论
----------
真实系统中不可能有那么多静态的内容,因为浏览器本地也会有缓存,但是nginx会在很大程度上提升对并发响应的能力。对于一些不需要频繁更新的动态内容也可以做定时缓存,这样也可以大大加快页面的打开速度并降低后端压力。线上系统可以把图片、js、css、静态html都缓存起来,后端只接受动态内容的请求,从而提速web访问速度。
其他发现
--------------
其实nginx是把缓存的内容经过hash后放到文件中的,虽然测试中来看肯定是在内存中拿的结果,但是肯定还是有一次写入。后来查到linux下面有一个自带的文件系统,在/dev/shm下面,默认是内存大小的一半。这样真的可以把缓存的内容指向这个文件里面就行了。
另外,nginx也可以很方便的实现双机热备和负载均衡。负载均衡可以配置weight来调整访问比例,系统会自动把请求进行转向。双机热备会在所有节点都不可用时自动转向,这在系统升级的时候可以做到不中断服务。这些实现做类似如下配置即可:
- upstream testproxy {
- server 127.0.0.1:8080 weight=10;
- server 127.0.0.1:8081 weight=10;
- server 192.168.0.11:8080 backup;
- }
转自:http://passover.blog.51cto.com/2431658/588602
利用nginx加速web访问的更多相关文章
- Centos下Nginx配置WEB访问日志并结合shell脚本定时切割
在一个成熟的WEB系统里,没有日志管理是不可以的,有了日志,可以帮助你得到用户地域来源.跳转来源.使用终端.某个URL访问量等相关信息:通过错误日志,你可以得到系统某个服务或server的性能瓶颈等. ...
- 记一次给nginx的web服务器目录加软链接
先期情况和问题 已安装好nginx服务器和相关配置.nginx的web目录是/usr/share/nginx/html. 现在的问题是希望把web目录换成/root/nginx/html/,但是不更改 ...
- 如何在nginx下实现访问web网站密码认证保护的功能
在某些特定的环境下,我们希望nginx下的web站点在访问时需要用户输入账户密码才能访问.以便拒绝那些不速之客. 其实,配置起来也很简单,按照下面的步骤即可实现. 一.编辑虚拟主机配置文件. serv ...
- Nginx作为web静态资源服务器——跨域访问
跨站访问 为什么浏览器禁止跨域访问 Nginx跨站访问 Syntax:add_header name value [always]; Default:—— Context:http,serve ...
- 七、Nginx学习笔记七Nginx的Web缓存服务
user www; worker_processes 1; error_log /usr/local/nginx/logs/error.log crit; pid /usr/local/nginx/l ...
- nginx的web缓存服务环境部署记录
web缓存位于内容源Web服务器和客户端之间,当用户访问一个URL时,Web缓存服务器会去后端Web源服务器取回要输出的内容,然后,当下一个请求到来时,如果访问的是相同的URL,Web缓存服务器直接输 ...
- 二十二. 安装部署Tomcat服务器、使用Tomcat部署虚拟主机、使用Varnish加速Web
web proxy web1 web2 1.安装部署Tomcat服务器 web1 1.1 使用RPM安装JDK环境 ]# yum -y install java-1.8.0-openjdk ]# ...
- 高级运维(一):反向代理&使用Varnish加速Web
案例1.反向代理 目标: 1.代理服务器可以将远程的Web服务器页面缓存于本地 2.代理服务器端口设置为80端口 3.用户通过访问代理服务器即可获得远程Web服务器页面上的内容 4.远程We ...
- Web开发基本准则-55实录-Web访问安全
Web开发工程师请阅读下面的前端开发准则,这是第一部分,强调了过去几年里我们注意到的Web工程师务须处理的Web访问安全基础点.尤其是一些从传统软件开发转入互联网开发的工程师,请仔细阅读,不要因为忽视 ...
随机推荐
- centos killall安装
https://blog.csdn.net/joeyon1985/article/details/46707865 https://blog.csdn.net/xupeng874395012/arti ...
- bzoj 2752
2752 思路: 线段树: 代码: #include <cstdio> #include <cstring> #include <iostream> #includ ...
- 微控工具xp模块-开发版[微信(wechat)二次开发模块]
http://repo.xposed.info/module/com.easy.wtool 微控工具xp模块-开发版[微信(wechat)二次开发模块] 基于xposed框架的微信二次开发模块,方 ...
- react篇章-事件处理
<!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title&g ...
- MapReduce与批处理------《Designing Data-Intensive Applications》读书笔记14
之前的文章大量的内容在和大家探讨分布式存储,接下来的章节进入了分布式计算领域.坦白说,个人之前专业的重心侧重于存储,对许多计算的内容理解可能不是和确切,如果文章中的理解有所不妥,愿虚心赐教.本篇将和大 ...
- pyinstaller 打包错误集锦
最近在用 pyinstaller 打包项目的时候遇到如下错误: RecursionError: maximum recursion depth exceeded 解决方案 执行 pyinstaller ...
- 【我要学python】面向对象系统学习
第一节:初识类的定义和调用 c1.py #类 = 面向对象 #类 最基本作用:封装 #类中不仅可以定义变量 还可以定义函数等等,例: class student( ): name = ' ' age ...
- quote函数什么意思,怎么用
转自: https://blog.csdn.net/qiqiyingse/article/details/70046543 quote函数 属于urllib库里面的一个函数 屏蔽特殊的字符.比如如果u ...
- 【Codeforces 498B】 B. Name That Tune (概率DP)
B. Name That Tune time limit per test 1 second memory limit per test 256 megabytes input standard in ...
- 【漏洞预警】方程式又一波大规模 0day 攻击泄漏,微软这次要血崩
一大早起床是不是觉得阳光明媚岁月静好?然而网络空间刚刚诞生了一波核弹级爆炸!Shadow Brokers再次泄露出一份震惊世界的机密文档,其中包含了多个精美的 Windows 远程漏洞利用工具,可以覆 ...