转载 http://passover.blog.51cto.com/2431658/588602
起因
----------
在最近新系统的设计中对于首页打开速度的问题做了一些考虑,由于页面上还是以动态数据为主,所以简单的静态化数据可能并不行,所以需要从业务和技术结合的角度去考虑这个问题。由于有些数据并不敏感,其实可以放入缓存并定时更新。另外就是有些本身是静态,能否加快并发相应速度。
这里对动态数据想到了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;
- }
分享到:
相关推荐
《Nginx高性能Web服务器实战教程》是一本深入讲解如何利用Nginx构建高效稳定Web服务的书籍。Nginx以其高性能、轻量级、反向代理和负载均衡等特性,已经成为许多企业和开发者首选的Web服务器。这本书涵盖了从基础配置...
- **缓存**:利用 Nginx 的缓存机制加速页面加载。 #### DNS 域名解析流程概述 DNS(Domain Name System,域名系统)是互联网的一项服务,用来实现域名到 IP 地址之间的转换。下面是对 DNS 解析过程的详细解释: ...
- **文件缓存:** 开启sendfile功能,利用操作系统缓存加速文件传输。 - **HTTP压缩:** 启用gzip压缩,减少网络传输量。 - **错误日志:** 调整error_log的级别,避免记录过多无用信息。 - **健康检查:** 设置...
在“nginx-1.21.3.zip”这个压缩包中,您将找到Nginx的Windows版本,这使得在Windows操作系统上部署和管理web服务器变得...对于Windows用户来说,"nginx-1.21.3.zip"提供了一个方便的途径来体验和利用Nginx的强大功能。
2. **负载均衡**:利用Nginx的负载均衡策略(轮询、权重、最少连接等),将请求分发到多个后端服务器,提高系统的可靠性和处理能力。 **四、HTTPS与SSL/TLS** 1. **HTTPS配置**:理解HTTPS协议原理,如何购买和...
在高并发访问的场景下,Nginx能够通过负载轮询将请求均匀地分配到多个后端服务器,确保所有服务器都能得到合理利用,避免单点故障,并提高整体系统的可用性和响应速度。Nginx的负载均衡策略还包括最少连接数、IP哈希...
- **Web2.0应用加速**:提供Web2.0应用优化和加速的策略,利用Nginx的强大功能提高用户体验。 - **性能测试与优化**:教授如何评估和优化Nginx及其承载应用的性能。 代理zh的Nginx教程不仅是一系列技术文档,更是...
- **开启缓存加速**:利用Nginx内置的fastcgi_cache模块实现动态内容缓存,提高响应速度。 - **负载均衡设置**:通过upstream指令定义后端服务集群,并采用轮询、最少连接数等方式分发请求。 - **安全策略配置**:...
【Nginx 1.17.7:Web服务器的新里程碑】 Nginx 1.17.7 是一个流行的开源Web服务器的更新版本,它以其高性能、稳定性...对于正在本地测试的用户,理解这些细节将有助于充分利用Nginx 的优势并确保系统的稳定和安全。
### 构建微服务与Nginx应用 #### 标题和描述中的核心知识点解析 **构建微服务:** ...这种架构的主要优势包括: ...通过对Nginx的有效配置和利用,可以极大地提升系统的整体性能和稳定性,同时降低运维成本。
【Nginx新手入门常用需求】 Nginx是一款高性能、轻量级的HTTP服务器和反向代理服务器,因其模块化设计、高可靠性、低内存消耗和...随着深入学习,你将能够根据实际需求配置Nginx,实现更复杂的Web服务和负载均衡策略。
**16.2 利用Nginx urlhash提高squid服务器命中率** 介绍如何使用Nginx的urlhash特性来优化Squid缓存服务器的表现。 **16.3 Nginx实践使用memcached模块加速PHP应用程序** 通过集成memcached缓存模块,提高PHP应用...
2. **反向代理**:Nginx 可以作为反向代理服务器,接收来自客户端的请求,并转发到后端的 Web 服务器,这样可以实现负载均衡、缓存加速等功能。 3. **静态文件处理**:Nginx 在处理静态文件(如 HTML、CSS、...
通过代理服务器,用户可以访问原本无法直接访问的资源,或者利用代理服务器缓存的功能,加速资源加载。 ### 配置Nginx 配置Nginx涉及到编写配置文件,通常位于`/etc/nginx/nginx.conf`或者其他自定义路径下。配置...
### Nginx 实践指南:高性能 Web 服务的最佳实践 #### 概述 Nginx 是一款广泛应用于互联网行业的高性能 Web 服务器与反向代理服务器。它以其出色的稳定性、丰富的功能集、简单的配置方式和较低的内存消耗而闻名。...
`memcached`是一个分布式内存对象缓存系统,用于加速动态Web应用,通过在内存中缓存数据和对象来减少数据库的访问。 1. **Nginx基本配置结构** Nginx的配置文件通常位于`/etc/nginx/nginx.conf`,由多个`http`、`...
这个架构利用Nginx作为反向代理和负载均衡器,Tomcat作为Java应用服务器处理业务逻辑,而Redis则用作缓存系统以提升数据访问速度。下面我们将详细探讨这些组件的作用及其在集群环境中的配置与协同工作。 **Nginx** ...