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


因为文本数据通过对于页面交互能够起到必要的支援作用,而多媒体数据则更多是锦上添花的作用 。聪明的内容压缩可以把HTML、JavaScript、CSS等文本内容的缩小30%以上,因此能够相应地减少加载时间 。
如果你使用SSL,压缩又可以减少必须经过SSL编码的数据量,从而补偿了压缩这些数据的CPU时间 。
压缩数据的方法非常多 。比如,建议六中关于HTTP/2的部分就描述了一个新颖的压缩思路,特别适合首部数据压缩 。还有一个关于文本压缩的例子,就是可以在NGINX中开启GZIP压缩 。预压缩文本数据之后,可以使用gzip_static指令直接发送.gz文件 。
建议五:优化SSL/TLS

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

文章插图
 
越来越多的网站在使用Secure Sockets Layer(SSL)及后来的Transport Layer Security(TLS)协议 。SSL/TLS通过加密从源服务器发送给用户的数据来提升网站安全性 。google会提升使用SSL/TLS的网站的搜索引擎排名,将有力地推动这一进程 。点击这里了解SSL/TLS运行机制详解 。另外,关注微信公众号:Java技术栈,也可以获取我整理的更多 HTTPS 教程,都是干货 。
尽管采用率越来越高,但SSL/TLS造成的性能损失也困扰着很多网站 。SSL/TLS拖慢网站的原因有两个 。
【提升系统 10 倍web应用性能的 10 个建议】1、每次打开新连接的初次握手都必须创建加密密钥,而浏览器使用HTTP/1.x对每个2、服务器建立多个连接的方式进一步加剧了这个问题 。
服务器端加密数据和客户端解密数据的操作同样也是开销 。
为了鼓励人们使用SSL/TLS,HTTP/2和SPDY(参见建议六)的作者将这两个协议设计为只让浏览器针对一次会话建立一个连接 。这样就把SSL导致性能降低的两个主要原因之一消灭掉了 。然而,说到优化SSL/TLS性能,还是有很多事情可做 。
优化SSL/TLS的方法因Web服务器而异 。以NGINX为例,NGINX使用OpenSSL,运行于普通机器上,能够提供接近定制机器的性能 。NGINX SSL performance详细介绍了如何将SSL/TLS加密和解密的开销降至最低 。
此外,这里还有一篇文章,介绍了很多种提升SSL/TLS性能的方法 。简单总结一下,涉及的技术主要有如下几种 。
  • 会话缓存 。使用ssl_session_cache指令开启缓存,缓存每次SSL/STL连接时用到的参数 。
  • 会话票或ID 。把特定SSL/TLS会话的信息保存为一个会话票或ID,以便连接重用,而不必重新握手 。
  • OCSP封套 。通过缓存SSL/TLS证书信息减少握手时间 。
NGINX和NGINX Plus都可以来终止SSL/TLS,即处理客户端信息的加密和解密,同时与其他服务器保持明文通信 。在NGINX或NGINX Plus中设置处理SSL/TLS终止可以采取这几个步骤 。而对于在接受TCP连接的服务器上使用NGINX Plus而言,可以参考这里的设置步骤 。
建议六:实现HTTP/2或SPDY
已经使用SSL/TLS的站点,如果再使用HTTP/2或SPDY则很可能提升性能,因为一个连接只要一次握手 。尚未使用SSL/TLS、HTTP/2和SPDY的站点切换到SSL/TLS(通常会降低性能),从响应速度方面看,可能是一次倒退 。点击这里了解HTTP/2详解 。
谷歌2012年开始SPDY项目,致力于在HTTP/1.x之上实现更快的速度 。HTTP/2则是IETF最近批准的基于SPDY的标准 。SPDY得到了广泛支持,但很快就将被HTTP/2取代 。
SPDY和HTTP/2的关键在于只用一个连接,而非多个连接 。这一个连接是多路复用的,因此可以同时承载多个请求和响应 。
只维持一个连接,可以省掉多个连接所需的设置和管理消耗 。而且一个连接对SSL特别重要,因为可以将SSL/TLS建立安全连接所需的握手时间降至最少 。
SPDY协议要求使用SSL/TLS,HTTP/2并没有正式要求,但目前所有支持HTTP/2的浏览器都只会在启用SSL/TLS的情况下才会使用它 。换句话说,支持HTTP/2的浏览器只有在网站使用SSL且服务器接受HTTP/2流量的情况下才会使用HTTP/2 。否则,浏览器会基于HTTP/1.x通信 。
实现了SPDY或HTTP/2之后,域名分片、资源合并、图片精灵等之前针对HTTP的性能优化措施就用不着了 。因此也可以简化代码和部署 。关于HTTP/2会带来哪些变化,可以参考我们的这个白皮书 。
提升系统 10 倍web应用性能的 10 个建议

文章插图
 
NGINX很早就开始支持SPDY,而且今天使用SPDY的大多数站点都在运行NGIN
X 。NGINX同样率先支持了HTTP/2,2015年9月,NGINX开源和NGINX Plus开始支持 HTTP/2 。
随着时间推移,NGINX希望大多数站点启用SSL并迁移到HTTP/2 。这样不仅可以让网站更安全,而且随着新的优化技术不断涌现,也可以通过简单的代码实现更高的性能 。


推荐阅读