什么是P2P?


     此处要跟大家介绍的P2P不是常听到的金融P2P,它是Peer-to-Peer的简写,即对等网络技术,但我更愿意称之为媒体数据分发技术,通过p2p可以传输音视频数据、文件、图片等对象 。p2p的最大特点就是去中心化,每个p2p节点既是客户端同时又扮演服务器的角色,资源的所有权和控制权被分散到p2p网络的每一个节点上。

P2P与传统CDN的区别?


    CDN即内容分发网络,它是一种树状多层级网络结构,这种方式的优势是内容的传输更快捷、稳定,但客户端与服务器之间采用CS模式进行数据的交互,并发处理能力受限于CDN边缘节点规模及带宽上限。而p2p是基于网状拓扑结构的对等网络,不再单一从某一个服务器获取数据,p2p网内各节点均可为其他节点供流,充分挖掘了Internet上的空闲资源 ,这样可极大减轻服务器压力。

P2P的应用场景


其实p2p技术早就出现在我们经常使用的软件产品中了,比如早些年流行的下载软件比特精灵、电驴以及现在仍然如日中天的迅雷等,还要提供在线视频服务的pplive、PPStream和快播等,这些产品给人的一个共同感受就是在线人数越多下载速度或者缓冲速度就越快,下载或者播放就越流畅,这就是因为p2p网内节点多了可供获取数据的源头就多了,这样我需要的数据就能很快的得到。现在直播领域也用上了P2P来节省服务器带宽成本。

P2P的技术原理


不同P2P技术方案商他们的实现原理大致上是一样的,基本都包含了内容处理系统、资源调度及管理系统、节点管理系统以及数据处理系统(终端),不同的是具体的策略和算法。

P2P节点请求播放url后,服务器会根据该节点信息(地域、运营商等)为其分配最合适(就近、同一运营商原则)的超级节点,连上超级节点后直接拉取视频数据开始播放,同时超级节点会根据一定的策略将其加入到已有的分组中并通知该节点,该节点获取到分组信息后尝试与组内其他节点建立连接(穿透),连接成功了开始将其已经下载到的视频数据分享给其他节点同时也会收到来自其他节点的数据包,这样其本身从超级节点拉取的数据就会减少,节点间以及节点与服务器之间仍会周期性发送心跳包以保持长连接;当组内有节点退出时,服务器在指定时段内未接受心跳包会将该节点踢出分组,同时广播方式更新分组信息到该组其他成员,在此期间其他成员会接收不到本应由该节点分享的数据,在等待超时后他们会直接从超级节点请求那部分数据,新的分组信息更新到全员后,需分享的视频数据重新由当前组内成员承担。当节点拿到分片数据后会按照数据自带索引将它们拼装、还原成原始视频流交由播放器解码、上屏出画面。

每个节点负责从超级节点获取不同的码片,然后分享给组内其他节点,这样避免不同节点分享重复的数据,一旦其中某个节点掉队了导致其他节点无法及时得到由他负责的那部分数据,那么数据分发策略会保证其他节点马上改变路由转向去找超级节点要数据(每个超级节点拥有一份完整的数据)。

先通过下图对比CDN的数据流走向来看下P2P的数据分发模式:

CDN数据流走向图: 

p2p架构图片 p2p系统介绍_p2p

P2P数据分发模式: 

p2p架构图片 p2p系统介绍_p2p架构图片_02

P2P的这种数据分发模式可减少客户端向服务器请求数据的次数,依靠节点间的互相分享最终仍能拿到一份完整的视频数据,从而保证其播放效果跟从访问CDN一样。

 

P2P数据流走向图: 

p2p架构图片 p2p系统介绍_互联网_03

内容处理系统:

  • 1.负责接收原始流媒体数据,通过私有协议对其进行切片(P2P网络中传输的最小数据单位),打上索引号;
  • 2.对原始码流进行转码处理(按需求而定,非必选流程)
  • 3.推送分片数据到各p2p超级节点,供终端节点在需要时直接访问。

资源调度及管理系统:

  • 1.监听各p2p服务器(包括超级节点)的负载状况,如硬件资源占用、系统负荷、带宽消耗等;
  • 2.动态调整各p2p服务器上任务的执行,保证整个系统内部的负载均衡;

节点管理系统:

  • 1.收集节点信息,如地域、网络运营商、上下行速率、丢包率等;
  • 2.管理节点行为,如节点注册,节点分组,节点穿透,与节点保持长连接,探测节点心跳成功率,节点上下线等;
  • 3.节点间数据分享策略,如节点心跳减弱即可减少需要其分享的分片数据;

数据处理系统(终端):

  • 1.接收和缓存从其他节点(包括超级节点和普通节点)获取的分片数据,并按照索引值拼装成连续完整的码片序列;
  • 2.将已获取到的数据分享给组内其他节点。
  • 3.对拼装后的码片序列按照私有协议进行还原得到原始视频数据,本地可选择是否需要更换视频封装格式已提高解码兼容性;

直播场景特别是游戏、秀场等互动性强的场景下P2P效果的几个度量指标


  • 1.播放延迟
  • 2.播放出画面速度
  • 3.播放流畅度
  • 4.分享率
  • 5.服务器并发能力

保证P2P效果的几个关键点


  • 1.准确评估节点上行能力,动态调整其分享数据大小
  • 2.组内节点变化频繁时的处理策略(容错机制);
  • 3.对称型网络(NAT)的穿透;

展望:CDN+P2P


    新一代融合CDN在传统CDN基础上加入了P2P,二者之间可以互补,P2P播放受阻或失败的时候可以自动切换CDN继续播放保证体验不受影响 ,CDN的边缘节点可以担任P2P超级节点的角色,而P2P的接入又可以减少对CDN的流量消耗。+

结尾


    如有理解上的误区恳请各位指正,也欢迎大家一起交流。