提升系统 10 倍web应用性能的 10 个建议

提升Web应用的性能从未像今天这样刻不容缓 。
在线经济活动的比例日益提高,就连发展中国家和地区的经济活动都已经有5%以上在线进行了(相关数据请参考本文后面的资源) 。在这个超级链接、随时在线的现代世界,用户的期望也远非昔日可比 。如果你的网站不能马上响应,你的应用不能立即运行,用户转身就会投奔你的竞争对手 。
亚马逊大约10年前的一项研究表明,页面加载时间减少1/10秒,能够使其营收增长1% 。另一项近期的调查也显示,一多半受访站点所有者提到因为自己应用的性能不佳导致了收入减少或者用户流失 。
一个网站到底多快才行?页面加载每花1秒钟,就有大约4%的用户走掉 。排名最靠前的电商站点的首次交互时间为1至3秒,这个区间的转换率最高 。显而易见,Web应用性能的重要性与日俱增 。
提升性能其实不难,难的是怎么看到结果 。本文给出能够提升大约10倍网站性能的10个建议供大家参考 。如此全面地涵盖各种性能优化技术,这还是头一回,但这些建议可能需要Nginx的一点支持 。除了性能,这些建议也会涉及提升安全性 。
1 建议一:使用反向代理服务器让应用更快更安全

提升系统 10 倍web应用性能的 10 个建议

文章插图
 
如果你的Web应用只跑在一台机器上,那要提升其性能非常简单:换一台更快的,多配几个处理器,多加几条内存,磁盘阵列也要高速的 。换了以后,这台机器上跑的wordPress/ target=_blank class=infotextkey>WordPress服务器、Node.js或JAVA应用速度都会加快 。(要是应用还会访问另一台数据库服务器,那也简单:找两台更快的机器,用更快的网络连起来就行了 。)
麻烦在于,机器速度并不是问题 。很多时候Web应用慢,是因为要在各种任务之间切换,一会儿要处理数千个连接上的用户请求,一会儿要向磁盘读写文件,一会儿又要运行应用的代码,一会儿又要去干别的 。应用服务器因此可能出现各种状况,耗尽内存、交换文件,或者让很多请求等待一个硬盘I/O之类的任务 。
除了升级硬件,其实你还可以选择另外一种完全不同的方法:加一台反向代理服务器,分担上述一些任务 。反向代理服务器位于运行应用的机器之前,负责处理来自外网的请求 。反向代理服务器直接连到互联网,它与应用服务器通信使用的是快速的内部网络 。
反向代理服务器可以让应用服务器专注于构建页面,然后交给反向代理向外网发送,而不必理会用户与应用的交互 。由于不必等待客户端的响应,应用服务器的运行速度能达到接近最优的水平 。
增加反向代理服务器同时也可以为Web服务器增添灵活性 。比如,假设执行某种任务的服务器过载了,那随时可以再增加一台同类服务器;而如果这台服务器挂了,替换它也很容易 。
鉴于这种灵活性,反向代理服务器往往也是其他性能优化手段的先决条件,比如:
  • 负载均衡(参见“建议二”),反向代理服务器上运行负载均衡服务,把流量平均分配给几台应用服务器 。有了负载均衡,添加应用服务器根本不需要修改应用 。
  • 缓存静态文件(参见“建议三”),图片或代码之类的可以直接请求的文件,都可以保存在反向代理服务器中,以便直接发给客户端 。这样不仅可以更快地响应请求,还能减轻应用服务器的负担,加快其运行速度 。
  • 保证站点安全,可以配置反向代理服务器提升其安全级别,通过它监控来快速识别和响应攻击,从而保存应用服务器安全 。
NGINX专门为使用反向代理服务器做了设计,使其天然支持上述优化 。由于使用事件驱动的处理机制,NGINX比传统服务器效率更高 。NGINX Plus则增加了更高端的反向代理功能,如应用体检、特有的请求路由、高级缓存和售后支持 。
提升系统 10 倍web应用性能的 10 个建议

文章插图
传统服务器与NGINX Worker的比较
建议二:增加负载均衡服务器
提升系统 10 倍web应用性能的 10 个建议

文章插图
 
增加负载均衡服务器相对简单,但却能显著提升站点性能和安全性 。通过它把流量分配给多个服务器,就可以不必升级Web服务器了 。就算应用本身写得不太好,或者难以扩展,负载均衡都可以在不做其他改变的情况下提升用户体验 。
负载均衡服务器首先是一个反向代理服务器(参见“建议一”),负责把来自互联网的请求转发给其他服务器 。这里关键在于负载均衡服务器可以支持两台以上的应用服务器,使用一种选择算法在不同的服务器间分配请求 。最简单的负载均衡算法是循环调度,即把新请求依次转发给可用服务器中的下一台服务器 。其他算法还有把请求发给活动连接最少的服务器 。NGINX Plus支持一种功能,就是把用户会话保持在同一台服务器上,叫做会话保持 。


推荐阅读