本文来自熊猫直播基础研发部的投稿,是熊猫直播P2P分享率优化系列文章的第二篇,第一篇请访问这里。本文授权LiveVideoStack发布,重点展示了熊猫直播通过ASN组网提升P2P分享率的实践。
文 / 熊猫直播基础研发部
联通IP组网的弊端
回顾一下上一篇我们评估IP组网的可行性,存在几个问题,最为重要的挑战就是用户网络的复杂性。首先,大多数用户的IP是动态分配的结果,导致这个用户每次访问熊猫直播所属IP都不一样,每个月节点IP遍及将近上千万个;其次,用户层面上来说,我们需要实时获取基本的用户网络拓扑结构、实时掌握用户的网络状况并对其进行分析,哪些用户IP之间适合组网、哪些IP之间连通性更好、哪些IP之间距离更短,也就是说整个用户网络从IP层面来看是时时刻刻处于不断变化的状态。
结合上述两点,如果每个月利用上千万个节点IP,进行Floyd-Warshall经典的动态规划算法,计算任意两个节点IP间的最短路径计算,其时间复杂度为$O(n^3)$、空间复杂度为$O(n^2)$,数据体量大、计算速度慢,所以,虽然使用IP组网精确度较高,但是因为数据量大导致过程中的计算极其复杂,不适合熊猫直播的场景!
综上可知,如果我们想组网,单从IP层面下手肯定不行,必须先把IP先进行分组,将相邻的IP聚集成一个单位后在进行组网。
可行解决方法
既然IP组网存在较难跨越的障碍,我们提出几个和适用于IP分组的想法,包括ASN组网、Route组网、地域组网、运营商组网等。经过基本计算,我们发现千万节点IP中,遍及六千多个route、将近一千个ASN、三百多个二级市、三十多个省份。
route组网的可行性,实际上我们将熊猫用户遍及的千万个节点IP归结到route后,约遍及6000多个route,数量大大降低,计算复杂性同时也就降低不少。然而当我们享用空间换取时间时,利用查表方式,$6000^2$的数据还是远高于利用ASN组网查表的数量($1000^2$)。利用地域分组在主观意识上会觉得同地理区块应该距离比较近,但真实网络的状况和地理位置没有绝对关系,可能同一个自治系统内的IP遍及多个省份。而运营商组网就更不用提了,虽然计算复杂度相对很低,但分组粒度粗、精确度低,效果不理想。反观ASN组网,一千个ASN,计算复杂性不管在空间还是时间上,都落在可接受的范围,数据粒度也较为合适,最重要的是,其原理接近真实网络状态,各运营商都在使用,对于熊猫场景较为合适。
自治系统介绍
1. 自治系统与其编号
在互联网中,自治系统(自治系统,AS)指的是一个能够自主决定应该采用何种路由协议的小型单位。而一个自治系统将会分配一个全局的唯一的16位号码,我们把这个号码叫做自治系统号(ASN)。
还是不太清楚?还是觉得有点抽象?那我们换个说法,通俗的语言来形容,自治系统就是互联网里的一个一个独立王国,这一个个独立王国互联起来,就组成了互联网(Internet),每个王国有自己独立的国号,以利区别每个王国,而这个国号对应的就是自治系统号(自治系统编号,ASN)。
每个互联网的用户都置身于AS内,可以想像成每个王国里面的居民,比如中国电信AS号为4809,那么中国电信的用户就属于4809的独立王国,如果用户访问的服务器也是在这个AS内,那双向的流量就都在此王国中来回溜哒,如同居民们互相拜访一样没有任何问题。那么问题来了,如果访问的服务器属于另一个不同的AS呢?也就是说两个不同王国的居民们要如何跨王国访问彼此?
2. 边界网关协议
在介绍边界网关协议之前,我们先简单介绍一下内部网关协议(Interior Gateway Protocol, IGP)、外部网关协议(Exterior Gateway Protocol ,EGP)。
内部网关协议:运行在一个自治系统内部的一种路由协议,也就是网关(主机和路由器)间交换路由信息的协议。