博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
利用nginx加速web访问
阅读量:6515 次
发布时间:2019-06-24

本文共 2791 字,大约阅读时间需要 9 分钟。

起因

----------

     在最近新系统的设计中对于首页打开速度的问题做了一些考虑,由于页面上还是以动态数据为主,所以简单的静态化数据可能并不行,所以需要从业务和技术结合的角度去考虑这个问题。由于有些数据并不敏感,其实可以放入缓存并定时更新。另外就是有些本身是静态,能否加快并发相应速度。

    这里对动态数据想到了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:

  1. Server Software:        Apache-Coyote/1.1 
  2. Server Hostname:        localhost 
  3. Server Port:            8080 
  4.  
  5. Document Path:          /pscms_hlj_web/images/logo.jpg 
  6. Document Length:        17619 bytes 
  7.  
  8. Concurrency Level:      1000 
  9. Time taken for tests:   3.671 seconds 
  10. Complete requests:      4254 
  11. Failed requests:        0 
  12. Write errors:           0 
  13. Keep-Alive requests:    4254 
  14. Total transferred:      76035996 bytes 
  15. HTML transferred:       74951226 bytes 
  16. Requests per second:    1158.92 [#/sec] (mean) 
  17. Time per request:       862.874 [ms] (mean) 
  18. Time per request:       0.863 [ms] (mean, across all concurrent requests) 
  19. Transfer rate:          20228.99 [Kbytes/sec] received 
  20.  
  21. Connection Times (ms) 
  22.               min  mean[+/-sd] median   max 
  23. Connect:        0   33  67.4      0     261 
  24. Processing:    52  255  60.1    272     315 
  25. Waiting:       15  129  61.7    127     261 
  26. Total:         52  288 108.0    272     559 

nginx:

  1. Server Software:        nginx/0.7.67 
  2. Server Hostname:        localhost 
  3. Server Port:            8000 
  4.  
  5. Document Path:          /pscms_hlj_web/images/logo.jpg 
  6. Document Length:        17619 bytes 
  7.  
  8. Concurrency Level:      1000 
  9. Time taken for tests:   0.597 seconds 
  10. Complete requests:      10000 
  11. Failed requests:        0 
  12. Write errors:           0 
  13. Keep-Alive requests:    10000 
  14. Total transferred:      179370000 bytes 
  15. HTML transferred:       176190000 bytes 
  16. Requests per second:    16744.67 [#/sec] (mean) 
  17. Time per request:       59.721 [ms] (mean) 
  18. Time per request:       0.060 [ms] (mean, across all concurrent requests) 
  19. Transfer rate:          293309.69 [Kbytes/sec] received 
  20.  
  21. Connection Times (ms) 
  22.               min  mean[+/-sd] median   max 
  23. Connect:        0    2   8.1      0      44 
  24. Processing:     0   49  19.7     48      97 
  25. Waiting:        0   44  19.8     42      93 
  26. Total:          0   51  19.4     52      99 

    nginx的性能远远胜出,这应该是这个页面会被缓存的原因,另外支持epoll肯定也有较高的IO性能提升。但这个测试中也发现tomcat已经很稳的挂掉了,nginx的高并发支持真不是盖的。

 

结论

----------

    真实系统中不可能有那么多静态的内容,因为浏览器本地也会有缓存,但是nginx会在很大程度上提升对并发响应的能力。对于一些不需要频繁更新的动态内容也可以做定时缓存,这样也可以大大加快页面的打开速度并降低后端压力。线上系统可以把图片、js、css、静态html都缓存起来,后端只接受动态内容的请求,从而提速web访问速度。

 

其他发现

--------------

    其实nginx是把缓存的内容经过hash后放到文件中的,虽然测试中来看肯定是在内存中拿的结果,但是肯定还是有一次写入。后来查到linux下面有一个自带的文件系统,在/dev/shm下面,默认是内存大小的一半。这样真的可以把缓存的内容指向这个文件里面就行了。

    另外,nginx也可以很方便的实现双机热备和负载均衡。负载均衡可以配置weight来调整访问比例,系统会自动把请求进行转向。双机热备会在所有节点都不可用时自动转向,这在系统升级的时候可以做到不中断服务。这些实现做类似如下配置即可: 

    1. upstream  testproxy  { 
    2.   server   127.0.0.1:8080 weight=10; 
    3.   server   127.0.0.1:8081 weight=10; 
    4.   server   192.168.0.11:8080 backup; 
    5. }   

转自:http://passover.blog.51cto.com/2431658/588602

转载地址:http://oeafo.baihongyu.com/

你可能感兴趣的文章
经验贴 | 电梯监控的布线技巧
查看>>
唐山联通与丰南区政府签署“智慧城市”战略合作协议
查看>>
研究显示:广告拦截应用正在破坏互联网
查看>>
优云·小课堂 第八期:运维自动化的魅力
查看>>
稳定+性能+价格,阿里云发力ECS企业级产品
查看>>
写个软件来防止服务器网站CPU百分百
查看>>
智能城市里,“公共电话亭”的存在意味着什么?
查看>>
JVM分代垃圾回收策略的基础概念
查看>>
《交互式程序设计 第2版》一3.5 捕获简单用户交互行为
查看>>
安装操作系统需要注意的事项
查看>>
5G技术的5大猜想
查看>>
MongoDB 3.0(1):CentOS7 安装MongoDB 3.0服务
查看>>
别随便安装 Pokemon GO被曝藏恶意后门
查看>>
BBC即将推出Britflix流媒体服务:欲成为英国版Netflix
查看>>
让数据会思考会说话,为出海企业提供多样化数据智能解决方案
查看>>
我眼中的自动化测试框架设计要点
查看>>
FLIF:自由的无损图像格式
查看>>
《计算机系统:核心概念及软硬件实现(原书第4版)》——3.7 总结
查看>>
Google开源Inception-ResNet-v2,提升图像分类水准
查看>>
Opera 出售细节曝光:昆仑出资1.68亿美元
查看>>