Snapchat QUIC实践:小协议解决大问题在

网络 网络管理
我们都知道UDB协议似乎无序不可靠的协议,但是其传输高效,可以并行传输可以极大提高传输性能,那么在HTTP3下传输的可靠性就要有QUIC来保证。本文我们就来学习一下Snapchat的QUIC实践。

熟悉网络的小伙伴,应该都知道下一代的应用层网络传输协HTTP3将有重大转变底层网络层的传输协议将会由目前的TCP变成UDP,并基于谷歌开源的QUIC协议为中间层。我们都知道UDB协议似乎无序不可靠的协议,但是其传输高效,可以并行传输可以极大提高传输性能,那么在HTTP3下传输的可靠性就要有QUIC来保证。QUIC也从最初的实验,到实际使用,逐渐成了一个众所瞩目的协议,谷歌,脸书,亚马逊,Cloudflare等都有在线上尝试和使用。本文我们就来学习一下Snapchat的QUIC实践。

[[407507]]

现状

Snapchat(色拉布)是由Stanford两位学生开发“阅后即焚”照片分享应用站点。使用Snapchat用户可以拍照、录制视频、增加文字描述和图片,并可以通过网络分享给自己好友和粉丝。在其中服务性能,尤其是网络性能是关键,在分享东西时如果延迟就会有很大影响。

根据他们的分析:在Snapchat 的服务流程中UI渲染和数据磁盘持久化写入都可以在几毫秒内实现,而其中瓶颈在于网络上的延迟,可能需要几秒钟,而且错误率和对硬件设备限制都很高。为了减少网络延迟和错误,在通过使用减少请求包和响应包,减少不必要的同步,利用全球内容分发CDN厂商加速等常规的做法。当然他们也使用了新的传输技术,下一代高速UDP Internet网络协议QUIC 。

老架构

Snapchatter使用QUIC之前的网络栈。以发送Snap为例,在应用层,Snap媒体通过入HTTP2请求传输中。使用TLS 在安全层 来保证连接的安全,利用TCP将请求拆分成chunk上传Snap到服务器。然而,TCP+TLS+HTTP2 堆栈对于移动网络环境来说并不是最理想的。 例如,如果 Snapchatter 在WiFi和 WAN之间切换,TCP 请求将失败。对于与朋友聊天的用户,由于连接断开而无法发送消息会导致体验下降。

QUIC优势

QUIC是一种互联网传输协议,由谷歌的工程师开发。QUIC 是HTTP3的基础,底层基于UDP,用来取代HTTP2的TCP+TLS+。 QUIC 解决了许多传输层和应用层问题,同时几乎不需要应用程序开发人员进行更改。如上图所示,QUIC没有改变网络层网络协议,也无需更改高层的HTTP协议。

与HTTP2的TCP+TLS+协议栈相比,QUIC在以下几个方面做了改进:

  • 更快的连接建立:QUIC 握手支持零往返与,在发送有效载荷之减少TCP+TLS 的1-3 次往返交互 。
  • 改进的拥塞控制:QUIC具有可插拔的拥塞控制,并且为拥塞控制算法提供比TCP 更丰富的信息。 例如QUIC BBR v1 和QUIC BBR v2 。
  • 无队头阻塞的多路复用:对于HTTP2连接,当TCP 数据包丢失时,该连接上的任何流都无法前进,直到数据包被远端重新传输和接收。这会导致延迟增加,并可能降低移动网络连接上的用户体验。 QUIC 消除了在同一连接上复用的其他流的这种停滞。
  • 跨IP地址的连接迁移: 如果IP更改,TCP请求会失败。 而QUIC连接由QUIC 协议层随机生成的64位标识符识别,因此使用QUIC的客户端可以继续进行中的请求,在IP地址更改时不会中断,从而实现不受干扰的用户体验。
  • 连接丢失检测: QUIC可以快速检测连接丢失,避免长时间请求被挂起。
  • QUIC的这些优势,非常适合有解决Snapchat的问题,极大地提高了其用户体验。
  • 更快的连接建立:在采用QUIC之前,p90 连接建立需要长达300毫秒。这种连接设置延迟转化为用户等待延迟,并阻止用户接收快照和查看信息。QUIC更快的连接直接减少了用户等待延迟并改善了用户体验。
  • 改进的堵塞控制:Snapchat上传的Snap媒体大小可以能会达到10MB以上。更好的拥塞控制算法可提高吞吐量、降低延迟和错误率,尤其是对于大型媒体。
  • 多路复用,无队头阻塞: Snapchat具有丰富的短内容用例,包括Snaps、Stories、Discover内容等。通常有多个下载流使用同一连接。 QUIC消除了HTTP2头阻塞问题,例如避免发送消息请求阻塞聚光灯请求。
  • 跨 P地址的连接迁移:与朋友一起时,由于wifi连接中断而无法发送消息可能会导致体验下降。连接迁移解决了这个痛点。
  • 检测连接丢失: 由于连接丢失而导致的长时间加载微调器令人不安,尤其是当 Snapchatter 处于全屏模式欣赏内容时。使用 QUIC,当请求因连接丢失而失败时,我们可以检测并重试,同时提供用户友好的UI。

效果

Snapchat 的客户端网络堆栈建立在开源移动网络库Cronet之上。Snap利用Cronet实现QUIC,还通过丰富的指标和日志提高了服务可观察性,构建了客户端和服务器网络性能的统一视图。

根据Snapchat不同地区不同协议对比。总体上来说,启用QUIC将 p90/P99 网络延迟提高了6-20%,网络错误降低了3%-8%。对低网络连接用户群还有更多改进。

Snapchat于2019年10月广告服务上启用了QUIC。可以观察到 P90/P99 的延迟和错误率大有改善。

如上面所示,所有错误代码的错误率都有所改善,包括连接超时、连接丢失、请求超时。在按国家和地区对延迟改进进行的进一步细分中,可以观察到网络质量相对较差且与服务的地理距离较远的国家和地区的延迟改进更高。

在第二个示例中,在QUIC的基础上,在客户端到服务器路径上启用BBR拥塞控制也带来了显著的延迟改进。更大的请求有效负载还有更多改进。

在最后一个示例中,通过在安卓启用连接迁移,丢失wifi连接时的网络请求成功率提高了20%。

总结

Snapchat的QUIC实践尝试取得了很好的效果,通过使用新技术,解决了服务上的痛点,提高性能,极大提高了用户的使用体验。通过小协议解决大问题,这样的案例,可以直接拿来使用,或者用来作为调研报告说服领导进行架构完善。

 

责任编辑:赵宁宁 来源: 今日头条
相关推荐

2012-06-01 11:05:40

携号转网

2018-09-21 14:27:05

云计算SAAS工具

2022-12-02 14:42:37

2017-07-20 07:30:16

大数据数据互联网

2010-03-17 16:06:08

Java线程同步

2011-04-28 15:35:38

打印驱动

2018-12-26 09:25:30

SQL ServerSQL语句数据库

2009-07-01 18:05:54

JSP中文乱码

2022-04-28 15:34:00

应用优化实践

2011-05-06 10:29:07

内存笔记本

2010-06-29 10:28:14

Wi-Fi干扰

2019-10-17 09:19:24

云计算行业科技

2020-03-16 10:56:06

大数据IT安全

2021-01-26 10:18:32

边缘计算物联网IOT

2013-09-04 11:15:14

用友用友U8+

2010-01-08 14:22:00

VB.NET精度问题

2009-07-16 10:04:56

Java语言

2013-02-28 09:50:39

戴尔问题私有化

2013-02-21 12:32:20

2013-06-13 09:54:21

虚拟机虚拟机迁移
点赞
收藏

51CTO技术栈公众号