调查 HTTP3 对搜索网络延迟的影响

Dropbox 以存储用户文件而闻名,但在用户最需要时迅速取回内容同样重要。对 Retrieval Experiences 团队而言,这意味着打造尽可能快速、简单而强大的搜索体验。然而,我们在2022年7月开展研究时发现,最常见的抱怨之一仍然是搜索太慢。用户表示,如果搜索更快,他们就更愿意经常使用 Dropbox。

当时,搜索网页提交查询并收到服务器响应,在第75百分位(p75)需要约400–450毫秒。对期待快速结果的用户来说,这实在太慢,因此我们开始寻找降低搜索延迟的方法。

初步分析表明,获取搜索结果的时间大约一半用于往返 Dropbox 服务器,即网络延迟;另一半用于决定返回哪些结果,即服务器延迟。我们决定同时处理两方面问题。部分同事研究如何降低服务器延迟,而我们调查网络延迟。

Three graphs showing changes in p75 network, server, and combined latency (in miliseconds) respectively over the course of a week. When viewed sperately, it's clear that network latency is significantly more variable than server latency.

搜索总延迟由服务器耗时与网络耗时组成。

网络延迟的变化远比服务器延迟大。它取决于本地网络状况、用户与 Dropbox 数据中心的距离,甚至一天中的具体时段。工作时间,许多用户在网络连接较好的办公室办公;夜间则可能在连接较弱的家中使用。Dropbox 大部分数据中心位于北美,与北美相比,欧洲延迟最高可达其2倍,亚洲可达3倍。25%的搜索请求来自欧洲,15%来自亚洲,因此降低网络延迟可以惠及相当大一部分用户。

此时我们意识到,单凭自己的团队无法解决网络延迟问题。我们与 Traffic 团队合作评估方案,决定测试一种可能的解决办法:HTTP3。

A graph showing p75 result suggestion network latency (in milliseconds) by region. Latency is highest in Asia, followed by Europe, while North and Central America are lowest.

不同地区的网络延迟差异。

理论上的加速

当时 Dropbox.com 使用基于 TCP 的 HTTP2。最新版本 HTTP3 使用 UDP,通过以下方式缩短建立连接和服务并行请求的时间:

  • 在连接开始阶段引入零往返时间(0RTT)。与 HTTP2 相比,HTTP3 避免了 TCP 协议必须完成的三次握手,少一次往返。此外,使用0RTT时,后续 HTTP3 连接可以在同一个数据包中建立安全连接并发送实际请求,而 HTTP2 必须分别发送这些数据。
  • 消除队头阻塞。TCP 面向字节流,要求严格按顺序处理数据包。如果某个流中的数据包丢失,客户端 TCP 协议栈可能延迟后续流的数据包,即使各流互不相关。使用 UDP 时,一个流被阻塞,其他流仍然可以向应用交付数据。

Head-of-line blocking: In HTTP2, a blocked stream also delays subsequent streams, whereas in HTTP3, a blocked stream only affects that stream

队头阻塞:HTTP2 中一个流阻塞也会延迟后续流;HTTP3 中阻塞仅影响该流。

HTTP3 听起来很有前景。理论上,它不仅能加快搜索,还能加速 Dropbox 的其他操作,从文件上传到内容建议。不过,实际影响仍不明确。HTTP3 完全可能比 HTTP2 更慢,尽管这种可能性不大。

我们需要确认 Dropbox 确实会受益于迁移。因此,我们决定先在一部分流量上测试 HTTP3。

设置实验

为了评估 HTTP3 在 Dropbox 服务器上的性能,Traffic 团队创建了一个通过 HTTP3 提供主网站内容的测试子域。这个测试站点经过专门设计,可安全地通过 HTTP3 发送特定 API 请求,不影响主站用户。

我们为测试站点建立了支持 HTTP3 的空操作(no-op)API 端点。服务器不执行任何操作,因此服务器延迟接近零,剩下的延迟就主要是网络延迟。接着设计了一系列操作,模拟网站的典型请求流量,包括搜索。模拟分为三个阶段:

  1. 准备。先顺序发送两个 HTTP3 请求,忽略计时数据。这仅用于预热 HTTP2 与 HTTP3 服务器相关的网络缓存,使后续比较公平。这个步骤尤其必要,因为首次连接总是 HTTP2,客户端在此时收到支持 HTTP3 所需的信息,后续连接才会尝试使用 HTTP3。
  2. 运行 HTTP2 对照组。并行向空操作端点发送5个 HTTP2 请求,记录每个请求的网络耗时。这模拟用户当时从服务器获取数据的方式,构成对照组。
  3. 运行 HTTP3 实验组。再向同一空操作端点并行发送5个请求,这次使用 HTTP3。记录各请求的网络耗时,与 HTTP2 比较。

测试最重要的一点是并行发送请求,这模拟了用户与 Dropbox 网页交互时同时发出许多请求的真实场景。更重要的是,它帮助我们判断,消除队头阻塞是否真的能加快并行请求。如果这些请求没有变快,HTTP3 在实际使用中就很可能也无益处。

为避免影响用户性能体验,每次页面加载只允许执行一次 HTTP3 测试,且必须等用户完成搜索后才执行。实验在2022年12月至2023年1月间进行了约两周,峰值流量经常超过每秒1500次查询(QPS),成功收集了世界各地大量用户的样本。

比较结果

在两周实验期间,每天发送约30万个 HTTP3 请求。

对全球大部分用户而言,HTTP3 将网络延迟降低了5–15毫秒,约5%。虽然有所改善,但普通用户可能几乎感受不到。到了 p90,改善就非常明显:延迟降低48毫秒,约13%;p95 则降低146毫秒,约21%。可能的原因是,HTTP3 消除队头阻塞,能更好处理并行连接中的丢包;连接质量较差的网络更容易丢包,所以在较高百分位上收益更明显。

HTTP3 vs. HTTP2
p25 -4.23ms / -4.73%
p50 -5.55ms / -4.15%
p75 -13.1ms / -5.78%
p90 -47.6ms / -12.5%
p95 -146ms / -20.9%

在较高百分位按地区划分后,结果更加突出。亚洲 p90 网络延迟约降低77毫秒,p95 约降低200毫秒。欧洲、北美与中美洲等高流量地区的绝对改善较小,但相对改善大致相近,p95 约为22%。

HTTP3 vs. HTTP2 北美与中美洲 欧洲 亚洲
p25 -3.20ms / -6% -2.34ms / -2% -3.73ms / -2%
p50 -4.21ms / -5% -3.84ms / -3% -5.12ms / -2%
p75 -9.03ms / -8% -11.1ms / -6% -15.0ms / -4%
p90 -44.9ms / -17% -47.3ms / -13% -77.3ms / -14%
p95 -118ms / -22% -141ms / -21% -200ms / -22%

HTTP3 的下一步

实验成功证明,HTTP3 在第90百分位及以上显著改善延迟。虽然只有约10%的用户能明显感觉到改善,但他们正是遭遇高延迟、最需要改进的用户。国际用户将是最大受益者,因为最高延迟集中在北美以外地区。

这次大规模实验带来两个主要认识:

  • 0RTT 的收益相对不那么重要,因为几乎所有到 dropbox.com 的连接都是长连接。
  • HTTP3 对队头阻塞的处理显著降低了延迟,尤其是在更容易丢包的网络中。

调查开始时,我们只知道 HTTP3 的理论收益。现在,我们更了解它在实际应用中的影响,不仅针对搜索,也针对文件操作以及基于机器学习的内容建议等 Dropbox 全站功能。鉴于 p90 以上用户的性能收益相当可观,Traffic 团队正计划建设可投入生产的 HTTP3 支持。

这个高影响项目来自 Dropbox 多个团队的合作,尤其是 Retrieval Experiences 和 Traffic。特别感谢 Roland Hui、Sarah Andrabi、Khugan Shanmugeswaran、NetEng 团队以及 Security 团队,帮助我们把理论研究变为现实。

~ ~ ~

如果你对构建创新产品、体验与基础设施充满兴趣,欢迎加入我们共同打造未来!在 dropbox.com/jobs 查看职位,并在 Instagram 和 Facebook 关注 @LifeInsideDropbox,了解创造更高效工作方式的团队生活。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容