linux学习区域 2017-10-25
本篇文章内容来自2016年TOP100summit网易视频云、网易杭州研究院服务端技术专家邵峰的案例分享。
编辑:Cynthia
2017年11月9-12日北京国家会议中心第六届TOP100summit,留言评论有机会获得免费体验票。
邵峰:网易视频云、网易杭州研究院服务端技术专家
浙江大学计算机专业博士毕业。
自毕业以后从事数据库、分布式存储等领域研究,有十年左右的服务端开发经验。
目前在网易视频云负责产品化研发工作,在服务端开发、存储/数据库开发等方面有丰富的实战经验。
导读:在网易视频云直播产品开发中,研发团队遇到了直播卡顿难题。如何提供稳定、流畅、无卡顿的直播服务,是当时迫切需要解决的问题。通过客户端分析、网络统计等手段,定位卡顿问题的根源在于直播分发网络不佳。能否提供一套可靠的直播分发网络,决定了直播是否有卡顿,也最终决定了用户的直播体验。
为了流畅的直播体验,保证基本无卡顿,技术团队采用了一种融合式分发网络架构。通过该融合分发网络,直播云服务基本解决了卡顿问题,保证了流畅的直播体验。本文将介绍网易云直播分发网络架构的构建及优化过程。
一、问题的提出
直播业务迅猛发展,但其背后的直播技术门槛较高,为了降低技术门槛,让产品开发者迅速开发出直播产品,就出现了直播云服务的概念。直播云服务,为直播提供了端到端的解决方案,包括:直播端采集-编码-播放、网络端转码-分发、播放端解码-播放等。其中每个环节都涵盖大量技术,同时也影响着直播质量的高与低。
网易视频云就是为开发者用户提供这种直播云服务。我们在直播云服务的建设过程中,发现直播网络体验是所有直播产品的痛点,稳定、流畅、无卡顿是所有直播产品的共同诉求。那如何把我们的直播云服务做到体验好、无卡顿呢?起初,我们采用了一系列音视频技术,对主播和播放两端进行了优化,体验未得到实质性改善。分析后,我们把焦点集中于网络端,因此上述问题被转化为:如何优化分发网络,从而保证直播无卡顿、体验好?
在网络分发端,起初我们采用了一个传统第三方CDN网络,但第三方CDN在带宽配置和节点部署上存在诸多限制,而且直播线路调整采用人工手段,因此无法满足我们的优化需求。接着我们自建了一套分发网络,但由于节点数不足,分发性能要求也不甚理想。后续,我们又接入了多家第三方CDN网络,但每一家都不能完全满足我们的“无卡顿、体验好”的要求。最后,我们考虑能否在已有的单CDN分发网络基础上,构建一个融合式直播分发网络,达到稳定流畅要求?因此,我们开始了一趟融合分发网络的构建旅程。
二、实践过程
我们的云直播分发网络构建,从时间维度分为三阶段:单CDN阶段、多CDN阶段和融合CDN阶段。各阶段是渐进式发展的。
2.1 单CDN阶段
单CDN-构建阶段
我们为云直播服务选用了一个传统的第三方CDN分发网络。通过封装调用第三方CDN的分发网络接口,构筑了一套完整的分发网络服务,其基本架构如图1所示。
图1. 单CDN分发网络
单CDN分发网络的优点是实现简单,能快速封装实现。在我们云服务发展初期,该方案能帮我们迅速实现产品,并且应用于实际场景。
但缺点很明显:网络不稳定、卡顿率较高,并且线路调优较为麻烦。
单CDN-优化阶段
当我们的用户量达到一定规模时,单个CDN的问题就集中体现出来了,首先网络不稳定,经常出现卡顿掉线等情况,而且对国内运营商网络存在差异化支持,例如电信、联通线路较好,而移动线路较差等问题。
通过与第三方CDN排查问题,发现其本质原因为:节点覆盖不足、带宽资源提供不足。
通过让CDN厂商加节点资源、优化线路,部分解决了卡顿流畅性问题,但是无法从本质上解决网络覆盖等问题。
2.2 多CDN阶段
多CDN-构建阶段
针对第三方CDN的问题,我们考虑采用多CDN方案加以解决。通过对不同的几个CDN厂商进行基调测试后,发现每个CDN厂商都有局部优势和劣势,例如CDN厂商A对移动线路支持较好,而CDN厂商B对电信/联通线路支持较好。针对该特点,我们接入了多家CDN进行节点及线路互补。对于一些特殊区域,例如小运营商、海外节点等情况,我们通过部署自有节点,开发了一套简单的自研CDN进行区域覆盖。最终我们形成了一个多CDN分发网络系统,架构如图2所示。
图2. 多CDN分发网络
多CDN-优化阶段
在多CDN分发网络中,由云管理中心为主播选择分发线路。在卡顿率分析时,我们发现上行推流的稳定性起着决定作用。因此我们根据主播端的IP,查询推流源位置信息,然后选择最佳CDN进行流分发。
举例说明,主播A为北京移动线路,我们就选择上行较优的CDNⅡ进行分发;主播B为上海电信线路,选择电信较优的CDNⅠ进行分发。选择策略在云管理中心进行配置。选择策略根据,基调测试结果或线上结果反馈,定期调整。
2.3 融合CDN阶段
融合CDN构建阶段
多CDN分发网络极大地降低了卡顿率,但运行一段时间后,我们发现多CDN分发网络,还存在一些缺陷,例如第三方CDN上行线路无法达到最优化;下行观众端拉流无法选择最佳CDN;直播线路无法临时调优等。
为此,我们重构了分发网络,提出了一种融合CDN架构,如图3所示。融合CDN分发网络,在多CDN的基础上,主要增加了两大功能:接流源站和智能云调度中心。
● 通过自建接流源站,我们能最大限度的优化直播上行线路。
● 通过智能云调度中心,我们能自适应网络环境,根据网络变化,动态的调整上下性线路。
图3. 融合CDN分发网络
融合CDN优化阶段
当前我们处于融合CDN使用阶段,但我们还将对该分发网络进行优化。考虑下行线路,第三方CDN厂商无法完全覆盖所有区域,而自研分发网络构建/维护成本过高。因此,考虑对于CDN厂商无法覆盖的下行区域,如果用户访问密度高,我们将在下行边缘做一层服务转发。
这样带来的好处有两点:
● 增加边缘覆盖率,同时降低CDN流量成本;
● 路由判断更加精准,避免CDN厂商路由漂移情况。
其框架如图4所示,我们正处于该优化阶段的建设过程中。
图4. 融合CDN分发网络-改进
直播分发网络构建中,融合CDN分发网络的设计/建设最为关键。
接下来将具体描述其两大关键模块的设计思路:接流源站、智能调度中心。
接流源站
在最初的设计中,源站的目的性很明确,用于接收主播的推流,并转发CDN。由于直播流采用rtmp协议,因此源站主要实现了rtmp协议处理。在内部,源站架构分为三层:接口协议层、逻辑处理层和网络分发层。
● 接口层接收解析rtmp流协议;
● 处理层进行流媒体处理;
● 网络分发层进行rtmp转发。
需要注意的是:每路推流转发一路给不同的CDN网络,这样观众就能从不同的CDN网络获取流信息。
随着云直播业务的扩展,互动直播以及直播连麦等需求也引入到了直播框架中,因此我们对源站进行了扩展,提供了一种多协议源站。引入的协议为RTP类协议,有交互性要求或实时性要求较高的直播形式,都走RTP类协议,其底层走UDP通道。而对广播式要求,我们通过RTMP转封装和混屏处理,无缝对接现有CDN。整体框架如图5所示。
图5. 多协议源站
源站调度
我们在全国二十几个主要区域部署了源站集群,在重要区域,例如北京、上海、广州、杭州等,采用BGP网络。其他区域采用多线。从而保证用户与源站之间网络的高质量。我们通过全局调度中心GSLB进行源站调度。调度中心,通过心跳式探活,感知实时情况。通过配置模块,动态调整源站的配置,如流量限制,黑白名单限制等。主播在推流之前,从调度中心获取源站路由。调度中心会根据推流源地址、策略表,最优选择一个源站。整体框架如图6所示。
图6. 源站调度
调度中心智能调优
调度中心是整个分发网络的核心,它统一调度上行接入点和下行拉流点。调度中心内部最重要的是路由规则表的制定。传统的规则表是固定配置规则表,跟实际网络的适配性较差。我们在融合网络中,设计了一套智能调优策略,通过网络实际情况动态调整规则。调优的流程如图7所示,采用五步骤循环模式。
● 步骤1,GSLB调度中心获取/解析用户地址信息;
● 步骤2,调度中心获取已有调度规则;
● 步骤3,调度中心生成路由地址,下发客户端;
● 步骤4,两端上报卡顿信息到云统计中心;
● 步骤5,云统计中心,定时分心数据,触发规则,调整规则库。
图7. 调度中心路由调优
通过这些步骤,调度中心实现了统计式自调优。
三、效果评价
我们在真实环境对上述分发网络进行了一系列对比测试,核心测试点就是卡顿率指标。为增加云直播产品质量,我们在卡顿率指标选择上采用了更为严格的一分钟卡顿率,而未使用常规的时长卡顿率。
所谓一分钟卡顿率,就是如果一分钟之内播放器连续卡两次,就视为该一分钟都为卡顿。而时长卡顿率,以每秒钟为间隔,该秒内播放器卡,视该秒为卡顿。播放器卡的定义为:解码线程每隔3ms从播放器缓冲区获取数据,如果缓冲器为空,则定义为播放器卡。一般意义上,一分钟卡顿率 = 4 ~ 15倍 × 时长卡顿率。
图8. 两周卡顿率比较
如图8所示,我们选择了X、Y、Z三个月的前半个月(两周)卡顿率数据进行了比较。其中X月运行了单CDN分发网络;Y月运行了多CDN分发网络;Z月运行了融合CDN分发网络。每天给出一个综合卡顿率数据。各月,云平台环境情况为:网络实际流量分别为日均5TB、12TB和20TB, 98%以上流量运行于国内, 流量无重大区域变化性差异。从图中,可以看出卡顿率有了明显下降,在融合CDN分发网络中,达到了我们预定<5%的指标要求。
图9. 卡顿率优化比例
如图9所示,给出了单CDN、多CDN和融合CDN的平均卡顿率下降指标。使用多CDN分发网络比用单CDN分发网络两周平均卡顿率下降26%。 使用融合CDN分发网络比用多CDN分发网络两周平均卡顿率下降44%。
因此,我们根据统计总结出:融合CDN分发网络,能极大优化网络分发,并把卡顿率指标降到了小于5%的优质范围。接下来,为了达到极致体验,我们将继续改进融合CDN分发网络,在拉流端考虑进一步优化。
四、推广建议
● 使用渐进方式,分阶段进行网络优化;
● 网络框架优化前,必须事先分析,寻找关键瓶颈点;
● 网络数据收集很重要,尽可能多收集;
● 必须深挖细节点,每个小模块都能做出大文章;
● 国内网络环境有特殊性,必须考虑运营商和区域性因素;
● 边缘加速很重要,尽量靠近用户;
● 善于使用第三方服务,并能在别人服务基础上进行优化升华。
11月9-12日,北京国家会议中心,第六届TOP100全球软件案例研究峰会,网易云通信与视频技术专家刘心坤将分享《网络拥塞控制以及在实时通信领域中的应用》。查看日程