Photo by Nick Wehrli from Pexels
本文来自小溪流科技首席架构师张道远在LiveVideoStackCon 2019深圳站上的演讲,演讲内容主要涉及PCDN海外复杂环境中如何提高穿透率和分享率的同时,保证弱网的用户体验和内容版权的保护中采用的技术,架构演进及实际落地效果展示。
文 / 张道远
整理 / LiveVideoStack
大家好,我是来自深圳市小溪流科技有限公司的系统架构师张道远,主要负责公司PCDN的系统架构设计。我们公司主要是做方案集成商,包括CDN和PCDN这块,一直耕耘于海外。
今天我带来的主要内容是自研PCDN系统技术架构与演进。演讲主要从四个方面进行分享。如何提高穿透率和分享率,在海外弱网环境下的实践,另外就是安全体系建设的一些方面。
1. PCDN提高穿透率
1.1 NAT的分类
提到穿透率,避免不了提到NAT。快速给大家讲一下NAT的分类。
(1)完全锥形
完全锥形的特性是只要知道网关上映射的端口和IP,在任何一个地方都可以通过内网IP访问。
(2)限制锥形
限制锥形的映射方式与完全锥形相似,但在安全性上有所不同。它拒绝“不请自来”的IP访问。
(3)端口限制锥形
它的映射方式和限制锥形一样,但它对IP和端口都做了访问限制。如图,对于同一个IP,通过另外的端口访问时接收不到数据的。同一个端口,没有主动发出请求的IP也是收不到数据包的。
(4)对称型
不同的请求、目的、地址有不同的映射。同时它与限制锥形NAT映射相似,但它拒绝主动请求的IP及端口的访问。如上图,对S1、S2发出请求,S1虽然知道出口IP,但是主动发出请求并不会被接收。
实际中NAT类型还有很多种,例如公网IP、UDP Block等。
1.2 全球家庭级别网关NAT类型分布
我们对国外各类型网关NAT类型做了初步研究。上图是我们搜集的数据。我们发现端口限型和对称型分别占比75%和16%,两者占比非常高达91%,这意味着打通它们两者之间是我们面临的主要难题,也是提高穿透率的关键所在。
1.3 穿透率提高的关键
由于端口限制类型会拒绝接收主动请求的端口和IP的访问数据,对称型对新的访问数据会发起新的映射方式,所以正常情况下两者之间无法打洞。
对称型和对称型之间的都使用新的映射关系,而且对称型会拒绝主动请求的IP和端口访问,所以正常情况下,两者之间打洞是不成功的。我们用了以下方法成功打洞。
1.4 如何提高对称型的穿透率?
(1)生日算法
生日算法来源于生日悖论,应用到打洞场景上主要使用数据集有64511个端口(1024以下的端口不用)。据我们实验,假如设定对撞碰出端口的成功率是70%尝试的次数大概是三百到四百次。
(2)UPNP
UPNP是即插即用的通用缩写,主要用于智能设备的相互发现和通讯。我们在打洞时主要使用它将内网IP直接映射到出口IP当作公网服务模式使用。
(3)中继模式。
例如我有A、B、C三个节点,A和B之间可以打通,B和C之间可以打通,但是A和C之间由于NAT映射关系无法打通。当A和C通讯时可以将B作为中继点。中继节点具有服务器和客户端的特性,我们在选取中继节点时,最好选取带宽优质、能用内网或者UPNP模式开启的节点。
(4)MDNS
MDNS是多播协议。没有传统DNS的情况下,用于内部节点的相互发现和通讯。在打洞过程中可不通过服务器使内网节点相互发现通讯。它使用UDP端口协议,组播特性端口为5353。
1.5 全球UPNP开启NAT分布情况
我们搜集分析数据验证了这些方法的有效性。我们对全球UPNP开启NAT分布情况总结发现,端口映射型数据会增高,对称型基本不变,其它类型也基本不变。将样本总结分析发现,端口限制型的数据下降了,对称型增加了。我们关键要看的是第四个图。我们发现有46%的节点可直接以公共服务的方式提供P2P分享,保守估计P2P之间组网穿透率可达90%以上。我个人觉得穿透率的提高并不会直接带动分享率的提高。
2. PCDN提高分享率
接下来我会给大家介绍P2P节点组网模型、调度策略、跨区域或国际策略以及一些落地案例。
2.1 P2P组网模型
P2P常见组网模型有以下几种:
(1)树形组网
树形组网以顶层节点获取资源,常见的就是一分二、二分四这种模式,节点带宽够的话也可以一分多。但是我们可以很明显的看到它的缺点。随着树形高度增加,底层的累计延时会越来越大,如果父节点离线会导致子节点处于孤儿状态。同时,最底层的节点是一个完全消费者模型,无法进行数据分享。
(2)网状组网
网状模型中每个节点都是被动请求,只要节点的数据量级客观,数据肯定可以从周围节点请求得到。但是如果用于低延时,高可变的情况(比如直播),此模型就不是很合适。同时,此模型中消息互动是高频率互动的状态。
(3)分布式星际组网
分布式星级组网是去中心化,它的优势是每个节点状态容易同步一致,上线下线对网络影响状态小。但是它的缺点是消息冗余和消息延时,不适用于直播场景。这个模型稍作改动可作为点播类、文件分享比较合适;
2.2 调度策略
按照不同的国家,我们会按照区域调度,调度原则就是同城同网。对于跨区域调度,我们遵循同网划分,以节点间RTT值越小等级越高来区分。跨国调度以距离、RTT带宽为条件区分。混合调度结合了以上三种调度方式。
上图是我们自己的P2P组网模型。我们采用了树形组网,但是我们规避优化了传统树形模型的缺点。为防止延时过高,我们在调度时会严格控制树形高度。为弥补父节点掉线造成孤儿状态的不足,我们使系统中每个节点都首先从CDN拉流。如果出现父节点掉线的情况,它立即向服务器补片,同时触发新的组网。对于纯粹的消费者模型,我们目前有两种方案,其中一种是节点可以做中继服务。第二种方式我们目前还在规划,我们希望将树形组网与网状组网融合。这种方案目前还没有落地。
我们会在每个区域形成一张区域层级图,用mdns方式将同一内网用户串联起来,通过打洞调度将同区域同ISP节点组网,这样形成了ISP多根树模型。需要跨国际节点通过RTT等级区分并结合国际时差提供调度服务。通过这种方式,实现了不同国家,不同区域的层级拓扑图。
3. 全球弱网环境实践
不同国家的网络有很多复杂的情况,弱网环境是常见的情况。国际上有几种协议来处理弱网环境问题。
(1)Google QUIC一款出名的谷歌定制的基于UDP的低延时互联网传输层协议。
(2)SRT是Haivision新一代低延迟开源视频协议,同样基于UDP协议。
(3)KCP是一个快速可靠的协议,能以牺牲 TCP10%-20%的带宽为代价,换取平均延迟30%-40%的降低 ,且最大延迟降低三倍的传输效果。
(4)BGTP是我们自研发的基于GOP分片的流媒体传输协议。
3.1 各协议实际流媒体传输测试
我们在方案选择前做了测试。我们把QUIC、SRT、KCP在不丢包的情况下使用恒定码率进行了对比测试。我们发现QUIC、KCP的带宽有略微增幅,SRT的带宽大约涨了10%。
在30%丢包率效果下,网络抖动越大,HTTP使用带宽的效率会越低。从应用侧看,QUIC和KCP都能流畅的播放观看,但是带宽基本涨了一倍。我们实验时没有得到SRT的相关数据,也许是方法不对,实验时传输了正确的数据,由于设置了低延时,客户端收到的数据会导致视频出现马赛克、花屏等情况。我们的应用场景是要保证丢包率在30%左右时能稳定传输,同时在带宽成本考量范围内,所以以上方案都没有纳入选择范围。根据以往的经验,我们基于现有协议做了深度改造,形成了BGTP传输协议。
3.2 BGTP抗抖动
BGTP抗抖动没有特别复杂的技术。我们按照TS流通过封闭式GOP切片,每个GOP切片分组分包编号。客户端认证成功之后,服务器端主动推流,这个过程中如果发现丢包,由客户端请求丢包重传,同时GOP时延参数配置在服务器端主控。如果客户端GOP接收不完整,客户端会主动丢弃GOP,避免出现马赛克、花屏情况。
低延时,首屏块。它没有http那样复杂的握手过程,一个包接收到就可以完成认证推流过程。
能在低于30%丢包情况下稳定传输。
配置灵活适应不同场景。
协议目前只适合封闭式GOP的TS流,不适用于通用数据传输。
同比环境下比HTTP占用更多资源。
如上图是我们BGTP和HTTP落地效果对比。我们从两个维度收集了用户端数据。第一张图是卡顿率。用户最直观的就是卡顿。我们可以看出,对于弱网用户BGTP比HTTP减少了超过10%的卡顿率。第二张图表示的是首屏加载速度。BGTP对弱网用户首屏加载速度提升了大约2%。
4. PCDN安全体系
我们通过三个问题解决PCDN安全体系建设问题。
4.1 OTT流媒体业务的数字版权如何保护?
说起OTT数字版权,首先想到业内有名的DRM标准,例如微软PLAY READY、谷歌WIDEVINE以及VERIMATRIX。我们提炼了VERIMATRIX的一些机制,做了自己的版权保护体系。我们的版权保护体系有两个重要点,首先是节点认证体系,另外就是节点间传输加密。
4.2 PEER节点接入组网时候如何保证安全性?
(1)节点认证体系
节点认证体系分了三大板块完成。
终端管理系统,主要是管控OTT类产品,简单来讲是在生产过程烧录license+key。
终端认证系统,主要负责在用户端甄别OTT类产品,校验license+key的合法性。
认证、授权、计算系统和我们的实际业务相关。
(2)节点间传输机密体系
用户要接入我们系统,首先要通过TMS+TAS+AAA认证,之后会在后端获取有时效性TOKEN,我们的TRACKER调度只调度有时效合法的TOKEN。组网之后,节点间直接协商流媒体加密。重要的是要保证每个节点间的密钥和加密算法都不一样。
4.3 恶意请求及非法流量如何拒之门外?
从近年来互联网事件来看,单靠自己的安全体系是不够的。我们在安全问题上,不仅完善自己的安全体系,还考虑利用各大厂商的防御策略。在业务层,我们使用了特定的TOKEN机制结合各大厂商的防护规则来保护我们的CND和业务体型。DDOS流量通过P2P节点网络分流,减轻核心CDN系统压力。这个目前还没有做完,只做了小区域的尝试。
只做防范不做预警是被动的。我们对P2P节点做了实时预警系统。具体做法是我们在tracker集群上部署了一套节点监控预警系统,每个tracker收到的数据包都会在系统日志留下记录,日志数据清洗时,将生成IP、协议类型、geo位置信息等数据源作为事件,以可视化方式展现出来。如图是我们其中一台机器上的实时监控图像。破解外面的协议、使用其它协议访问服务器都会预警。后台对不是P2P协议的数据按照不同级别,分级别预警。
5. 自研PCDN技术总结
P2P打洞成功率和组网调度策略决定分享率高低;
海外网络环境极度复杂,弱网是首要解决的难题;
数字版权资源保护是海外推广落地敲门砖;
海外商业环境不同于国内,安全预警和安全防护需要并行。
我们对于PCND技术走向有一些自己的想法。我们虽然选择了现有协议,但是面对复杂的环境,需要各大CDN厂商的传输协议融合。另外,对于安全问题,我们所做的远远不够,我们在安全领域还有很长的路要走。第三点海外OTT盒子加速节点已经出现,近几年又提出云计算、物计算的相关概念,但是服务是一切的前提,这也是以后要考虑的范畴。
LiveVideoStackCon 2020 讲师招募
2020年LiveVideoStackCon将持续迭代,欢迎将你的技术实践、踩坑与填坑经历、技术与商业创业的思考分享出来,独乐不如众乐。请将个人资料和话题信息邮件到 [email protected] 或点击【阅读原文】了解成为LiveVideoStackCon讲师的权益与义务,我们会在48小时内回复。