QUIC(Quick UDP Internet Connections,发音’quick’)是Google于2013年发布的基于UDP的多路传输协议,它的主要目标是为了整合TCP协议的可靠性和UDP协议的速度和效率,以降低延迟,提高用户体验。
Google通过大规模的性能分析发现,“相对于TCP而言,QUIC的性能有了真正的进步”,这得益于QUIC的以下特性:
-
低延迟链接的建立,这对已建立的链接很有好处。在这种情况下,Google搜索页面的平均加载时间缩减了3%。
-
改进拥塞控制和丢包恢复机制,这在糟糕的网络环境中尤为重要。在这种情况下,Google搜索页面在“最慢的1%的连接”中节省了整整1秒的时间,并且观看基于QUIC的YouTube视频时会减少高达30%的数据重缓存。
据了解,QQ 空间前端团队通过对 HTTP2 和 QUIC 协议的应用和实践,使得 Web 页面访问速度得到了很大的提升,并且他们针对性地采用了不同的资源加载策略,最大化利用了协议的优势。为了了解QQ空间团队的相关实践,InfoQ记者采访了QQ空间高级前端开发工程师黄佳琳。同时,黄佳琳也将会在10月17日举行的QCon全球软件开发大会上分享相关话题,欢迎关注。
InfoQ:如何理解QUIC协议?与HTTP/2相比有什么优势和短板?
黄佳琳:QUIC,是一种基于UDP的协议,为了更好地理解,可以用一个公式大致地概括为TCP+TLS+HTTP2=UDP+QUIC+HTTP2’s API。 从这个公式可以看出来,QUIC最重要的作用就是替代了TCP+TLS,我们可以把QUIC分成两部分来理解。
底层,由于改用了UDP,QUIC需要模仿实现TCP的一些功能,诸如连接性、可靠性、拥塞控制、流量控制等,但并非照搬TCP的协议,而是做了一些改进,避免队首阻塞;
高层,负责加密,实现TLS的保密功能,同时使用更少的RTT(0~1个)便可建立安全的会话。更上一层则是复用了HTTP2的一些API,实现了HTTP2所具有的多路复用、头部压缩等特性。
QUIC的背景其实就是HTTP2在传输层仍然遇到了一些问题,没办法有效地利用网络传输,我们需要一个协议用更少的延迟和更少的重传时间消耗去传递请求,减少因包丢失造成的队首阻塞,然而又要保证安全性,QUIC在这种背景下诞生了。
与HTTP/2相比,其实从技术原理可以看出来,最大的区别就是弃用了TCP改用了UDP。优势就是解决了HTTP/2在传输层所遇到的一些性能瓶颈,而同时又具有HTTP/2的特性。劣势就目前来说,是浏览器支持度较差,从QQ空间的数据来看,QUIC目前手机侧鲜有支持,PC侧支持率占比在5%以内,相比之下,HTTP/2的支持率已经达到80%,不过浏览器的支持度我是持乐观态度的,随着时间推移,相信支持率会逐步上升。
InfoQ:可否介绍下你们应用QUIC协议的一些基本情况?
黄佳琳:目前主要在PC上使用,QQ空间黄钻页面和游戏应用页面都已全量使用,QQ空间首页也在灰度开启中。数据上相比HTTP/2有一定提升,页面onload提升了10%。
InfoQ:什么样的场景下使用QUIC,什么样的场景下使用HTTP/2,什么样的场景下使用HTTP/1?
黄佳琳:目前QQ空间的Web业务主要分PC端和移动端两种场景,PC端主要用HTTP/2+QUIC,这两个加起来占比已经接近90%,移动端主要用HTTP/2,主要是移动端支持QUIC的目前还比较少,支持HTTP2的占比在80%左右。其他不支持QUIC或HTTP2的就降级使用HTTP/1,总之,支持新协议的都优先使用新协议。
InfoQ:为什么当初你们要考虑使用QUIC协议?当时的背景是什么?
黄佳琳:知道QUIC协议其实也是从我们开始使用HTTP/2的时候开始的,在研究HTTP/2的时候,我看了一本书,叫《Web性能权威指南》,里面有一章是专门介绍HTTP/2协议的,分析得很详细,其中有一句话是这么写的(我特地去翻了一下摘抄出来),“对HTTP 2.0 而言,TCP 很可能就是下一个性能瓶颈”。看到这句话的时候我在想,TCP是下一个性能瓶颈,那还能怎么办呢?难不成还能用UDP协议?在好奇心驱使之下我搜索了一下,还真有用UDP的,那就是QUIC协议。真正在生产环境中投入使用其实是另一个契机,就是腾讯的安全云网关团队在server端支持了QUIC协议,这才使得QUIC协议真正落地使用。
InfoQ:在已有的系统和体系里,你们是如何落地QUIC协议的?
黄佳琳:在已有的架构里落地QUIC,我们考虑的是如何对业务更透明,接入更方便。我们现有的架构,在用户端和真实服务器中间有一层统一接入层。我们的QUIC是在接入层统一实现的,接入层与用户端之间任意使用QUIC、HTTP/2、HTTP/1,而接入层与真实服务器之间还是使用HTTP 1.1进行转发,这样对于我们的后端机器只需要保持处理HTTP 1.1的请求即可。
InfoQ:在生产环境中使用了这么长时间QUIC协议,有做过复盘吗?可以给大家分享一些你们觉得落地QUIC协议过程中需要注意的关键点吗?
黄佳琳:确实有一些需要注意的关键点,我觉得用QUIC协议有一个潜在的问题就是运营商的一些不可控因素。在分析QUIC数据的过程中注意到,QUIC有时候比HTTP/2还要慢得多,用iperf等测速工具测试发现,UDP的带宽要比TCP小得多,换一下网络环境之后,QUIC又比HTTP/2快了。除了限速之外,有时候用UDP会出现丢包严重的问题,这也影响了QUIC的性能。但是这一类问题,作为web端来说很难发现和避免。我们现在也只是做了一些简单的检测手段,例如对于同一个用户来说,记录他分别使用HTTP/2和QUIC两种不同协议来加载页面的速度,如果QUIC明显慢于HTTP/2的话,这个用户下次访问不会再使用QUIC。不过这种检测方法也会存在一些误判,还需要不断地调整。
有疑问加站长微信联系(非本文作者)