| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> QUIC助力Snapchat提升用户体验 -> 正文阅读 |
|
[网络协议]QUIC助力Snapchat提升用户体验 |
翻译 / Alex 技术review / 刘连响 在Snapchat,我们的目标是让Snapchat Camera能够以最快的方式分享精彩瞬间。我们不希望用户在跟朋友分享的时候发生任何的延时。 在使用Snapchat的时候,网络请求特别重要。与UI更新和磁盘写入需要消耗数毫秒相比,网络延时可以高达数秒,而且伴随着高错误率和设备受限。为了降低延时和错误,我们把请求和响应变得尽可能小,降低不必要的同步,通过全球内容分发合作伙伴,使媒体信息接近用户,并使用更加高效的、下一代网络协议——QUIC(Quick UDP Internet Connections)。 01 — QUIC协议是如何助力Snapchat的? 让我们先来看看QUIC之前的网络堆栈。以Snap为例,在应用层,我们先将Snap媒体放入HTTP2 request payload中,然后使用TLS确保安全层上的连接安全,再通过TCP将请求分块,并将Snap上传到服务器。然而,对于移动网络环境来说,TCP+TLS+HTTP2协议栈是次优的。比如,当Snap用户在Wifi和WWAN之间切换的时候,TCP就会请求失败。当Snap用户在和朋友聊天的时候,由于连接中断而无法发送信息会给他们带来糟糕的体验。 QUIC是由谷歌工程师开发的一种互联网传输协议。QUIC基于UDP, 是替换TCP+TLS+HTTP2的HTTP3的基础。它解决了许多传输层和应用层的问题,而且应用开发者无需任何修改或者只需做小部分改动。如上图所示,QUIC不会改变底层操作系统网络协议,也不会更改HTTP。 和TCP+TLS+HTTP2协议栈相比,QUIC有如下优点: 更快建连:在发送有效载荷之前,TCP+TLS需要1~3个RTT(往返时延),QUIC支持0RTT。? 改进的拥塞控制:QUIC拥有可插拔的拥塞控制,与TCP相比,QUIC向拥塞控制算法提供更丰富的信息,如QUIC BBR v1和QUIC BBR v2。 避免队头阻塞的多路复用:对于HTTP2连接来说,当丢失一个TCP包时,该连接上的stream无法继续前进,直到这个包被再次传输或者被接收方收到。这就导致延时增加,进而降低用户体验(在移动网络连接环境中)。而QUIC会通过多路复用其他stream来消除这种延时。? 连接迁移:如果IP地址发生改变,TCP请求将会失败。而QUIC连接是以一个 64 位的随机数作为 ID 来标识, 即使IP地址改变,客户端仍可不受干扰地继续请求,使用户体验如常。 发现连接丢失:QUIC可以快速发现连接丢失,并避免长时间的请求挂起。 QUIC的这些优点很好地应用在Snapchat的用例中: 更快建连:在使用QUIC之前,Snapchat p90建立连接需要耗时300毫秒,这种连接上的延时转变为用户等待延时,并阻止用户接收和查看Snap信息。而QUIC上的更快连接直接减少了用户等待时间并提升了用户体验。 改进的拥塞控制:Snap上,用户上传的媒体文件可高达10MB。更好的拥塞控制算法可以提升流量,并降低延时和错误率(尤其对于大文件来说)。 避免队头阻塞的多路复用:Snapchat拥有丰富的短内容用例,如Snaps和故事、发现内容等。一般情况下,多种下载stream会使用同一个连接。QUIC消除了HTTP2队头阻塞问题,如避免发送信息请求阻塞spotlight短视频请求。 连接迁移:如果wifi连接断掉,无法发送信息,将会大大降低Snap用户的体验,而QUIC解决这个痛点。 发现连接丢失:发生丢失连接时,不断加载的旋转图标着实令人感到厌烦(尤其当用户正使用全屏模式观看内容时)。使用了QUIC,当丢失连接导致的请求失败发生时,我们会立即发现,并再次尝试连接,同时向用户提供友好的界面。? 02 — QUIC在Snapchat的应用 Snapchat的客户端网络堆栈建立在开源移动网络库Cronet之上。Snap之所以使用Cronet,是因为它不仅支持QUIC,还可以通过丰富的指标和日志提升可观察性。使我们能够更加全面地观测客户端和服务端网络性能。 示例展示 我们根据不同国家和平台的网络性能选择不同的协议。总体来说,我们观察到启用 QUIC 将 p90/P99 网络延时提高了 6~20%,网络错误降低了 3%~8%。QUIC对低网络连接用户群还有更多改进。这里我们展示了三个示例。 第一个示例:?2019 年 10 月,我们在广告服务上启用了 QUIC。我们观察到, P90/P99 的延时和错误率有所改善。 我们观察到,所有错误代码的错误率都有所改善,包括连接超时、连接丢失、请求超时。在按国家和地区进一步细分时,我们发现,网络质量相对较差且与我们的服务地理距离较远的国家和地区的延时改善程度更高。 第二个示例:在 QUIC 之上,在客户端到服务器路径上启用 BBR 拥塞控制也带来了显著的延时改进。更大的request payload得到的改进更多。 最后一个示例:在Android上启用连接迁移后,wifi连接断掉时的网络请求成功率提升了20%。 03 — 未来工作 成功集成了QUIC使得我们不断向前推进,未来,我们将会在QUIC上付诸更多努力: 提高QUIC的覆盖率 进一步利用QUIC的优点:包括在 BBR V2 上进行试验,支持在 iOS 上的连接迁移等。 原文链接: https://eng.snap.com/quic-at-snap 详情请扫描图中二维码或点击阅读原文了解大会更多信息。 |
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/27 14:38:48- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |