InfoQ|阿里淘系自研标准化协议库 XQUIC 首次公开:直播高峰期卡顿可降低 30%( 三 )


InfoQ|阿里淘系自研标准化协议库 XQUIC 首次公开:直播高峰期卡顿可降低 30%
本文插图

图 4. XQUIC 内部的连接状态机设计(参考 TCP)XQUIC 拥塞控制算法模块我们将 XQUIC 传输层的内部设计放大 , 其中拥塞控制算法模块 , 是决定传输行为和效率的核心模块之一 。
InfoQ|阿里淘系自研标准化协议库 XQUIC 首次公开:直播高峰期卡顿可降低 30%
本文插图

图 5. XQUIC 拥塞控制算法模块设计为了能够方便地实现多套拥塞控制算法 , 我们将拥塞控制算法流程抽象成 7 个回调接口 , 其中最核心的两个接口 onAck 和 onLost 用于让算法实现收到报文 ack 和检测到丢包时的处理逻辑 。 XQUIC 内部实现了多套拥塞控制算法 , 包括最常见的 Cubic、New Reno , 以及音视频场景下比较流行的 BBR v1 和 v2 , 每种算法都只需要实现这 7 个回调接口即可实现完整算法逻辑 。
为了方便用数据驱动网络体验优化 , 我们将连接的丢包率、RTT、带宽等信息通过埋点数据采样和分析的方式 , 结合每个版本的算法调整进行效果分析 。 同时在实验环境下模拟真实用户的网络环境分布 , 更好地预先评估算法调整对于网络体验的改进效果 。
面向业务场景的传输优化XQUIC 在 RPC 请求场景降低网络耗时 15% , 在短视频场景下降低 20% 卡顿率 , 在直播场景高峰期降低 30% 卡顿率、提升 2% 秒开率(相对于 TCP) 。 以下基于当下非常火热的直播场景 , 介绍 XQUIC 如何面向业务场景优化网络体验 。
优化背景部分用户网络环境比较差 , 存在直播拉流打开慢、卡顿问题 。
InfoQ|阿里淘系自研标准化协议库 XQUIC 首次公开:直播高峰期卡顿可降低 30%
本文插图

图 6. 某节点丢包率和 RTT 统计分布这是 CDN 某节点上统计的丢包率和 RTT 分布数据 , 可以看到 , 有 5% 的连接丢包率超过 20% , 0.5% 的连接 RTT 超过 500ms , 如何优化网络较差用户的流媒体观看体验成为关键 。
秒开卡顿模型
InfoQ|阿里淘系自研标准化协议库 XQUIC 首次公开:直播高峰期卡顿可降低 30%
本文插图

图 7. 直播拉流模型直播拉流可以理解为一个注水模型 , 上面是 CDN 服务器 , 中间是播放器缓冲区 , 可以理解成一个管道 , 下面是用户的体感 , 用户点击播放时 , CDN 不断向管道里注水 , 当水量达到播放器初始 buffer 时 , 首帧画面出现 , 然后播放器以一定速率排水 , 当水被排完时 , 播放器画面出现停顿 , 当重新蓄满支持播放的水后 , 继续播放 。
我们假设 Initial Buffer(首帧)为 100K(实际调整以真实情况为准) , 起播时间 T1 < 1s 记为秒开 , 停顿时间 T2 > 100ms 记为卡顿 。
1. 优化目标

  • 提升秒开:1s 内下载完 100K
  • 降低卡顿:保持下载速率稳定 , 从而保持管道内始终有水
2. 核心思路
  • 提升秒开核心 -- 快
  • 高丢包率用户:加快重传
  • 高延迟用户:减少往返次数
  • 降低卡顿核心 -- 稳
  • 优化拥塞算法机制 , 稳定高效地利用带宽
拥塞算法选型常见的拥塞算法可分为三类:
  • 基于路径时延(如 Vegas、Westwood)
将路径时延上升作为发生拥塞的信号 , 在单一的网络环境下(所有连接都使用基于路径时延的拥塞算法)是可行的 , 但是在复杂的网络环境下 , 带宽容易被其他算法抢占 , 带宽利用率最低 。
  • 基于丢包(如 Cubic、NewReno)
将丢包作为发生拥塞的信号 , 其背后的逻辑是路由器、交换机的缓存都是有限的 , 拥塞会导致缓存用尽 , 进而队列中的一些报文会被丢弃 。


推荐阅读