前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Qzone高性能HTTPS实践

Qzone高性能HTTPS实践

作者头像
腾讯大讲堂
发布2018-02-13 11:05:24
9600
发布2018-02-13 11:05:24
举报

Qzone移动端页面去年在切换至HTTPS后,页面加载速度遇到了较大的挑战,出现了较大的上升趋势。为了解决这个问题,Qzone前端以及运维团队通过反复实验、分析,在实践中总结了一些方法,有效提升了HTTPS页面的访问速度。希望本文能够帮助提高用户在全站HTTPS环境上的体验,减少大家对全站启用HTTPS的顾虑。毕竟用户的体验同用户信息安全是一样重要的。

以iOS平台为例。Qzone页面在在切换至HTTPS之前,平均访问速度约为1795ms。切换至HTTPS之后,平均访问速度直接飙升至2630ms。我的天呐,上涨了900ms,幅度接近50%。为了保障用户的正常体验,吓得我赶紧把入口又切回了HTTP。

在这之后,为了兼顾体验和安全,我们便开始踏上了提升HTTPS访问速度的道路。先简单以图示总结下我们优化的结论:

文章里的数据以iOS为例,访问速度指的是页面html开始请求到页面js执行完毕的耗时

使用SPDY协议是我们优化的第一步。SPDY(speedy)是Google早年提出的网络通信协议。它通过多路复用、请求优先级以及HTTP报头压缩等方法,能够有效提升页面访问速度。SPDY在iOS系统上兼容性较好,iOS 8.0及以上版本的Safari浏览器以及WebView组件均支持,覆盖了Qzone 85%以上的用户。

基于以上统计结论,我们针对iOS平台上的用户启用了HTTPS+SPDY协议。数据显示,在开启SPDY之后页面访问速度提升了约370ms,是一个相当可观的数据。

在Android系统上,手机QQ以及微信中的WebView是使用了腾讯浏览服务(升TBS)内核,目前支持SPDY的版本正在灰度发布中,预期全面发布后能够覆盖80%的Qzone用户。

在iOS平台上完成了SPDY的改造后,HTTPS的访问速度虽然有了370ms的提升,但同HTTP相比仍有400ms的差距。经过进一步的分析, 这400ms的时间差主要集中在了SSL握手的阶段上。根据SPDY协议,每个域名需要单独同服务器建立TCP连接,各自要进行一次SSL握手,每次耗时约200ms。根据这个分析结果,我们也有了进一步的优化方向,那就是减少SSL的耗时。

要减少SSL握手的耗时,可以有三个方式:

  1. 提升TCP连接的复用率
  2. 提升SSL session的复用率
  3. 减少页面中请求域名的数量

对提升TCP连接的复用率,Qzone团队的解决方案是,在页面的入口处预建了一个连接,用户点击入口之前,先向h5.qzone.qq.com(Qzone移动端页面域名)发起一个https请求,请求的结果完全可是一个空内容,同时服务器端要启用keep alive。keep alive设定的时间并非越长越好,根据我们的反复实验,最终将这个数值确定为60s。这个预建的连接,不仅仅能起到减少了SSL握手耗时的作用,实际上也能减少TCP建立的时间。在实施了页面入口预请求之后,统计出用户访问页面平均速度又降低了400ms,其中预请求复用的命中率大约是75%。

对提升SSL session复用率,需要服务器端支持session ticket或者session cache,目前Qzone运维团队已经做到了能够支持分布式session cache和全局session ticket key。这里需要说明的是,如果我们按上文所说做了预建连接,复用了TCP连接的请求是不会再发生SSL握手的,那么这里也就不需要太多关注session复用的问题。不过这里还是分享一下Qzone在启用SSL session复用后的实践数据。SSL session复用对大部分Android用户的提升非常明显,可以将SSL握手耗时从400ms优化至100ms。但对于iOS的用户,由于iOS平台本身对于性能的优化,SSL握手时间耗时比Android用户低不少,耗时从200ms降至了100ms。SSL seesion的复用率大约是40%。

对减少页面上的域名,Qzone移动端的业务主要涉及两个关键域名,一个是nodejs服务器h5.qzone.qq.com,另一个是CDN域名qzonestyle.gtimg.cn,每个域名的SSL握手各自需要额外耗时200ms。因此我们需要做的就是将页面上的域名收归,尽量使用一个域名,以减少SSL握手次数。我们通过ndoejs服务器做HTTP代理,将qzonestyle.gtimg.cn域名上的静态文件收归到h5.qzone.qq.com,而上文已经提到,h5.qzone.qq.com在页面的入口处已经做了预建连接。因此域名收归后,页面整体的访问速度又提升了200ms。

通过服务器代理收归域名除了能够减少SSL握手次数,还有一个好处就是对于像Qzone这种业务复杂、域名繁多的产品,无论之前页面上用了多少域名,都可以通过服务器代理的方式,将域名收归至一个。这样在业务从HTTP切换至HTTPS的时候,原有各业务均可以保持HTTP不变,大大降低了全站切换HTTPS的开发成本。

除了上面三种减少SSL握手时间的方式,我们在SSL协议和算法上也做了一些统计对比。在HTTPS握手过程中记录协议类型、加密套件、握手时间,并且将上述内容返回给页面。页面在记录用户的访问速度之后,上报数据的同时,把上述的协议类型等数据也一同上报。

从上表可以看出来,TLS1.2协议的性能要明显优于1.1和1.0。Cipher suite 方面,ECDHE-RSA-AES128-GCM-SHA256和ECDHE-RSA-AES128-SHA256性能最好。ECDHE-RSA-CHACHA20-POLY1305理论上讲对性能提升有较大帮助,但是由于iOS平台暂时不支持该类算法,因此从数据样本上无法体现优势。后续Qzone团队会继续在协议和算法层面做更多的性能分析和优化,包括TCP参数调优,握手过程优化,SSL record size适配等。

经过以上几个小手术,HTTPS的页面合计访问速度提升超过了1000ms,同相比HTTP相比差距几乎可以忽略。同时由于TCP复用,在某些场景上甚至比HTTP的访问速度还快。

除了本文提到的SPDY技术,Qzone团队还在马不停蹄地做更多的尝试。例如开始写这篇文章的时候Qzone才正在实施SPDY,写到结尾的时候Qzone已经在部分地区启用了HTTP/2(喂,难道不是因为作者是拖延症患者吗?!)所以亲们,你还有什么理由再不全站启用HTTPS呢?

文章转载自:Qzone前端

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-04-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 腾讯大讲堂 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
内容分发网络 CDN
内容分发网络(Content Delivery Network,CDN)通过将站点内容发布至遍布全球的海量加速节点,使其用户可就近获取所需内容,避免因网络拥堵、跨运营商、跨地域、跨境等因素带来的网络不稳定、访问延迟高等问题,有效提升下载速度、降低响应时间,提供流畅的用户体验。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档