第三个技术要求是Overlay网络需要能够灵活的定义它的路由。举个例子,例如华为云会议,它需要支持大量高规格的政府级会议,而这个对安全性和质量要求就非常高,我们需要让进入我们媒体网络的这张会议的所有报文都走我们华为云的骨干网,避免使用互联网资源传输。还有一些客户对价格比较敏感,对于这类客户我们就会尽量使用性价比较高的网络资源来转发他的报文。这就需要有一个可编程的overlay网络实现灵活的网络路由和转发。
2.4 全流程:提供媒体生产、处理、分发、播放全流程服务第三个比较重要的设计目标是,我们的架构需要能够提供端到端的,从生产到处理到分发到播放的全流程服务。我们把客户主要分为两类,一类是云原生,很多互联网客户,在诞生之初,就是在云上的,所以可以很方便的使用我们的云上服务。但是有些客户,需要从传统的线下转型到线上,为了服务于这样的客户,我们的生产和处理系统是基于华为统一的Huawei Cloud Stack统一技术栈,支持在线上线下灵活、快速部署,同时我们还提供了方便的SDK,它能够跨终端、低功耗的来帮助客户覆盖更多的终端。最后一个技术要求是整个实时媒体处理流水线是能够做到灵活编排,动态管理的。举个例子,我们去年和斗鱼联合创新的项目,帮助斗鱼把在端侧的特效算法上移到了Edge services。这样直接给斗鱼带来了三个好处,第一个好处是开发工作量变少了,原来的特效算法需要适配不同的终端,不同的芯片。第二个好处是特效算法的迭代速度变快了,只需要把特效算法在Edge services更新部署,客户就能够体验到。第三好处是覆盖的终端机型变多了,因为传统在端侧去开发的特效,其实有很多低端机是没法体验到的,如果把它放在我们的Edge services上,就可以快速去满足很多低端机型的要求。
2.5 架构分层设计:适应互联网的特征最后分享一下我们一个非常重要的的架构分层的设计思想。我们借鉴了计算机网络系统的设计思想。可以想象一下,如果没有现在这套计算机网络分层系统,我们的应用开发是怎样的体验。可能我需要去list整个网络拓扑的节点,需要去寻找最优的路径,把我的消息从a发到目的地b,在这个过程中还要去处理各种网络的异常,比如丢包、重传、乱序等等,这显然是对应用开发非常不友好的。
计算机网络系统设计就是解决这些问题。首先就是layering分层的思想,底层有链路层,屏蔽不同链路传输技术的差异性,比如我们支持5G之后上层的应用是不用修改的。在往上就是网络层,它主要有2大功能,转发和路由,所以不需要每个应用自己去定义转发路径。在往上是End to End layer。这是对上面传输层、表达层。应用层的一个统称。而分层的目的就是模块化,降低耦合度,每一层聚焦解决每一层的问题。
而我们云原生媒体网络架构分层也是借鉴了这个思想,我们在网络层进行增强设计,改善报文转发的时延和到达率。我们通过在End to End layer的自研实时传输协议来让上层的实时音视频应用开发更加简单。这样我们的应用开发就可以更加聚焦业务逻辑。同时我们抽象出媒体处理模块,这样音视频相关的编解码技术,前后处理技术,就可以独立演进,快速创新。
2.6 架构分层设计-Network Layer在介绍我们在网络层和End to End layer的一些关键设计之前,首先来看一下网络层有什么问题。互联网在设计之初有一个非常重要的质量属性,就是互联互通的高可用性,我们知道互联网是由上万个ISP组成的,任何一个ISP故障,网络还是可以正常的通信。其中BGP协议就是一个非常重要的设计,他主要考虑了联通性,但是并没有去做一些服务质量的感知。我们可以看到左边这个图,用户A要发一个消息给用户B,跨运营商,它很有可能会经过互联网穿越很多个不同的ISP,这就会带来很多问题,比如会加重丢包重传,而且这些关键问题很多是非技术因素,比如很多运营商针对某一个网络的网络策略不一定是质量最优,它可能是成本最优,比如有一些冷土豆或热土豆的路由策略。