设为首页 收藏本站
查看: 719|回复: 0

[经验分享] 利用nginx加速web访问

[复制链接]

尚未签到

发表于 2018-11-8 07:47:17 | 显示全部楼层 |阅读模式
  起因
  
----------
  在最近新系统的设计中对于首页打开速度的问题做了一些考虑,由于页面上还是以动态数据为主,所以简单的静态化数据可能并不行,所以需要从业务和技术结合的角度去考虑这个问题。由于有些数据并不敏感,其实可以放入缓存并定时更新。另外就是有些本身是静态,能否加快并发相应速度。
  这里对动态数据想到了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;
  • }



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-632127-1-1.html 上篇帖子: LVS+keepalived+nginx+tomcat部署实现 下篇帖子: nginx+upstream+sticky---jetty
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表