融云 RTC 全球智能核心网络

融云 RTC 全球智能核心网络

RTC 是实时音视频交互的综合应用。主要的场景包括:1v1 通话,视频会议,在线课堂,低延时直播。涉及的基础技术主要包括:网络传输,音视频编解码,以及一些音视频的前后处理技术。随着 WebRTC 的开源,实时音视频的门槛降低了很多,市场上提供 RTC 的厂家也逐渐增多。但是,想运营好 RTC 服务却不是一件容易的事情。主要需要解决几大问题:各种基础技术的深化提升,客户端设备兼容性,全球分布式 Overlay 骨干网络的运营,SDK 的接入和替代成本,配套服务的丰富(转码,录制,内容审核,多 CDN 融合等)。

RTC 云端功能和特点

RTC 主要分为客户端和服务端两部分。其中客户端负责音视频采集,前处理,编码,网络发送等工作。服务器主要负责:信令的交换,数据的转发,音视频的转码,录制等工作。

其中客户端主要以开源 WebRTC 为基础,并且在各个环节上进行深度改造以提高用户的体验。比如:音频的 3A 处理,视频的 SVC,网络的拥塞控制算法,前向纠错算法等。

虽然 WebRTC 为 P2P 的通信提供了很好的基础,但是还远远满足不了大家的多种场景需求。全球的网络环境是很复杂的,即使是同一城市的两个用户可能也会因为运营商的不同导致 P2P 效果很差。其次,在 1 对多的会议和直播场景需要有足够的高质量带宽进行“广播”。还有场景需要一些配套的服务,比如:为不同类型终端设备进行转码,录制,内容审核,多 CDN 融合等。可见:对于 RTC 的应用来说服务端需要做大量工作才保证产品的良好运营。

总体来说 RTC 云端的主要功能:

1.组织用户:建立会议室/直播间,维护用户权限,交换用户间信令

2.网络传输:用户质量覆盖,带宽放大

3.多媒体:音视频的多规格转码,多用户内容的合流,内容的录制

如何搭建简单的 RTC 环境

目前市场上也有很多开源的 RTC 服务器,比如:Janus,Licode,Mediasoup等。有的是 SFU,有的具有 MCU 功能。通过这些开源服务器都可以快速搭建出一个 RTC 环境。

以下是引用 LiveVideoStack 的对比结果:

如何打造高质量的 RTC 云端环境

首先,补全功能。不同的开源 RTC 服务器都有其特点,也有功能不完善的地方。要打造可商用的 RTC 云端服务,要在功能上补充完整。比如 SFU,MCU,录制等功能,级联的支持,还有对不同版本 WebRTC 客户端的兼容性处理等。

其次,分布式服务器网络的建立。云端网络主要解决不同地区用户的接入质量问题,跨运营商用户之间数据传输质量问题,用户上传带宽放大问题。指望跨运营商甚至是跨国的两个用户直接 P2P 达到很好的通话质量是不太现实的。

高可用分布式服务器网络

全球的通信服务运营最大的特点是,每时每刻都有一部分时区的用户在使用这个通信网络。这些热点时区用户也会带动其他时区的部分用户。这给网络的日常更新维护带来挑战。所谓高可用的全球分布式网络,就是要做到 99.9% 可用服务时间,和 99.9% 的传输质量要求。

网络的整体设计要根据分布式的 CAP 理论进行取舍,如何分区治理,如何进行容灾容错,如何进行热更新热升级都需要精心的设计和长期运营的磨合。 一个高可用高覆盖的 RTC 云端网络需要大量的服务器节点组建。这个复杂的网络里,点与点之间的传输质量在不断变化,节点的状态和可用性也在随时变化。监控这个复杂的网络,并且快速智能的响应网络的变化是非常关键的任务。

主要可以分解为三个子任务:用户接入点选择,节点状态监控,级联路由和容灾。

用户接入点选择

最简单的方式可以使用智能 DNS,根据用户的所在区域和运营商等信息选择可用的服务器。但是服务器的接入网络状况也在不断变化,如果只用智能 DNS 方式可能会出现很多不理想的情况。这就需要客户端汇报质量等手段形成信息闭环,不断训练自有数据库,作为智能 DNS 方式的补充。这个过程也需要大量时间和数据的积累。

由于用户 QoS 埋点数据量大而且可能会有突增,建议使用简单且高容错的方式进行收集比如用 nginx 进行日志记录。再由 kafka 等方式进行缓冲以免对后端的大数据分析和处理造成冲击。经过数据清理,大数据统计学处理和机器学习后将结果放入用户 QoS 决策池和级联路由 QoS 决策池。用户在接入 RTC 网络时先根据鉴权,资源定位,地理和运营商信息再根据用户 QoS 决策池信息进行接入点分配。

节点和网络状态监控

用户接入点的数量和带宽规模决定了用户的覆盖质量情况。但是全球大量的 SFU 服务器组成的庞大分布式 RTC 网络,给管理和级联路由带来了很大挑战。服务器的数量到达一定数量后,随时都有服务器在发生状况,宕机,重启,光缆问题等。除了故障,不同时段也会造成网络的抖动,比如晚高峰。再有就是国际出口的不稳定问题。

系统监控一般是多维度的。IAAS 层监控包括主机的 IO,CPU,网络等基础监控。专线和节点之间网络互通质量,带宽负荷状态,业务层的处理效率,错误数量,QoS 指标等。还有,用户行为也能反映出平台的健康状况,比如用户停留时长的变化率。

比较常用的框架可以使用 Zabbix,promethus,Grafana,ELK,再加上一些实时处理的方式比如 spark streaming 进行数据的统计计算。

随着业务的推进,用户的增长和集群的不断建设。经过长期的运营经验积累,会形成一套自有的阈值系统使得报警更加精准,提高运维处理的效率。

动态规划级联路由和容灾

在节点和网络状态的实时监控基础上,就可以建立服务器之间的级联路由策略了。还有就是在复杂的网络里需要很多“专线”进行加速,这些专线是价格很高的稀缺资源,需要合理利用。总体来说动态规划的级联路由策略主要考虑节点容灾,链路成本,资源压力,总体延时等因素。

级联路由实际是一个动态的多层路由网络,网络的复杂性导致路由的复杂性。既有 4 层的路由策略也要考虑 7 层的路由策略。多网融合的网络间通信要经过代理,反向代理,专线,VPN,SNAT,DNAT 等多种关卡。

路由的决策过程可以说是大规模 RTC 运营的关键内容了,所以需要高可靠高效率。在技术方案的选取上主要是自研的方式。

融云RTC 做了哪些:

融云在西雅图,法兰克福,孟买,新加坡,巴林等地区搭建了 16 个大集群节点,还有很多小卫星节点作为云端接入的延伸增加了用户体验,充分利用了规模优势进行更好的用户覆盖。

为了解决跨国带宽波动问题,融云搭建了很多“国际专线”来保障跨域通信的质量,真正做到了全球通信的高质量低延时。

北极星是融云自研的监控和路由系统,时刻监控上千台服务器及专线等状态变化,接收客户端质量反馈,并根据客户端和服务器的信息进行自动学习,及时进行预警和 7 层路由变更。

#总结#

关于打造 RTC 服务的核心网络,还有很多细节没有办法展开。但是总的来说 RTC 的全球化运营需要多年的积累和专业团队的护航。融云 RTC 团队一直在为 7*24 小时的优质全球 RTC 服务而努力。

       

标签: , ,