HTTP/3特性分析及未来发展

Posted LiveVideoStack_

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HTTP/3特性分析及未来发展相关的知识,希望对你有一定的参考价值。


翻译、编辑:Alex

技术审校:刘连响

本文来自_Smashing Magazine_,原文链接:

https://www.smashingmagazine.com/2021/08/http3-performance-improvements-part2/

Robin讲HTTP/3 #005#

到现在为止,我们主要对比了QUIC和TCP中的性能特性。那么HTTP/3和HTTP/2之间的区别是什么?我们在第一部分讨论过,HTTP/3实际上是HTTP/2-over-QUIC,所以新版本中并没有推出什么真正重要的新特性。这与从HTTP/1到HTTP/2不同,其中的变化更多,并推出了如头压缩、流优先级和服务器推送等新特性,HTTP/3中依然保留了这些特性。

HTTP/3与HTTP/2之间的重要差异在于它们的底层实现方式。

QUIC的队头阻塞消除在其中起了很大作用。我们之前讨论过,数据流B的丢失不再意味着数据流A和C必须等待B的重传(像它们在TCP上那样)。因此,如果A、B和C每一个都按照那个顺序发送QUIC数据包,那么它们的数据很可能按照A、C和B的顺序传送到浏览器(并由浏览器处理)。换言之,QUIC不再像TCP那样对不同的数据流完全排序

这成了HTTP/2的一个问题,因为HTTP/2所设计的许多特性(这些特性使用分散在数据块中的特殊控制消息)都要依赖TCP的严格排序。而在QUIC中,这些控制消息可以按照任何顺序到达,甚至可能会使这些特性发挥与预期相反的作用。本文无需详述这其中的技术细节,但这篇论文的前半部分会告诉你它是多么的复杂[1]。

因此,必须针对HTTP/3更改这些特性的内部机制和实现。一个具体的例子是HTTP头压缩,它降低了较大的重复HTTP头(比如cookies和user-agent字符串)所产生的开销。HTTP/2通过HPACK[2]实现了HTTP头压缩,而在HTTP/3中,这一系统被重新设计为更加复杂的QPACK[3]。两个系统以不同方式提供相同的功能(头压缩)。在Litespeed上你可以找到关于这个问题很棒的深度技术讨论和图表[4]。

推动数据流多路复用的优先级特性也是如此,我们在之前的文章中已经简单讨论过。为了实现优先级,HTTP/2使用了一个复杂的依赖树(dependency tree),该设置尝试对所有网页资源及其相互关系建模(想了解更多信息,你可以观看《HTTP资源优先级终极指南》[5]的演讲)。在QUIC上直接使用这个系统很可能导致非常错乱的依赖树布局,因为将每个资源添加到树上都需要一个独立的控制消息。

此外,事实证明,完全没有必要使用这么复杂的方法,因为它会导致实现错误和低效问题[6],以及许多服务器上的性能不佳[7]。因此,需要为HTTP/3重新设计一种更加简单的优先级系统[8]。这种更直接的设置使得一些高级场景难以或不可能实现(比如,单一连接上代理流量来自多个客户端的情况),但仍然为网页加载优化提供了广泛的选项。

再来重申一下,这两种方法提供相同的功能(引导数据流的多路复用),但HTTP/3更简单的设置将减少实现错误。

最后,还有服务器推送。服务器可以通过这一特性发送HTTP响应,而无需先等待明确的请求。理论上,这会带来出色的性能提升。但实际中却被证实,服务器推送很难被正确[9]使用且无法获得一致的实现[10]。结果就是,它很可能将从Google Chrome中移除[11]。

尽管如此,服务器推送依然被HTTP/3定义为特性[12](虽然少有实现支持它)。它的内部工作方式并没有像前两个特性那样发生很大的变化,但它同样适应了QUIC的非确定排序。不过遗憾的是,这并不会解决那些长期存在的问题。

这一切意味着什么?

正如我们之前所说,HTTP/3的大部分潜力来自底层的QUIC,而非HTTP/3本身。虽然HTTP/3的内部实现非常不同于HTTP/2,但是它们的高层性能特性和使用方式仍然保持一致。

值得关注的未来发展

在本系列中,我常常强调更快的进化和更高的灵活性是QUIC(以及HTTP/3)的核心概念,所以看到人们已经开始研究协议新的扩展和应用就不足为奇了。下面列出的是你可能会遇到的主要扩展和应用:

• 前向纠错[13]

这一技术的目的是通过发送冗余数据拷贝(经过巧妙的编码和压缩后没有那么大)提升QUIC对丢包的恢复能力。如果出现丢包,但是冗余数据已达到,那么就不需要重传了。

前向纠错最初是Google QUIC的一部分(这也是人们说QUIC能很好地防止丢包的原因),但是它并没有被标准化的QUIC版本1收录其中,因为当时还未证实它是否对性能有影响。研究人员正在积极对它展开试验,你可以通过PQUIC-FEC Download Experiments[14]应用向他们提供帮助。

• 多路径QUIC[15]

我们前期讨论了连接迁移,以及从Wi-Fi迁移到蜂窝网络时连接迁移所发挥的作用。不过,这是否表示我们可以同时使用Wi-Fi和蜂窝网络?同时使用两个网络会让我们获得更多带宽并增加网络的稳健性。这就是多路径背后的主要概念。

Google也曾尝试多路径,但是由于其固有的复杂性,QUIC版本1并没有包含这一技术。不过,科研人员已经展示[16]了它强大的潜力,并很可能在QUIC版本2中实现它。注意,TCP 的多路径已经存在[17],但花了差不多十几年才可用(审校者注:TCP 多路径已经存在,但一直没有被大规模使用)。

• QUIC上的非可靠数据[18]和HTTP/3[19]

我们已经知道,QUIC是一个完全可靠的协议。不过,由于它运行在不可靠的UDP上,我们可以向QUIC添加一个特性使它可以发送非可靠数据。这一点在提交的数据报进行了描述。当然,你不会使用QUIC去发送网页资源,但对于游戏和实时视频流来说,它可太方便了。这样一来,用户就能获得了UDP带来的所有好处,同时还能获得QUIC级的加密以及(可选)拥塞控制。

• WebTransport[20]

浏览器不会直接向javascript暴露TCP或UDP,主要是出于安全考虑。相反,我们必须依赖HTTP级的API,比如Fetch和更加灵活的WebSocket[21]和WebRTC[22]协议。WebTransport是这一系列选项中最新的一个,它允许你以一种更加底层的方式使用HTTP/3以及QUIC(虽然如果需要的话,它也可以回退到TCP和HTTP/2)。

关键在于,WebTransport具备在HTTP/3上使用非可靠数据的能力(见前一点),这样一来,游戏等便更容易在浏览器中实现。对于正常的(JSON)API调用来说,你将(当然)依然使用Fetch(如果可能的话,它会自动使用HTTP/3)。现在,对WebTransport的讨论众说纷纭,因此还不清楚它最终如何。在这些浏览器中,目前只有Chromium正在研究一个公开的概念验证实现[23]。

• DASH和HLS视频流

对于非实时视频(如YouTube和Netflix)来说,浏览器通常使用基于HTTP(DASH)的动态自适应流或HLS协议。基本上,它们意味着你要将视频编码为小块(2~10秒)和不同的质量水平(720p、1080p和4K等)。

在运行时,浏览器估计你的网络可以处理的最高质量(或者一个特定应用场景的最佳质量),然后通过HTTP从服务器中请求相关文件。浏览器无法直接访问TCP协议栈(通常在内核中实现),所以它偶尔会在估计时犯错,或者需要一些时间对变化的网络状况做出反应(导致视频停顿)。

QUIC作为浏览器的一部分被实现,所以通过访问底层协议信息[24](比如丢包率、带宽估计等)可以有效改善这一状况。其他研究人员也在试验将可靠数据和非可靠数据混合用于视频流[25],已经获得了不错的成果。

• HTTP/3之外的其他协议

由于QUIC是一个通用传输协议,我们可以期待现在运行在TCP上的多个应用层协议也运行在QUIC之上。这类工作正在进行中,其中包括:DNS-over-QUIC[26]、SMB-over-QUIC[27]甚至SSH-over-QUIC[28]。与HTTP和网页加载相比,这些协议通常有非常不同的要求,所以我们讨论过的QUIC的性能提升也许对这些协议更有效。

这一切意味着什么?

QUIC版本1只是一个开始。谷歌早期试验的更多高级性能向特性都没有进入第一轮迭代。然而,这里的目标是快速发展协议,高频率地推出新的扩展和特性。因此,QUIC(HTTP/3)将逐渐变得比TCP(HTTP/2)更快和更灵活。

结论

在本系列的第二部分,我们已讨论了HTTP/3(特别是QUIC)许多不同的性能特点和特性。我们也已经知道:虽然其中的大部分特性看起来影响很大,但实际中,它们并没有在网页加载方面为用户带来太大的帮助。

比如我们看到,QUIC使用UDP并没有突然获得更多的带宽(与TCP相比)。经常受到称赞的0-RTT特性其实是一种微优化,为你节省了一个RTT,其中你可以发送约5KB的数据(最坏的情况下)。

如果出现突发丢包或者你在加载渲染阻塞资源时,队头阻塞消除的效果并不好。连接迁移非常依赖情境,HTTP/3并不具备任何重要的新特性使它比HTTP/2更快。

你也许希望我建议你跳过HTTP/3和QUIC,为什么这么麻烦?对吧?但我绝不会这样做!即使这些新协议不会为网络较快的用户提供太多帮助,但它们肯定会为经常移动的用户和较慢网络上的用户带来巨大影响

即使在西方市场中(比如我所在的比利时,我们通常都有很快的设备,并且能够访问高速蜂窝网络),上述情况也会影响到1%甚至10%的用户群(取决于你的产品)。一个例子是:有人在火车上迫切想要查看你网站上的重要信息,但必须等上45秒的加载时间。我就有过这种经历,所以非常希望有人部署QUIC来助我摆脱困境。

但是,其他国家和地区的情况依然非常糟糕,其中普通用户更像是比利时最慢的那10%用户,而最慢的1%用户也许连网页都加载不了。在世界上的很多地方[29],网络性能是一个可访问性和包容性问题[30]。

这就是我们不该仅在自己的硬件上测试网页的原因(还可以使用Webpagetest[31]等服务),也是你绝对应该部署QUIC和HTTP/3的原因。特别是如果你的用户经常移动,或者不太可能访问快速蜂窝网络,这些新协议也许能够带来很大的帮助(即使你并没有在你的有线MacBook Pro上注意到这些)。关于更多细节,我非常推荐Fastly的这篇文章[32]。

如果这些还不能完全说服你,可以考虑一下QUIC和HTTP/3在未来几年将继续进化且变得更快。使用这些新协议的早期经验将在未来获得回报,使你尽快收获这些新特性的好处。此外,QUIC在后台执行安全和隐私最佳实践,世界各地的用户都会受益于此。

你现在被说服了吗?接下来的第三部分将介绍如何在实际中使用这些新协议。

注释:

[1] https://h3.edm.uhasselt.be/files/HTTP3_Prioritization_extended_3jul2019.pdf

[2] https://datatracker.ietf.org/doc/html/rfc7541

[3] https://datatracker.ietf.org/doc/html/draft-ietf-quic-qpack

[4] https://blog.litespeedtech.com/tag/quic-header-compression-design-team/

[5] https://www.google.com/sorry/index?continue=https://www.youtube.com/watch%3Fv%3DnH4iRpFnf1c&q=EgTANX9dGNu765gGIhBvYOj0p4R6RGpSGzPArmoHMgFy

[6] https://blog.cloudflare.com/nginx-structural-enhancements-for-http-2-performance/

[7] https://github.com/andydavies/http2-prioritization-issues

[8] https://blog.cloudflare.com/adopting-a-new-approach-to-http-prioritization/

[9] https://calendar.perfplanet.com/2016/http2-push-the-details/

[10] https://jakearchibald.com/2017/h2-push-tougher-than-i-thought/

[11] https://groups.google.com/a/chromium.org/g/blink-dev/c/K3rYLvmQUBY/m/vOWBKZGoAQAJ

[12] https://datatracker.ietf.org/doc/html/draft-ietf-quic-http

[13] https://tools.ietf.org/html/draft-swett-nwcrg-coding-for-quic

[14] https://play.google.com/store/apps/details?id=org.pquic.pquic_fec_android

[15] https://tools.ietf.org/html/draft-liu-multipath-quic

[16] https://multipath-quic.org/

[17] https://www.multipath-tcp.org/

[18] https://datatracker.ietf.org/doc/html/draft-ietf-quic-datagram

[19] https://datatracker.ietf.org/doc/html/draft-ietf-masque-h3-datagram

[20] https://web.dev/webtransport/

[21] https://hpbn.co/websocket/

[22] https://hpbn.co/webrtc/

[23] https://groups.google.com/a/chromium.org/g/web-transport-dev/c/6PwPFy9fVfw

[24] https://dl.acm.org/doi/abs/10.1145/3386367.3431901

[25] https://www.researchgate.net/profile/Mirko-Palmer/publication/327930175_The_QUIC_Fix_for_Optimal_Video_Streaming/links/5f60ea97299bf1d43c063075/The-QUIC-Fix-for-Optimal-Video-Streaming.pdf

[26] https://datatracker.ietf.org/doc/html/draft-ietf-dprive-dnsoquic

[27] https://techcommunity.microsoft.com/t5/itops-talk-blog/smb-over-quic-files-without-the-vpn/ba-p/1183449

[28] https://datatracker.ietf.org/doc/html/draft-bider-ssh-quic-09

[29] https://infrequently.org/2021/03/the-performance-inequality-gap/

[30] https://hookedoncode.com/2020/07/performance-is-accessibility/

[31] https://www.webpagetest.org/

[32] https://www.fastly.com/blog/how-http3-and-quic-help-long-tail-connections

作者简介:

Robin Marx: IETF贡献者、HTTP/3和QUIC工作组成员。2015年,作为PhD的一部分,Robin开始研究HTTP/2的性能,这使他后来有机会在IETF中参与HTTP/3和QUIC的设计。在研究这些协议的过程中,Robin开发了QUIC和HTTP/3的调试工具(被称为qlog和qvis),目前这些工具已经使来自世界各地的许多工程师受益。

致谢:

本文已获得_Smashing Magazine_和作者Robin Marx的授权翻译和发布,特此感谢。


以上是关于HTTP/3特性分析及未来发展的主要内容,如果未能解决你的问题,请参考以下文章

带你读论文丨异常检测算法及发展趋势分析

带你读论文丨异常检测算法及发展趋势分析

数字化孪生技术现状分析及发展趋势探讨

React18正式版发布,未来发展趋势如何?

2022-2027年中国高尔夫行业市场调研及未来发展趋势预测报告

未来MCU设计的几个方向