写点什么

全面揭秘:抖音集团 QUIC 千万 QPS 应用实践

  • 2023-08-17
    上海
  • 本文字数:3482 字

    阅读完需:约 11 分钟

全面揭秘:抖音集团 QUIC 千万 QPS 应用实践

近日,ArchSummit 全球架构师峰会深圳站成功举办。随着移动互联网的蓬勃发展,人们对网络速度和实时性的需求日益增加。在面对越来越多的图片、视频和音频等大资源时,页面加载缓慢、视频卡顿等问题频发,传统的传输控制协议(TCP)显得力不从心。近年来,QUIC 协议在网络通信领域掀起热潮,在直播、视频、点播、下载等场景得到广泛应用,QUIC 显著提升网络加载速度,带来了前所未有的加速效果和用户体验。会上,火山引擎边缘云高级工程师龙志与多位行业资深专家共同探讨,在大带宽、低延时场景下,打造高质量的网络环境,服务用户这一新难题的解决方案。


火山引擎高级工程师龙志认为:QUIC 作为新型传输协议,可以显著提升网络性能,在有限的资源条件下承载千万 QPS 成为了可能,这也是大多数行业伙伴选择 QUIC 协议的原因。2018 年,火山引擎正式完成 QUIC 项目立项并启动开发;19 年内部 API 业务顺利落地;20 年在文件传输场景落地,QPS 突破 300 万;2021 年在图片业务落地,QPS 突破 2000 万;22 年支持抖音春节活动并上线了 IETF QUIC;23 年在视频点播场景落地并支持 MPQUIC 协议,QPS 突破 3000 万。

QUIC 协议的独特优势

  1. 0-RTT 建立连接:理论上,TCP 结合 TCP-FastOpen 和 TLS1.3 两个特性可以实现 0-RTT 能力,但这需要全链路配合,尤其是中间路由器的支持。从业界数据看,在 TCP 上能真正实现 0-RTT 的比例是极低的。QUIC 是基于 UDP 的协议,具备节省 TCP 握手的时间消耗优势,QUIC 除首次握手外,绝大多数场景都能实现 0-RTT。目前,火山引擎 QUIC 0-RTT 占比达到 95%以上;

  2. 双边用户态协议栈加速:这两个特性使 QUIC 的想象空间变得更大。比如,一些高级网络特性、多路径、FEC 等功能可以基于 QUIC 实现快速研发迭代,双端可控,上线部署也非常方便;

  3. 连接迁移:连接迁移是指用户可以在 WiFi 和蜂窝网络之间实现无缝切换。在工程落地过程中,由于边缘节点大多数属于单一运营商,如果 WiFi 和蜂窝网络属于不同运营商,需要在调度上做一些工作才能实现连接迁移;

  4. 多路复用:H2 也有类似的功能,但受限于 TCP 的可靠传输特性,不同请求之间还是会互相影响,存在队头阻塞问题。QUIC 基于 UDP,可以屏蔽这个问题,但 GQUIC 使用 HPACK,Header 都在一条 Stream 上发送,还是会存在一定程度的阻塞,IETF QUIC 使用 QPACK 的编解码流可以解决这个问题。


火山引擎 QUIC 架构设计

  1. 端边云一体:火山引擎 QUIC 充分发挥边缘云端边云一体的优势,在原有客户端、边缘节点、中心机房接入架构的基础上进行微调,将 QUIC 能力嵌入到端边云全链路中,以最小的代价支持 QUIC 协议能力。同时,端边云共用一套 QUIC 网络库,避免同一个功能需要在双端不同网络库重复实现,大幅提升开发和运维效率;

  2. 高可靠:在 Nginx 升级时,TCP 可以通过关闭 Listen FD 实现无损升级。火山引擎 QUIC 通过基于 Ebpf 实现的连接调度模块,在升级时,将新老连接分别调度到新老 Worker,从而实现无损升级。另外,QUIC 作为一个新型协议,相关的监控、可观测等配套工具不够完善。为此,火山引擎在双端实现了协议信息上报能力,实现了实时监控;

  3. 高性能:在传输优化方面,火山引擎针对业务网络特性进行针对性优化,分场景定制协议优化算法;在 CPU 优化方面,火山引擎通过丰富的优化策略,提升 QUIC CPU 性能,解决 QUIC CPU 高消耗这一痛点;在高级特性方面,针对部分网络性能要求极高的场景,火山引擎提供 MPQUIC、FEC 等高级特性进一步提升 QUIC 性能,充分发挥客户端多网卡特性,增加弱网对抗能力。



火山引擎 QUIC-网络性能优化

网络性能-全链路分析系统优化

QUIC 作为新型的双端加密传输协议,缺少相应的分析系统,但在上线落地过程中难免会遇到性能问题,建立一套全链路分析系统显得格外重要。以点播场景为例,火山引擎通过全局的 TraceId 贯穿每个请求经过的 Nginx、双端 QUIC 网络库、播放器等关键模块,做到每个请求可追踪,通过数据,形成性能监控大盘。另外,火山引擎对 Qvis 进行定制化开发,实现网络传输可观测和常态化开启状态,为业务排查故障以及优化网络性能带来了非常大的便利。



网络性能-分场景优化

以动态 API 请求、视频上传、视频点播点播三个典型场景为例,基于全链路分析系统,工程师可以对线上的各种场景进行针对性优化。

  1. 动态 API 请求场景:在飞书 QUIC 实验过程中,用户处于企业网环境,部分企业网存在 Udp Block 情况,导致 QUIC 请求失败。面对这种场景,火山引擎充分发挥 TCP 的通用性以及 QUIC 的性能优势,在新建连接时增加 TCP、QUIC 竞速机制,通过远端云控竞速策略,使 TCP、QUIC 达到互补状态,提升稳定性和网络性能;

  2. 视频上传场景:视频上传场景中,存在无线网络 RTT 抖动较大,丢包检测算法会触发大量的虚假重传、降低带宽的有效利用率、增加上传耗时等问题。为此,火山引擎增加了虚假重传检测机制,如果判断出现了虚假重传,系统会根据情况调整丢包检测阈值(包括时间阈值和包乱序阈值),提升传输效率;

  3. 视频点播场景:视频点播场景中,新建连接需要经过若干个 RTT 才能探测到稳定的带宽,这会影响视频起播率。通过发挥 QUIC 的双端协议优势,将用户历史连接探测到的稳定带宽保存在客户端,下次新建连接将利用历史数据快速恢复带宽,有效提升视频起播率。



网络性能-QUIC FEC 优化

QUIC FEC 在发送数据时按照特定的编码算法发送一些冗余数据。出现丢包时,接收端可以通过编码数据恢复丢失的数据包,相比 ARQ(自动请求重传),可以在更短时间内恢复丢包,节省丢包检测/重传过程的耗时。

  1. TLP-FEC:FEC 需要在原始数据基础上增加一些冗余数据,存在原始数据和冗余数据相互抢占带宽的情况,极端场景下甚至会出现开启 FEC 导致性能劣化的后果。为了应对这种情况,火山引擎提出了 TLP-FEC,即在请求数据的尾部,判断后续数据发送状态,利用空闲带宽来发送冗余数据,解决带宽抢占的问题。TLP-FEC 适合动态请求 API 场景;

  2. A-FEC:XOR 和 RS 算法,都需要设定精准的冗余度,设置难度高。火山引擎提出 A-FEC(Adaptive FEC 自适应 FEC)策略,以实时统计数据为基础,精准设置冗余度,实现带宽成本和恢复能力的平衡。



网络性能-QOE 反馈优化

传统协议优化通常基于网络传输的视角进行,对用户的体验感知较少。火山引擎充分利用 QUIC 双边加速特点,与业务深度结合,将业务客户端 QoE 数据(请求优先级/码率/网络类型)反馈给服务端进行针对性优化,有效降低用户卡顿率和重传率,实现降本增效。



网络性能-MPQUIC 优化

MPQUIC 想在工程上落地,需要对中间链路,包括四层 LB 以及 QUIC 连接调度模块进行改造。火山引擎对 QUIC CID 进行了重新定义,用不同字段分别表示 QUIC 连接、后端 RS、路径等信息。利用移动设备 Wifi 和 Cell 双通道同时传输数据,提升速度,增加弱网对抗能力,进一步发挥 QUIC 双端用户态协议优势,提升用户体验。在效果上,线上 Feed 推荐流场景 AB 对比实验结果显示,MPQUIC 对单路径 QUIC 网络性能提升明显,网络耗时 P99 降低约 40%,平均值和 P90 降低超过 20%。



火山引擎 QUIC-CPU 性能优化

QUIC CPU 高消耗一直是业界痛点,在大流量业务场景中,问题更加突出。针对不同场景,火山引擎提供通用场景、流媒体场景、动态请求场景等性能优化方案:

  1. 通用场景:编译 &链接优化,如 PGO/LTO/Bolt 等方法;

  2. 流媒体场景:发方向,通过 GSO 将 QUIC 包进行聚合,降低系统调用次数,大大提升发包性能,数据显示,线上收益 15%左右;收方向,通过 ACK 算法优化,在不影响网络性能的基础上,降低 ACK 频率,大大降低收包方向 CPU 消耗;

  3. 动态请求 API 场景:将 QUIC 握手阶段的非对称加解密卸载到硬件加速卡或者其他机器的空闲 CPU 上,支持在远程卸载失败的情况下 fallback 到本地卸载模式,提升握手性能;IETF QUIC 使用 QPACK 的编解码流解决了 GQUIC 中请求 Header 存在的队头阻塞问题。线上会存在部分 Header 一直变化的情况,此时编解码流会持续发送对应 Header 的编码数据,消耗大量 CPU 资源,火山引擎采取不加入动态表的策略来节省资源消耗。



火山引擎 QUIC-业务收益

目前,火山引擎 QUIC 已在各场景大规模上线,覆盖了抖音、飞书、头条、西瓜等 APP,涉及实时通信、音视频、云游戏等多个领域,业务场景包括 API、上传、点播、长连接等,日高峰 QPS 超过 3000 万,且还在不断增长。



ArchSummit 全球架构师峰会为 QUIC 协议在网络通信领域的创新应用提供了一个重要的交流平台。通过这次峰会,行业专家们汇聚智慧,共同探讨 QUIC 在各个业务场景的应用和优化。火山引擎边缘云愿与社会各界伙伴共同努力,致力于探索网络通信领域的创新技术,并与行业共享最新的成果。通过技术分享与合作,满足用户日益增长的网络需求,助力产业蓬勃发展。


关于火山引擎边缘云

火山引擎边缘云,以云原生技术为基础底座,融合异构算力和边缘网络,构建在大规模边缘基础设施之上的云计算服务,形成以边缘位置的计算、网络、存储、安全、智能为核心能力的新一代分布式云计算解决方案。

发布于: 刚刚阅读数: 5
用户头像

边创未来,连接生活 2018-10-09 加入

火山引擎边缘计算官方账号

评论

发布
暂无评论
全面揭秘:抖音集团 QUIC 千万 QPS 应用实践_传输协议_火山引擎边缘云_InfoQ写作社区