为什么专一于流媒体领域?PPIO 技术揭秘续篇

在各类音视频应用充斥着市场的时候,毫无疑问,流媒体领域将会很是适合区块链技术进行场景落地。在上一篇文章中,咱们主要讨论了 PPIO 的 PCDN 架构,接下来将介绍 PPIO 的中 P2SP 的下载逻辑和 IaaS 层的流量计数。算法

下载逻辑

上图为 PPIO 的 CDN 和 P2SP 的传输架构图。这里将会重点讲解 PPIO 中 P2SP 的下载逻辑,它主要分三个部分,Buffer 管理,下载状态机,和下载算法。接下来会对这三部分一一解释。网络

Buffer 管理架构

Buffer 管理,即理解为本地设备管理着资源状况,从而决定须要下载的 Piece 的优先级。Buffer 管理也是和实际应用场景是相关的,对于流媒体来讲,存在一个视频播放位置,播放位置附近的内容就是紧急内容,该内容则会被优先下载。并发

#1 普通文件下载的 Buffer 管理逻辑区块链

文件下载的 Buffer 管理相对简单,由于没有具体的播放位置,即内容在紧急程度上没有区别。下载算法将采用稀缺优先的逻辑,优先下载网络中稀缺的 Piece。Piece 越稀缺,其下载的优先级也就越高。以下图:优化

下载 Buffer 管理示意图

在示意图中,咱们假设全部 Peer 都是同样的,而由于 CDN 节点的存在,实际状况则会复杂得多。CDN 能够被认为比较优质的,可是它不适合请求分散的碎片数据,更适合下载一段连续的数据。之因此将稀缺性做为普通文件的 Buffer 管理的指标,是为了增长 P2P 网络的资源健康度,而且让数据尽快在 P2P 网络中传播。spa

#2 流媒体的 Buffer 管理逻辑设计

和普通文件下载不一样的是,流媒体下载存在具体播放位置,为了保证视频的观看体验,越接近播放位置的数据将会优先进行下载。3d

流媒体的 Buffer 管理示意图

设计 PPIO 的时候,咱们根据视频播放位置,在流媒体下载的过程当中,将其分为多个区间,越靠近播放位置的区间,下载优先级越高。代理

已过区间:视频播放位置以前的数据,无需进行下载。

紧急区间:须要当即播放的数据,在此区间的数据将采用极端下载策略,旨在以最快的速度获取数据。Piece 越靠近播放位置,下载优先级越高。这种策略更加依赖于 CDN 和超级节点,尽管有重复下载的风险,该区间将同时进行 P2P 下载,即在第一时间从多个 Peer 下载数据。

正常下载区间:稍后进行播放的数据。虽然此区间的数据也会很快被使用到,可是紧急程度不如紧急区间,所以这部分数据,也是越靠近播放位置的 Piece,下载优先级越高。可是此区间的策略不要过多依赖于 CDN 节点,而且在 P2P 下载的时候,尽可能避免重复下载。

长远区间:播放时间迟于正常下载区间的数据,这部分采用相似于普通文件下载的稀缺性优先下载的逻辑。此区间的数据下载尽可能不要依赖于 CDN 节点。

下载状态机

状态机是什么?它是一种根据 Buffer 状态来进行下载数据的方式。下载数据的方式有2种: P2S,即从 CDN 中下载数据;P2P,即从其余多个 Peer 中下载数据。那么这两种方式是如何切换的呢?这就是下载状态机要解决的问题。

#1 普通文件下载的状态机设计

普通文件下载的状态机随时评估 CDN 和 P2P 的下载质量和资源状况,在三个下载状态中相互切换,直到把文件完整地进行下载。

普通文件的下载状态机

#2 流媒体点播的状态机设计

流媒体状态机和普通文件下载状态机虽然相似,可是在其之上稍做改进,在断定 P2P 资源不足以支撑流畅播放的时候,直接放弃 P2P 的下载方式,再也不尝试几种状态的切换,避免形成没必要要的开销。

流媒体点播的状态机

下载算法

下载算法,就是将不一样的待下载 Piece 分配到多个不一样的 Peer 上的算法。这个算法在普通文件下载和流媒体下载的时候是不同的。

#1 普通文件下载

PPIO 的调度算法大体以下:

  1. 为了数据传输更加高效,下载节点与每一个拥有资源的 Peer 创建起多个链接。这里的链接,不限于 TCP 协议,也有 UDP 协议实现的会话逻辑。PPIO 同时兼容多种协议,在不一样的网络环境下切换不一样的协议,以应对网络的异构性;
  2. 对于每一个 Peer,根据历史的数据传输状况,咱们都进行速度预测。若是没有历史记录,则使用一个根据历史经验获得的默认值,缺省经验值;
  3. 根据 Buffer 管理的状况,确认全部下载 Piece 的优先级,而后随机经过链接向其余 Peer 发起 Piece 数据请求,对方接受请求后,当即发送 Pieces 数据;
  4. 任何一个链接只要收到一个 Piece,当即更新该链接的速度预测,并根据 Buffer 管理的状况请求下一个没有被下载的 Piece,直到下载完成;
  5. 若是 Piece 数据请求长时间没有获得回应,则会向其余 Peer 请求数据。对该长时间没有回复的 Peer 作惩罚,这个惩罚可能会减小该 Peer 链接数,从而下降该 Peer 下载权重。

根据以往设计高速 P2P 网络的经验,PPIO 采用对每一个 Peer 进行多虚拟链接下载,这个虚拟链接是支持多种协议之间切换的,其底层协议,会先尝试 UDP,若是 UDP 不通再尝试 TCP,极大的提升了传输效率。为何要这样作呢?那是由于 TCP 协议是多年之前根据互联网早期的状态设计的,其自己有弱点,即拥塞控制算法上采用了主动退让的逻辑,这会形成的传输的低效率,并不彻底适合今天实际网络的传输。

#2 流媒体下载

PPIO 为流媒体下载提供了一套优化的 P2P 传输系统。为了保证观看体验,下载数据必须实时,而且可以应对 P2P 网络的不稳定性。为此,咱们采用了数据驱动的 P2P 下载技术,并基于这个理念后作了很大的改进和优化,设计了一套基于预分配方式的 P2P 多点调度系统。实现最大化的下载速率,并将因为重复传输和请求所产生的开销降至最低。PPIO 流媒体调度算法的设计以下:

  1. 和文件下载器同样,给每一个 Peer 创建多个链接,同时记录每一个虚拟链接的历史下载速度;
  2. 对将要下载的 Piece,根据 Piece 的紧急程度(细节见前面的 Buffer 管理)排序作预分配至每一个链接上,并预测每一个 Piece 的到达时间,从总体来看,以越紧急越优先为原则。
  3. 针对未完成下载的 Piece,定时重作预分配,以适应每一个链接传输速度的变化;
  4. 当每一个链接每收到一个 Piece,则更新该通道的速度, 而后从该通道的预分配队列中找到下一个 Piece,并发起请求;
  5. 对于很是紧急的 Piece(须要当即播放),容许同时向多个 Peer 请求数据;

数据驱动的预分配下载算法示意图

PPIO 的 P2P 传输网络是彻底动态的,能够持续保持高效状态。

你可能以为目前为止咱们所说起的都是传统的 P2SP 的技术,这和 PPIO 的区块链有关系吗?别急,下面就来解释一下,前面所介绍的内容,都是围绕着 PPIO 的 PaaS 层和 AS 层(Application Services层)所展开的。PCDN 的整个 P2SP 下载引擎都在 PaaS 层,流媒体格式和协议的支持,以及数据拆分,数据拼装都在 AS 层。而整个去中心化存储和区块链的基础设施都在 IaaS 层。

PPIO 总体商业化架构模块结构图

流量计数和IaaS层

PPIO 的设计理念不一样于传统的 P2P 传输项目,传统 P2P 项目倡导的是“人人为我,我为人人”的共享网络,下载在传输上是“免费”的,上传是无偿的。而 PPIO 创建了激励网络机制,用户下载资源须要付费的,资源上传者进行必定的收费,即下载方要支付 Token 给上传方。

在 PPIO 的 IaaS 层,为了保证 P2P 网络的效率,不须要每一个 Peer 都处理 Token 的支付和接收。所以 PPIO 设计了 Owner 机制。Owner 不是一个 P2P 传输角色,而是一个支付和结算角色。在 PCDN 架构中,每一个 Peer 都须要指定一个 Owner。这个 Peer 产生的花费由他的 Owner 来承担,而一样该 Peer 赚取的收入也有他的 Owner 来接收。

若是在需求端,能够将其理解为 CPool(代理支付网关,见文章《为何 PPIO 要设计支付代理节点》),若是在供给端,也能够简单理解其为“矿池”。对于 PCDN 业务来讲,使用带宽的花费通常是由内容发布者来承担。

做为 User 的 Peer 要从一个做为 Miner 的 Peer 中下载数据,如下就是最简单的流程:

  1. Owner 先将足够的预支付款打到智能合约。
  2. User 从 Owner1 处申请一个 Check(相似于支票),Check 中含有这个智能合约的地址。以及最大消费额度,CheckID,过时时间等。
  3. Owner 审阅这个 Check 请求是否符合要求,若符合则将 Check 返还给 User;若不符合,好比申请的 Token 过多,则能够拒绝。
  4. User 向 Miner 请求数据(经过 P2P 数据传输协议)且顺利收到数据。
  5. User 会将 Check 扩展成 Voucher(相似于凭据),并发给 Miner,这个过程(步骤4和5)是屡次的,Voucher 涉及的金额会愈来愈大。
  6. 当下载完成或异常终止时,就会提交该 Voucher 到 Miner 的 Owner,即 Owner2。
  7. Owner2 收到该 Voucher,会向该区块链智能合约发起提款。
  8. 若是 Voucher 正确且未超时,那么就能提款成功。

PPIO 最简单的下载流程图

对 PCDN 业务的开发者来讲,既可本身部署 CPool(即 Owner),也能够接入其余第三方 CPool(即 Owner)。另外,若是下载方和上传方的 Owner 是同一个,那状况就会变得更加简单,交易不用上链,在 Owner 的内部进行即能解决,Owner 的金钱数量不会变更。就这样,PPIO 将 P2P 传输和区块链计费进行了有效的结合。

固然,这只是一个 PPIO 中 IaaS 层计费中的一个最简单的流程,实际状况会复杂得多。以后会有更多的文章来深度解析 PPIO 的 PCDN 相关的智能合约。

不能否认,流媒体领域在众多区块链技术应用场景中潜力巨大,PPIO 将结合自身丰富的 P2P 经验和前沿的区块链技术为你们带来更好的视频观看体验。体量虽小,能量巨大,好戏正要上演,还不赶忙加入社群一块儿探讨吧!

相关文章
相关标签/搜索