PrismCDN 网络的架构解析,以及低延迟、低成本的奥秘

5 月 1九、20 日,行业精英齐聚的 WebRTCon 2018 在上海举办。又拍云 PrismCDN 项目负责人凌建发在大会作了《又拍云低延时的 WebP2P 直播实践》的精彩分享。算法

分享介绍了 WebP2P 行业将从 FlashP2P 逐步进入 H5P2P,并分享了又拍云 PrismCDN 网络如何突破传统 P2P 网络高延迟、低分享率的难题。服务器

因分享内容较多,特将演讲整理为两部分:网络

  • 取代 FlashP2P,H5P2P 将成为 WebP2P 主流:介绍几类 P2P 的架构、原理、优劣势,介绍传统树状、网状两种 P2P 结构的不足。
  • PrismCDN 网络的架构解析,以及低延迟、低成本的奥秘:介绍又拍云 PrismCDN 的结构、优点,分析又拍云 PrismCDN 达成好体验、低成本、易使用的奥秘。

 

本文是第二部分《PrismCDN 网络的架构解析,以及低延迟、低成本的奥秘》架构

 

又拍云作 PrismCDN 这个产品,主要有三个要求:并发

第一,把体验作好;测试

第二,下降成本;大数据

第三,要易使用。优化

咱们先来看一下又拍云 PrismCDN 所取得的成绩,一项项分析 PrismCDN 在好体验、低成本、易使用三方面是否达标。插件

PrismCDN 一开始作 SDK P2P,在体验好、低成本上作得比较到位,但在“易使用”上不够优秀。因此咱们研发了 WebP2P 功能。设计

△ 又拍云 PrismCDN WebP2P

易使用:无插件、免 SDK、易回滚

SDK 要嵌入到客户的 App 里面去,客户会担忧三个问题:

  • SDK 的稳定性;
  • SDK 升级的时候,客户须要从新发布新的App版本;
  • SDK 部署以后,难回滚。

又拍云 PrismCDN 团队设计 WebP2P 的时候,集中解决了“易使用”这个难题。

WebP2P 没有插件,也没有 SDK,只是 JS 而已;发生异常只需切一下老版本就好,不须要像 App 那样从新发布一个新版本,客户的开发成本降低,风险也下降了。

体验好:流畅度高、延时低、秒开

咱们把 P2P 直播的体验分为“流畅度”“延时低”“秒开”几个指标。

  • 流畅度:尽可能不要卡顿,把卡顿率降下来,咱们作到了 99.9%;。
  • 延时低:延时在 3 秒水平,和 CDN 直播的延时是相同的。秀场直播或者游戏直播,有必定的互动,延时必定控制在几秒以内,用户才能够接受。
  • 秒开:首屏秒开,用户一点进去的时候,直播画面就能启动起来;固然首屏时间和 P2P 没什么关系。

低成本:

又拍云 PrismCDN 90%的流量来自于 P2P 雾节点,只须要 CDN 边缘节点补充 10% 的流量。雾节点的成本大大低于 CDN 边缘节点的成本,P2P 分享率高,就意味着总体成本降低,对客户来讲很是划算。

PrismCDN 架构解析

后面我会分析咱们是如何作到这三点的。在这以前,先了解一下又拍云 PrismCDN 的架构。

△ 又拍云 PrismCDN 架构示意图

三角形里是 CDN 服务器。熟悉 CDN 的人都知道它有三层的架构:中心节点、区域节点、边缘结点。

咱们在作 PrismCDN 这张 P2P-CDN 网络时,引入了“雾节点”。雾节点包括 OTT 机顶盒、路由器、APP 等,运行 WebRTC 的网页也是能够充当雾节点。咱们会把数据从 CDN 边缘节点再次下沉,下沉到雾节点上。最后经过雾节点向客户提供数据。

这个架构把 CDN 网络的三层模型变成了四层模型。第四层就是布置在用户边上的雾节点,在离用户最近的边缘计算资源里面。

第五排是最终用户端。示意图里把用户端要拆分为 WebRTC、Flash、App 几个模块,本质上是同一个。

放大 CDN 带宽的雾节点

咱们重点看一下“雾节点”是怎么回事。CDN 网络的边缘节点,统一当作一个 CDN 服务器。CDN 服务器会推送 1/20 的数据流到雾节点上。雾节点会和十几、二十个播放端相连,直接把这 1/20 数据流转发到各个播放端。

△ 又拍云 PrismCDN “雾节点”运行示意图

咱们能够计算一下。假设 CDN 推送 2M 的直播流,到了雾节点这边就是 100K 的数据,假设雾节点转发到 10 个播放端,这 10 个播放端就获得了 1M 的数据。这 1M 数据对于播放端来说都是有效数据,即 CDN 的 100K 宽带,经过一个雾节点使播放端获得了 1M 的带宽,这起到了放大 CDN 带宽的做用,至关于把 CDN 带宽放大了 10倍。

哪些设备能成为雾节点呢?以路由器举个例子。路由器只要集成一个 PrismCDN 雾节点的模块,在这个模块实现 WebRTC 须要的协议,好比 ICE、STUN 用于穿透的协议、DataChannel、DTLS、SCTP 等 P2P 链接的协议。有了这些协议就能够实现雾节点之间以及雾节点与 Web、 APP 之间的通信。

同理,在播放的 App 也能够成为雾节点,只要它支持 WebRTC 协议而且保持在线。App 能够根据客户的需求来配置是否做雾节点。若是说客户须要提供转发,咱们就能够把这个模块运行起来。

播放 Web 也能够做雾节点。这个比较好理解,本质上是两个 Web 之间传数据。同理,咱们也能够经过根据客户的需求,配置 Web 要不要做雾节点转发数据。

PrismCDN 网络运做介绍

经过 PrismCDN 网络实现 P2P 直播,具体讲起来仍是有点复杂的,咱们一步步来介绍。

第一步,先是直播源把一个 RTMP 流推到 CDN 网络的中心节点上。CDN 中心节点对这个源进行作切块,好比 20K 大小的 Block,因而直播流就变成了一个个 Block 的序列。在 CDN 网络里先把 Block 序列逐层发送到边缘节点上。

在 CDN 边缘节点到雾节点之间,就不是传输一个 Block 了,而是传输 Block 里面的 1/20。咱们经过一些算法从 Block 里面抽取 1/20 的数据推送到雾节点上面。雾节点再把 1/20 的数据转发给和它相连的若干个播放节点。

一个雾节点会链接不少个播放节点,一个播放节点也会和不少个雾节点相连,并从这些雾节点处收数据。播放节点从每一个雾节点获取的数据,就是CDN边缘节点推送到雾节点的 Block 的 1/20 子数据流。

这就是 PrismCDN 网络 P2P 部分的工做逻辑。

若是说 P2P 某些节点是丢包了,或者是掉线了,那么播放节点能够直接链接 CDN 边缘节点,把丢失或者须要补充的数据给拉回来。最终播放节点可以把来自雾节点和 CDN 边缘节点的数据数据组合还原出来原始的流,而后再经过转封装成 MP4 或者 FLV 等格式以后,喂给相应的播放器。

低延迟的奥秘:扁平化模型

传统 P2P 最大的问题就是延时很高,不论树型的直播方案,仍是 Peer五、Streamroot 等网状型直播方案,延时都很是高。

PrismCDN 网络是怎么作到低延时的呢?这和咱们的扁平化的模型有关。

CDN 服务器几乎同时把一个数据流的 1/20 子流推到不少雾节点,雾节点同时把数据推到了播放节点。整个过程当中,数据路径很是短,它只是经过雾节点同时中转一下。

经过扁平化的方案,PrismCDN 把延时控制在了 3 秒之内,和传统 CDN 差很少,这个延时水平可以知足游戏直播、秀场直播、体育直播等多个直播场景。相比之下,传统 P2P 直播的延时有半分钟甚至 1 分钟之多。

△ PrismCDN 低延迟的奥秘:扁平化模型

高流畅的奥秘:雾节点智能选择、冗余连接

再来看看 PrismCDN 网络在高流畅方面是怎么作的。

△ PrismCDN 高流畅的奥秘:CDN 边缘节点补数据

从上面的介绍,咱们知道一个播放节点的大部分数据是来自于雾节点。彻底依赖雾节点,会出现数据缺失。赶上数据丢失,PrismCDN 会经过数据通道从 CDN 边缘节点拉取数据。这个模型就是 P2SP。

要作到流畅的话,要分两大块去考虑的:一块是资源;另外一方面是技术,包括调度算法、回源算法等内容。

好比说在数据通道里面,咱们就会有各类方式作尝试、作测试。又拍云 PrismCDN 团队在线上、在生产环境里面去作对比测试,发现用 UDP 来传数据要比 TCP 效果好不少,流畅度上面大概要高 5%。

在 WebP2P 里面,有两种补数据的方式:一种是要 WebSocket 去补数据,另一种是用 WebRTC DataChannel 去补数据。咱们在这两种方案里面进行 AB Testing。

资源不足的话,技术作得再好都没用。比如 CDN 网络,须要备充足的资源以后才能提供很好的服务。咱们依赖于又拍云 CDN 网络在全国各地的服务器、CDN 节点资源,同时雾节点的资源也部署了 100 多万个。

雾节点智能选择

PrismCDN 有超百万规模的雾节点,雾节点的选择是很是重要的。

咱们在雾节点、播放节点方面有几个心得:

  • 智能选择雾节点
  • 雾节点、播放节点就近原则
  • 雾节点、播放节点相同 ISP 原则
  • 冗余连接,大数据分析雾节点质量

雾节点和播放节点,尽可能匹配相同 ISP、相同区域进行对接。假设某个雾节点是使用上海电信的,咱们尽可能给他匹配上海电信的播放节点。由于跨地区、跨运营商的传输质量不太好。跨运营商的通讯质量不大好,尤为是对 UDP 协议的支持质量。为了不运营商之间的数据传输出现错误,PrismCDN 自写了一层去校验数据包是否正确。

咱们还能够对雾节点的质量进行统计分析,作更好的匹配。

冗余连接

看完雾节点选择的优化,咱们再看看链接的状况。又拍云 PrismCDM 的链接原则,归纳一下就是:启用冗余 P2P 链接,根据节点质量调整冗余度,减小 CDN 回源量。

每一个雾节点传输一个 Block 的 1/20 数据,按理说一个播放节点链接 20 个雾节点就能够了。实际上一个播放节点一般会多链接 1 到 2 个雾节点。由于雾节点毕竟是 P2P 节点,稳定性没有像 CDN 节点那么高,有时候会退出、会掉线、会丢包,必须给播放节点准备一些冗余链接。好比说播放节点链接了 21 个雾节点,某一个雾节点中断或者丢包了,不要紧,播放节点已经收到 20 份数据了,仍是可以组合、还原出原始数据。

同时能够根据实时的传输状况来调整播放节点的连接冗余度。若是传输都是稳定的,一个播放节点连 21 个雾节点就能够了。若是传输的抖动比较大,或者雾节点不太稳定,冗余连接数就放大一点。最终目的是播放节点须要的数据都能从雾节点收到,不须要启动 CDN 回源,不须要去 CDN 边缘节点拉取补充数据,这样流畅度就变得很是高。

CDN 的成本要高于 P2P,所以用冗余连接的方式减小 CDN 回源,除了保障流畅度,还能够下降成本。

低成本的奥秘:P2P 分享率高

最后看又拍云 PrismCDN 低成本的一些状况。

经过 PrismCDN,播放带宽由两部分组成:一部分是 CDN 带宽,一部分是 P2P 带宽。咱们的原则就是,提升 P2P 雾节点的分享率:加大 P2P 带宽的比例,尽量减小 CDN 带宽占比。

在传统 P2P 网络里,数据在播放节点之间互传,播放器会下载数据后分享一部分给别人。也就是说只有在播放的时候,节点才能给别人传输数据。

如今的家庭带宽都是上下不对称的,下行若是有 20M,上行通常只有 2 到 4M 左右。大体计算一下,若是是一个码率 3M 的直播流,有 1000 个并发观看,累加起来的播放带宽要达到 3G。那么这时候这 1000 个播放终端供应的带宽上限是 2G,即便每一个人所有供应数据,链接很是高效率的话,也存在 1G 的差额。这 1G 的数据,就须要 CDN 边缘节点去补。

相比于传统的 P2P 来作的话,PrismCDN 引入了纯粹提供数据但不须要播放的设备,好比路由器、机顶盒、光猫等设备。这样就填补了上面所说的 1G 的差额。

刚才也提到了,冗余连接不只可以保证流畅度,也能够提供低成本的优点。尽可能从雾节点多传一点数据,减小经过 CDN 边缘节点拉取数据的几率。毕竟雾节点的成本比 CDN 低的多。雾节点的流量增多,CDN 边缘节点流量减小,整张 PrismCDN 网络的成本就会降下来。

相关文章
相关标签/搜索