文档章节

利用nginx加速web访问

闽味川菜
 闽味川菜
发布于 2015/10/15 11:20
字数 1106
阅读 17
收藏 1

起因
----------

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

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

闽味川菜
粉丝 2
博文 84
码字总数 3833
作品 0
厦门
程序员
私信 提问
构建Nginx Cache高性能缓存系统

随着Nginx web服务器得到越来越多的SA的青睐,Nginx的cache功能已经具备Squid所拥有的Web缓存加速功能、清除指定URL缓存的功能。 而在性能上,Nginx对多核CPU的利用,胜过Squid不少。另外,在...

IamOkay
2016/04/17
186
1
利用 squid 反向代理提高网站性能

本文在介绍 squid 反向代理的工作原理的基础上,指出反向代理技术在提高网站访问速度,增强网站可用性、安全性方面有很好的用途。作者在具体的实验环境下,利用 DNS 轮询和 Squid 反向代理技...

红薯
2009/04/12
4.3K
4
简单了解tengine

Tengine是由淘宝网发起的Web服务器项目。它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。最终目标是打造一个高效、稳定、安全、易用的Web平台。 1、基本的HTTP服务器...

hebsun
2017/09/25
0
0
centos7.4编译安装nginx

前言 nginx作为后起之秀,最然目前市场份额现在远不足apache,但是从增长速度和发展前景来看,nginx是未来的趋势。具体数据可以参考https://www.netcraft.com/。截至到写博客的时间,全球的w...

maguofu
2017/10/29
0
0
《九阳神功》之Nginx最全优化

Nginx的优化 1. gzip压缩优化2. expires缓存有还3. 网络IO事件模型优化4. 隐藏软件名称和版本号5. 防盗链优化6. 禁止恶意域名解析7. 禁止通过IP地址访问网站8. HTTP请求方法优化9. 防DOS××...

我不是九爷
2018/07/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

CSS定位

CSS定位 relative相对定位 absolute绝对定位 fixed和sticky及zIndex relative相对定位 position特性:css position属性用于指定一个元素在文档中的定位方式。top、right、bottom、left属性则...

studywin
17分钟前
3
0
从零基础到拿到网易Java实习offer,我做对了哪些事

作为一个非科班小白,我在读研期间基本是自学Java,从一开始几乎零基础,只有一点点数据结构和Java方面的基础,到最终获得网易游戏的Java实习offer,我大概用了半年左右的时间。本文将会讲到...

Java技术江湖
昨天
5
0
程序性能checklist

程序性能checklist

Moks角木
昨天
7
0
VUE 计算属性

本文转载于:专业的前端网站▶VUE 计算属性 1、示例代码 <!DOCTYPE html><html lang="zh"> <head> <meta charset="UTF-8" /> <title>vue示例</title> </hea......

前端老手
昨天
6
0
快速搭建LNMT平台和环境部署 Tomcat详解

Tomcat部署的基本概念 1. CATALINA_HOME与CATALINA_BASE分别指什么?     CATALINA_HOME指的是Tomcat的安装目录     bin:\\Tomcat一些脚本存放目录,比如启动脚本startup.bat/start...

网络小虾米
昨天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部