第二个原因,有可能运营商今天晚上要做一个设备升级,需要运维人员操作一些配置变更,而配置变更过程中有可能出现人为出错造成链路故障,还有可能就是这些区域有一个热门事件,可能会造成拥塞。
为了解决这个问题,我们决定对网络层进行增强,这里我们主要有2个技术手段;一个是underlay,一个是overlay。
1)首先是underlay,我们通过华为云全球网络基础设施,改善网络的接入和互联质量,一旦进入我们的underlay网络就可以避免和互联网其他流量竞争带宽,既改善了质量,又保障了安全性。
2)其次是overlay部分,我们除了自建骨干网,还会部署一些overlay的节点,实现基于不同Qos目标优化报文传输路径和高效转发,而不是让报文任意转发。我们在网络层的设计原则也是非常经典的控制面与数据面分离的设计思想,简单来说,控制面负责路由,控制整个网络的运行,数据面负责转发。
我们为了让数据转发能够更加简单,也采用了网络中非常经典的一个设计思想:源路由算法的思想,核心目的也是为了降低转发设备的复杂度。具体来说,就是当一个报文进入我们网路的第一转发节点的时候,系统就会把报文要经过的所有转发节点信息,包括目的节点都封装在报文头中,这样每个转发节点收到报文后,只需要解析报文头,就知道下一跳要发送到哪里,这样可以大大降低转发设备的复杂度。
另外还有1个非常重要的设计原则,就是我们对网络层不做可靠性承诺要求,虽然我们不保障可靠性,但是我们依旧会利用冗余纠错、多路径传输等技术改善报文转发的时延和到达率。这也是我们为什么把这层叫做网络层的原因,他依旧关注的是路由和转发。只是做了一些增强。
2.7 架构分层设计-End to End layer网络层的增强能够帮助我们去实现更低时延的转发以及更高的到达率。再往上是我们的End to End layer,这里大家可以先思考一个问题,前文提到互联网有这么多固有属性,丢包,乱序,重传,看上去对开发者非常不友好。但是互联网的发展却非常的繁荣,有一代代互联网的应用email、web、IM、audio、video各类业务出现,这又是什么原因?
这里分享下我的思考,非常重要的一点就是协议,在End to End Layer出现了很多重要的协议,大大降低了我们应用开发者的技术的门槛,比如我们从TCP到HTTP到QUIC等,每一代的互联网的应用发展背后都有一个协议的出现。End to End layer核心设计目标就是要定义一个好的协议和开发框架,让应用开发变得简单。
怎么做到这一点呢?可以看到左边这个图,中间部分是我们的自研实时传输协议大致的功能图,我们会在它的北向提供一个统一的接口。通过这一套北向接口可以让我们既能够开发实时音视频业务,又能开发可靠的消息类的业务,同时我们再看一下它的南向,通过协议栈屏蔽了底层使用UDP或是ADNP协议的差异性,这样应用开发也会变得更加简单。
协议栈设计的目的是为了让应用开发变得简单。所以我们还抽象了两个模块,NQE和QOS,通过这两个模块提供回调的方法把网络的信息能够快速反馈给上层应用,比如编码模块。编码模块就可以快速的自适应网络的条件,来调整它的编码参数。
另外一个非常重要的设计原则就是高效。因为我们知道,前面提到了在未来有很多的端是IoT端,IoT端有一个很大的特性,就是对功耗的要求非常高,我们希望在协议栈设计之初就要考虑这个问题。所以我们不希望轻易的在这一层去增加额外的一些没必要的拷贝,这里遵循的是ALF的设计原则,这个原则也是非常经典的。RTP当时设计的时候也是遵循了这个设计原则。
另外,我们的协议栈设计也参考了quic的设计思想。支持多路复用、网络多路径、华为LinkTurbo、优先级管理等功能。这里分享一下我们的一个小经验,就是在开发自由视角和VR这类业务,对带宽的要求非常高,这个时候我们就会开启多路径的功能,可以获得比较大的体验上的改进。
2.8 华为云原生媒体网络目标架构最后我对整个媒体网络的目标架构做一个简单的总结。
1)简单来讲就是把复杂问题简单化,分而治之,通过分层的设计来让每一层能够相互解耦,快速演进;
2)每一个Edge services都是独立自治的,来提高整个服务的可用性;