虚拟专线 | WebRTC编风网
0

虚拟专线

已有 576 人阅读此文 - - - xiaoya

 跨ISP传输:南电信北网通

• 不少人都知道这句话:南电信、北网通,意思是南方是电信的地盘,北方是网通的地盘

• 北方的童鞋打游戏的时候会默认选择网通区,南方的童鞋则会选择电信区。原因很简单,相同ISP网络传输好,跨ISP传输质量差

• 现在国内ISP的地理界限已经没有清晰的边界了,但是跨ISP传输质量差这个结论还没有变化

• 保险起见我还准备了一份数据来说服从来不打游戏的好学生接收这个观点:

1

• 上边两张图都取自Agora机房的smokeping真实数据

• 第一张图是东北某联通机房到西北某电信机房

• 第二章图是东北某联通机房到西北某联通机房

跨ISP传输质量差的原因很多,有技术原因,也有商业原因甚至政治原因,至少在国内短时间内看不到改善的希望。因此多线机房的概念应运而生。

解决跨ISP问题:多线机房

多线机房就是一个机房有多条线路接入的机房,一图胜千言,请看图:

1

看起来跨ISP问题SO EASY!往下看这样一个教育场景的case:

1

• 1个CUCC网络的老师,给99个学生上课,33个CUCC,33个CMCC, 33个CTEL.

• 现在这个多线机房有100份流量

• 多线机房流量的价格是单线机房的5倍左右,因此相当于500份单线机房的流量

这笔账算完之后我们有个想法:使用单线接入用户,使用多线路由转发。

减少流量成本:单线接入、多线路由

增加3个不同ISP的单线机房用于接入用户,3个不同的单线之间通过的传输多线机房转发。

1

现在重新算一下流量账单:

• 用户到机房:1个老师 + 99个学生 = 100份单线机房流量

• 机房到机房:3份单线机房 + 3份多线机房 = 18份多线机房

• 进一步不难发现,随学生数量线性增加的只有单线机房的流量,昂贵的多线机房带宽是固定值

为了讨论方便,我们将接入用户的机房叫做边缘节点(Edge),机房间路由的机房叫做路由节点(Relay). 我们接下来发现了如下两个问题:

•(相同ISP的机房间)网络拥塞:相同ISP传输可以避开前边提到的政治、商业和大部分技术原因,但是网络拥塞仍然发生在互联网的每一跳路由上,网络拥塞仍然会导致丢包和抖动。

• 单点故障:互联网所有节点都是不可靠的,如果CUCC机房出现1分钟故障,那么所有CUCC网络的用户会在这一分钟质量会大幅下降;如果多线机房出现1分钟故障,那么跨ISP这部分传输质量会大幅下降

如果这两个问题解决了,我们在上图中云提供的就是专线级别的质量保证。也就是说只要数据包到达了云里的任意边缘节点,都能确保以专线级别的质量传输到云里的另一个边缘节点。

(相同ISP的机房间)网络拥塞

(1) 传输优化,让路径可控

抛开原理,从观察到的现象来看相同ISP的机房之间网络拥塞有这样几个特点:

• 发生频率低

• 持续时间短

• 丢包不严重

把smokeping的数据拉到最近10天,我们可以进一步验证这个规律。

1

可以在接收节点使用丢包重传的方法解决这种很温和的网络问题,这里分享一种常用的丢包重传算法:

• 记录Sender与Receiver之间的RTT

• 记录根据最终接收设备的jitterbuffer最大值MaxJitter,例如1秒

根据时间点,对lost packet最如下三种处理:

• Receiver发现丢包的时候,向Sender申请重传

• 如果超过一个RTT的时间,还是没有收到来自Sender的重传包,那么Receiver再次申请重传

• 如果超过了超时时间MaxJitter,还是没有收到重传包,那么Receiver放弃这个包

除了丢包重传之外,还有FEC等手段来帮助我们搞定相同ISP的机房之间出现的这种网络拥塞。换句话说不考虑机房故障的情况下,这种路径是可控的。

(2) 可控路径最大化

这句话乍一看B格满满什么鬼,换句话表述就清楚了:让机房离用户越近越好。

• 假设从A到B的语音包,直接传输需要经过公共互联网上的10跳路由

• 假设每个路由节点发生丢包的概率是0.5%

• 假设通过上小节优化后,可控路径内丢包概率是0.1%

1

第一种情况:不考虑两个终端设备的情况下,整个链路发生丢包的概率就是:1 – (99.5%)^10 = 4.9%

第二种情况:在第5、第6这两跳路由节点部署自己的机房,使这段路径可控,发生丢包的概率减小到:1 – (99.5%)^9 + 0.1% = 4.5%

第三种情况:我们在第1、第10这两跳路由节点部署自己的机房,发生丢包的概率减小到:0.1%

• 上述例子是为了描述方便,从实践中抽象出来的简易模型。其中的道理是:让机房离用户越近越好,尽可能多地将传输路径包含在自己的机房之间。

• 另一个启发是:机房的作用在前边是为了解决跨ISP传输问题,现在也可以用来解决相同ISP之间传输的问题了。

像高压电传输一样:网络传输也需要尽量扩大可控路径的范围。这就要求用更多的机房覆盖,用成本换质量。

(3) 成本换质量:边缘节点的部署

根据上一小节的思路,我们测试了国内上百个机房到全国各地用户的覆盖质量。我们对覆盖质量做如下定义:

一个城市的4G用户,到Agora的机房需要满足在一天99.9%的时间内:

• RTT <= 50ms

• Lost400 <= 1%

按照这个标准,国内至少需要18个单线机房做边缘节点,接入用户:

1

 单点故障

重申一下前边提到过的两种节点:

• 边缘节点:用于接入用户

• 路由节点:用于机房间转发

所以很显然我们也就存在这两种类型的单点故障。

(1) 边缘节点的单点故障

• 第一种办法是在前边18个单线机房的基础上,double一倍机房做备份。这样当西北地区移动机房有故障的时候,切换到备用机房

• 第二种办法是在故障时使用次优的机房,例如故障期间使用华北移动机房代替西北移动机房。

第一种办法的缺点是成本较高;

第二种办法的缺点是:

• 次优机房的选择需要实时测量+历史数据积累

• 工程上需要避免雪崩:大量用户瞬时切换到次优机房可能会再次导致这个机房发生故障

好在这两个问题在很多技术文档上都能找到解决方案,这里不再累述。

(2) 路由节点的单点故障

• 第一条当然是部署多个多线机房了

• 第二条是需要对所有涉及到跨ISP的两两机房之间,保持实时测量:

需要测量的线路有:C(18, 2) – C(6, 2) * 3 = 108

假设部署3个多线机房,那么这108条跨ISP的线路,都有3种不同的经过多线机房方案:108 * 3 = 324

我们需要用尽可能低的流量,实时测量这324条路径的传输质量。假设一个三线机房宕机的概率是1%,那么全网任意两两边缘机房之间,受到路由故障的概率就是:10^(-6) = 0.000001

这里同样需要在工程上注意避免雪崩,这是分布式架构中最基本、最常见的问题。

国内虚拟专线小结

• 达到Agora定义的覆盖标准,需要至少部署18个机房

• 相同ISP之间用户的通话,仿照高压电传输,将可控路径最大化

• 不同ISP之间用户的通话,使用多线机房做路由中转

• 边缘节点、路由节点都需要避免单点故障和雪崩

• 最终的服务质量:任意两两边缘机房之间的传输,达到专线效果。

1

注:上图中任意相同ISP的边缘机房之间都应该连通,来保证第二条”相同ISP之间用户通话的可控路径最大化“。为了避免图太乱,只画了左上角一个机房的线。

跨国通信:搭建国际间的虚拟专线

很多人看到这里已经蒙圈了:光国内的通信就这么复杂,跨国通信怎么破?实际上跨国通信并没有想象的那么难。

解决思路如下:

• 在很多国家,运营商之间互相丢包是违法行为。因此跨ISP传输没有国内这种严重的问题

• 可以复用国内分地区的概念,在大洲范围内划分地区

• 可以复用国内多线机房的概念,寻找连接大洲之间的路由节点

• 对于无法找到路由的两地传输,使用多条路由

• 对于机房覆盖稀疏的地区,区域内通话打开P2P

(1) 每个地区的进出口机房

根据骨干网拓扑结构,能够归纳出每个地区的进出口机房:

• 大陆:有国际带宽的移动机房

• 东南亚:香港、新加坡

• 北美:西海岸加州地区,东海岸纽约,南部迈阿密

• 南美:圣保罗

• 澳洲:悉尼

• 欧洲:东部俄罗斯、西部法兰克福 等等。

(2) 地区之间的路由机房

同样根据骨干网拓扑结构,再归纳出两两地区之间的路由机房:

• 大陆与亚洲其他国家的路由节点:香港

• 大陆与北美的路由节点:香港、东京

• 大陆与欧洲的路由节点:香港

• 北美与南美的路由节点:迈阿密 等等。

(3) 多跳路由解决跨州传输

一个东北CUCC用户,到西雅图用户之间的通话,很可能需要这样完成传输:东北CUCC用户 -> 有国际带宽的移动机房 -> [香港] -> [美国西海岸LA] -> 西雅图附近机房 -> 西雅图

无法找到路由的两地传输,例如国内到南美之间,使用更多跳路由的方式,例如:国内用户 -> 大陆出口 -> [香港] -> 美国西海岸LA -> [迈阿密] -> 圣保罗 -> 南美用户

下图是Agora在全球部署的一部分边缘节点。某一时刻最佳路径可能是如图所示:

1

(4) 跨州传输的难点

• 进出口机房与路由机房这两个概念,既需要历史数据的分析积累来定期维护列表,又需要实时数据测量动态更新

• 海外机房部署成本高,例如中东地区机房带宽价格是国内的15倍以上


来源:微信公众号(微信ID:声网Agora)

0
相关文章!