▐ 秒开卡顿模型
图7. 直播拉流模型
直播拉流可以理解为一个注水模型,上面是CDN服务器,中间是播放器缓冲区,可以理解成一个管道,下面是用户的体感,用户点击播放时,CDN不断向管道里注水,当水量达到播放器初始buffer时,首帧画面出现,然后播放器以一定速率排水,当水被排完时,播放器画面出现停顿,当重新蓄满支持播放的水后,继续播放。
我们假设Initial Buffer(首帧)为100K(实际调整以真实情况为准),起播时间 T1 < 1s 记为秒开,停顿时间 T2 > 100ms 记为卡顿。
-
优化目标
-
- 提升秒开:1s内下载完100K
-
降低卡顿:保持下载速率稳定,从而保持管道内始终有水
-
核心思路
-
- 提升秒开核心–快
-
- 高丢包率用户:加快重传
-
高延迟用户:减少往返次数
-
降低卡顿核心–稳
-
- 优化拥塞算法机制,稳定高效地利用带宽
▐ 拥塞算法选型
常见的拥塞算法可分为三类:
- 基于路径时延(如Vegas、Westwood)
将路径时延上升作为发生拥塞的信号,在单一的网络环境下(所有连接都使用基于路径时延的拥塞算法)是可行的,但是在复杂的网络环境下,带宽容易被其他算法抢占,带宽利用率最低。
- 基于丢包(如Cubic、NewReno)
将丢包作为发生拥塞的信号,其背后的逻辑是路由器、交换机的缓存都是有限的,拥塞会导致缓存用尽,进而队列中的一些报文会被丢弃。
拥塞会导致丢包,但是丢包却不一定拥塞导致的。事实上,丢包可以分为两类,一类是拥塞丢包,另一类是噪声丢包,特别是在无线网络环境中,数据以无线电的方式进行传递,无线路由器信号干扰、蜂窝信号不稳定等都会导致信号失真,最终数据链路层CRC校验失败将报文丢弃。
基于丢包的拥塞算法容易被噪声丢包干扰,在高丢包率高延迟的环境中带宽利用率较低。
- 基于带宽时延探测(如BBR)
既然无法区分拥塞丢包和噪声丢包,那么就不