MyException - 我的异常网
当前位置:我的异常网» 软件架构设计 » TOP100summit【分享回忆录-网易】构建云直播分发网络

TOP100summit【分享回忆录-网易】构建云直播分发网络

www.MyException.Cn  网友分享于:2013-11-02  浏览:0次
TOP100summit【分享实录-网易】构建云直播分发网络

本篇文章内容来自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全球软件案例研究峰会,网易云通信与视频技术专家刘心坤将分享《网络拥塞控制以及在实时通信领域中的应用》。查看日程

文章评论

程序员都该阅读的书
程序员都该阅读的书
Java程序员必看电影
Java程序员必看电影
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
程序员的鄙视链
程序员的鄙视链
 程序员的样子
程序员的样子
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
代码女神横空出世
代码女神横空出世
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
漫画:程序员的工作
漫画:程序员的工作
编程语言是女人
编程语言是女人
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
一个程序员的时间管理
一个程序员的时间管理
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
程序员和编码员之间的区别
程序员和编码员之间的区别
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
如何成为一名黑客
如何成为一名黑客
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
为什么程序员都是夜猫子
为什么程序员都是夜猫子
10个调试和排错的小建议
10个调试和排错的小建议
每天工作4小时的程序员
每天工作4小时的程序员
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
2013年美国开发者薪资调查报告
2013年美国开发者薪资调查报告
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
中美印日四国程序员比较
中美印日四国程序员比较
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
老程序员的下场
老程序员的下场
程序员应该关注的一些事儿
程序员应该关注的一些事儿
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
那些争议最大的编程观点
那些争议最大的编程观点
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
我是如何打败拖延症的
我是如何打败拖延症的
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
Google伦敦新总部 犹如星级庄园
Google伦敦新总部 犹如星级庄园
2013年中国软件开发者薪资调查报告
2013年中国软件开发者薪资调查报告
程序员必看的十大电影
程序员必看的十大电影
总结2014中国互联网十大段子
总结2014中国互联网十大段子
我的丈夫是个程序员
我的丈夫是个程序员
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有