在Snapchat,我们的目标是使我们的相机是分享片刻的最快方式。我们不希望Snapchatters在此时延迟,并希望与他们的真实朋友分享。
网络请求在使用Snapchat的关键路径上。与毫秒的UI更新或磁盘写相比,网络延迟可能需要高差错率和设备约束。为了减少网络延迟和错误,我们提出更小,减少不必要的同步的请求和响应,利用全球内容分发合作伙伴将媒体带到使用它的人员,并使用称为快速UDP Internet连接的有效的下一代网络协议,或使用称为快速UDP Internet连接的人员,或者Quic。
让我们首先在Quic之前快速查看网络堆栈。拍摄Snap发送作为示例:在应用程序层上,我们将Snap Media放入HTTP2请求有效载荷。然后,我们使用TLS来确保安全层上的连接安全,并利用TCP将请求拆分为块并将SNAP向服务器上传。但是,TCP + TLS + HTTP2堆栈是移动网络环境的次优。例如,如果WiFi和Wwan之间的快速切换,则TCP请求将失败。对于与朋友聊天的用户,未能由于连接丢弃而发送消息可能会导致劣化的体验。
Quic是互联网的传输协议,由Google的工程师开发。 Quic是HTTP3的基础,它替换了TCP + TLS + HTTP2,建立在UDP之上。 QUIC解决了许多传输层和应用层问题,同时需要从应用程序开发人员那里几乎没有变化。如上图所示,Quic不会改变低级操作系统网络协议,也不改变高电平HTTP。
更快的连接建立:Quic Handshakes在发送有效载荷之前支持零往返,而1-3往返TCP + TLS。
改进的拥塞控制:Quic具有可插拔拥塞控制,并将更丰富的信息提供给拥塞控制算法而不是TCP。例如,Quic BBR V1和Quic BBR V2。
没有线路阻塞的多路复用:对于HTTP2连接,当TCP数据包丢失时,该连接上没有流可以进展,直到数据包被远方重传和接收到的数据包。这导致增加延迟和对移动网络连接的潜在降级的用户体验。 Quic消除了在相同连接上复用的其他流的这种停滞。
跨IP地址的连接迁移:如果IP更改,TCP请求将失败。然而,通过随机生成的64位标识符识别Quic连接,因此使用Quic的客户端可以在IP地址的改变中不间断地继续在飞行中,不间断地在IP地址的变化中不间断地继续。
更快的连接建立:在Snapchat,在Quic之前,P90 Connection Setup占用高达300ms。此连接设置延迟转换为用户等待延迟,并阻止用户接收捕捉和查看故事。 Quic的更快连接直接降低用户等待延迟并提高用户体验。
改进的拥塞控制:在SNAP时,上传媒体的大小可以大约10MB。更好的拥塞控制算法可以提高吞吐量,降低延迟和错误率,特别是对于大型媒体。
没有线路阻塞的多路复用:Snapchat具有富含内容的使用情况,包括捕捉,故事,发现内容等。通常,使用相同的连接有多个下载流。 Quic消除了阻止问题的HTTP2头,例如避免发送消息请求阻止聚光灯请求。
跨IP地址的连接迁移:与朋友在一起时,由于他们的WiFi连接中的下降而无法发送消息,可能会导致劣化的体验。连接迁移解决了这种痛苦点。
丢失连接的检测:由于丢失的连接而导致的长装锭子是令人不安的,特别是当Snapchatter处于全屏模式时享受内容。使用Quic,当请求由于丢失的连接而失败时,我们可以在提供用户友好的UI时检测和重试。
Snapchat的客户端网络堆栈建立在开源移动网络库音乐节的顶部。 Snap Leverages不仅用于Quic,而且为了通过丰富的指标和日志提高可观察性。我们能够构建客户端和服务器网络性能的凝聚力。
我们根据国家和平台的网络性能选择了不同的协议。通常,我们观察到,使Quic改善P90 / P99网络延迟将6-20%和网络误差达到3%-8%。低网络连接用户群体甚至有更多的改进。在这里,我们展示了三个例子。
在第一个示例中,我们在2019年10月在我们的广告服务中启用了Quic。我们观察到P90 / P99的延迟改进和错误率。
我们观察到所有错误代码的错误率改进,包括连接超时,连接丢失,请求超时。在国家和地区的延迟改善的进一步分析中,我们观察到具有相对较差的网络质量和进一步与我们服务的地理距离的国家和地区的更高延迟改善。
在第二个示例中,在Quic之上,在客户端上启用BBR拥塞控制到服务器路径也带来了显着的延迟改进。较大的请求有效载荷有更多的改进。
在最后一个示例中,通过启用Android上的连接迁移,在丢失WiFi连接时,网络请求成功率增加了20%。
随着Quic集成的成功故事,向前迈进,我们将在Quic上加倍,包括: