伴随着直播行业的井喷,越来越多的大型活动和赛事开始采用网络直播的方式,它们在为平台带来高涨热度和庞大流量的同时,也对平台的网络和分发能力带来了巨大的挑战。
面对海量并发,腾讯云音视频除了有坚实的RT-ONE™基础网络、强大的音视频PaaS产品能力保障外,还有一项少有人知的神秘黑科技——能大幅降低带宽压力的X-P2P技术。
它到底有什么神奇过人的地方呢?为了让大家了解这项技术,我们和X-P2P团队的工程师们来了一场深入的交流。
P2P即Peer to Peer,也就是对等网络。和传统的CS(Client/Server)、BS(Browser/Server)网络架构相比,P2P网络中的每个节点的地位都是对等的。每个节点既充当服务器,为其他节点提供服务,同时也享用其他节点提供的服务。这个概念看起来很简单,但要将P2P技术应用到直播上,却没有那么容易。
P2P对等网络与传统CS网络架构
「P2P这项技术很早就有了,腾讯做P2P的历史其实也很悠久。QQ、微信、腾讯视频、QQ影音、旋风下载这些产品都有用到P2P,可是当讨论要做直播P2P的时候,内部的声音还是觉得做不了,做不到,认为这个东西没法实现。」回忆最初做直播P2P,X-P2P团队的攻城狮这样说道:“直播和点播不一样,点播做P2P,你将文件存在那里,过一天、过一个月可能都会有人看。但直播不行,它要低延时,时间窗口期没有那么大,可能就那么几秒钟,这几秒钟一过,所有人就都已经看到最新内容了,你再分享就没有意义了。”
做直播P2P,X-P2P团队就必须要解决实时低延迟这个难点。普通的P2P,内容都是已经完整存在的,实现相对简单,但直播内容是实时产生,实时传输的。X-P2P最初采用的还是窗口模式,这也是点播P2P的常用模式。这种模式,首先设置两个阶段的窗口,第一个阶段的窗口为保护窗,是接近播放的临近播放区,这段时间是临近播放的数据缓冲区,内容比较紧急,如果其中内容没有完整,则立即向CDN请求,进行下载,保证不影响播放;第二个阶段的窗口为P2P抢占窗,是临近播放区之后的一段时间,这段时间距离播放较远,是直播产生的数据预存区间,其中内容依靠其他P2P节点来努力填充。因为点播不存在延时问题,窗口可以设置的很长,这样的模式就能够获得很好的效果。但这种模式放到直播来,就会出现一个很大的问题,要想获得很好的效果,两个窗口就都需要大于4S,这样最优的结果也会产生接近10s的端到端延迟。
窗口模式示例
「我们是15年开始做这项技术的,那时候的直播和现在区别还是很大的,延时也不像现在这么低,所以一开始用这种窗口模式也能满足需求。」因此,X-P2P团队的工程师们不断的优化这种模式,将窗口越缩越短,通过不断缩短窗口时长来满足直播的低延时要求。但随着直播本身的延时越来越低,团队的工程师们意识到,单纯缩短窗口时间总有一天会到达瓶颈,但直播对低延时的要求却是没有止境的,必须要突破窗口的限制,另辟蹊径才能解决这个问题。
「当时我们的目标就是让直播P2P能够做到和CDN一样的低延时,所以我们就假设没有走P2P,直接从CDN拉,然后去感受这个数据是如何及时达到的,去找到它的特征。」放弃原来的思维方式,走出一条新的道路是非常困难的,这也是为什么在最初做的时候,内部会认为这项技术实现不了。但通过这样的尝试,X-P2P的工程师们最终找到了突破窗口限制的方法:利用直播本身的特征,以帧为单位来接收数据。直播是实时的,假设一场直播的帧率为25帧,那就等于它每40毫秒会传输1帧。直播P2P的传输也可以这样,每40毫秒传1帧,过了40毫秒就传下一帧。没有了窗口,就需要新的方法来确定数据的完整性,X-P2P又对数据进行了编号,直播中所有的帧都应该是按顺序到来的,如果先来了1,后面来的是3,就知道2丢了。通过这样的方法,X-P2P团队成功的突破了窗口的限制,使得直播P2P能够做到和CDN一样的低延时。
无窗口制数据完整性验证
「其实客户直播只有量级巨大的才有必要上P2P,但量一大的话,客户的容忍度就比较低,它不是一个小规模的产品,动不动就有上万人,上十万人同时在看,很多活动更是超百万人在线。像去年的S10,我们X-P2P的量级已经接近20T,峰值在线更是超过两千万。对于这样的活动,客户都是会拿着放大镜来找问题,绝对不允许出任何故障的。」
当面对像S赛、奥运会这样同时会吸引上千万人关注的超大型活动,任何一点点的问题都会变成很严重的事故。设想一个情景,下班回家打开斗鱼,看直播的时候画面卡住了,刷新几次之后恢复了正常观看,你会觉得这个问题很严重吗?但如果这个场景换成,在家等着看奥运会百米飞人大战,结果直播卡住了,刷新几次之后恢复了正常观看,这时候比赛可能都结束了,你又会是什么感受呢?
所以做直播P2P必须要在面对海量并发时还能保持稳定,但想要实现这一点却很困难。一场直播,不仅内容是实时的,观众也是在实时变化的。观众不断的离开、加入,然后又离开,如何去保证P2P这样一张拓扑网络的稳定?A分享给B,B分享给C,C分享给D,如果A走了怎么办?网络稳定了,分享率怎么保证?面对这些难题,X-P2P团队的工程师们和客户一起找问题,做优化,将技术做的越来越完善。
「最初接的第一家大规模客户是斗鱼,当时技术不是很完善,他们每天都会反馈很多的问题,我们自己也在找问题,大部分都是很小的点,但就是不断优化这些小问题,从中找原因,再解决,我们把技术做到了业内领先。」通过这样一个小点一个小点的积累,X-P2P突破了一个又一个的技术难题。自研传输协议的轻量级可靠传输,环+树混合的网络拓扑结构,动态传递来源路径等等这些技术让X-P2P现在能够实现分享率超过90%,卡顿小于1%的效果。
X-P2P使用效果
「我们X-P2P的抗突发能力还有其它效果现在都做到了业内领先,但不是说它就已经没问题、没优化空间了。一个是对客户大规模使用的敬畏,任何小的问题处理不慎都会以庞大基数体现出来,所以稳定性是一再提高到0 Bug、各核心指标平稳上线的程度。二是来自团队自驱,技术是无止境的,我们自己也在不断突破,追求更稳定的效果,更高的质量。」
当下,X-P2P的主要应用场景还是直播,但X-P2P团队的工程师们早已将眼光投向更广阔的前沿领域。
「X-P2P的X本来就有“未来”的含义,P2P对等网络这个概念已经太久远了,我们现在做的很多很前沿的东西已经没法用P2P来概括了,用万物互联来概括或许更贴切。我们现在的架构就是面向万物互联的。」谈到X-P2P技术的未来,团队的负责人这样说到。
现在的P2P已不似早期那样野蛮、暴力。BitTorrent的中文翻译是“比特洪流”,早期的P2P就像“洪流”一样,是一种对网络资源的无情侵占。而现代P2P则充分考虑了就近调度、节点间负载均衡,是对CDN边缘节点的无形补充。这就像仓储物流发展的三个阶段:早期万维网,还没有CDN的时候,所有用户访问网络,都要经过骨干网,导致骨干网瓶颈明显,就像所有人买东西都要到厂家门口取货;有了CDN之后,资源被下沉到CDN的OC节点,类似于每个省会都建立了分销点,大家去取货再也不必都跑到厂家那里了,直接去省会分销点就好了;而有了现代P2P之后,每个拿到数据的节点,都能自己充当分销点,其他人可能在自家县城就可以找到分销点,从而就近拿到货品,极大地节省了省会分销点的压力,优化了整体网络负载。在万物互联的未来,P2P的去中心化也将进一步发挥优势。
虽然现在距离万物互联还有着很长的一段距离,但X-P2P团队对此充满了信心。他们目前也正在和清华大学合作,共同解决网络传输、组网调度等方面的问题。未来,X-P2P团队的工程师们也将继续打磨产品,为构建万物互联提供坚实助力。
腾讯云音视频在音视频领域已有超过21年的技术积累,持续支持国内90%的音视频客户实现云上创新,独家具备 RT-ONE™ 全球网络,在此基础上,构建了业界最完整的 PaaS 产品家族,并以 All in One SDK 的创新方式为客户服务。腾讯云音视频为全真互联网时代,提供坚实的数字化助力。