P2P文件共享和流媒体系统,内容分发,减轻服务器负载,VoD在用户共享视频内容方面同步很少,因此更难。需要每个节点贡献出一些硬盘空间(1GB)。新的内容复制,内容发现的调度机制。
VoD和其他流媒体播放系统不同的地方在于每个节点可以在同一时间观看影片的不同部分,从而减小了相互之间的协助性,因此需要每个节点贡献出一些硬盘,而不是只贡献出一些播放缓冲区。从某种意义上看,就成为一个分布式文件系统。
一个P2P VoD系统包含如下几个部分:1)源内容分发服务器 2)一组tracker,用来帮助节点连接到其他节点上去分享内容。3)一个bootstap服务器,用来帮助节点找到一个合适的tracker。4)其他服务器,比如日志服务器(记录用于数据管理的重要事件),传输服务器(帮助节点穿越NAT)。5)一组节点,它们会和上述各种服务器通信,并与其他节点贡献内容,此外,还会实现分布式哈希表(DHT)来备份和查找bootstap服务器和tracker。
系统中传输的数据块大小是分层次的,这样设计可以满足系统不同的需求。
数据块
层次
Size
movie
entire video
> 100MB
chunk
存储和向邻接点公告
2MB
piece
WMP播放单元
16KB
sub-piece
传输单元
1KB
复制策略首先考虑的是若硬盘空间够的话,是否cache多部影片。若这样的话,则一个节点可以在观看一部的同时上传另一部。其次是是否预取影片内容。若不预取,则只有那些观看过的影片可以在硬盘上找到,若预取,则又会影响带宽,像PPLive就不预取,因为国内的ADSL速度不够。然后是当硬盘满的时候,选择哪些数据块/影片清除掉,可以像OS一样使用LRU算法或LFU算法。当然更好的是基于权值的方法,这种方法可以在tracker的协助下来评估此影片的权值。
除了节点的内容复制策略外,还要考虑如何发现内容和拥有这些内容的其他节点。依赖如下方法来进行内容公告和查找:1)tracker(或超级节点)。2)DHT。3)gossip算法。
Tracker用来登记各个节点拥有影片的情况。当用户开始或结束观看时,都会通知Tracker。一个节点拥有的数据块的信息保存在数据块位图中,节点会向它的邻接节点获取它们的数据块位图。然后选择从哪些邻接节点中下载。发现数据块的位置使用gossip算法,这就减小了对Tracker服务器的依赖性。
每个节点会定时给Tracker服务器发送心跳包来报告它的数据块位图和其他信息,这些信息用于系统的监控和管理。
选择哪些数据片下载需要考虑几个因素:1)选择离播放所需要最近的数据片。2)选择系统中最稀有的数据片(一般是最新的数据片),这样可以加速这些新成员的扩散,从而提高播放质量。3)基于锚点的策略。尽量选择最近的锚点数据片,当用户跳到一个特点位置时,可以使用这个锚点数据片。
当选择要下载的特定数据块后,假设数据块在多个邻接节点处存在,如何选择从哪些节点下载呢?同时选择的邻接节点的数目?如何进行请求调度,设置超时?
PPLive的传输策略是基于如下思想:一个节点可以同时向多个邻接节点请求不同的内容,若请求超时,它就重定向到另一个邻接节点。而且根据响应时间会调整发送请求的数目。经测试,要达到500kbps的速率,8-20个邻接节点是最优的,而要达到1Mbps,16-32个邻接节点最优。
P2P VoD系统中没有BT中那样的激励机制,客户端软件必须定时向Tracker服务器回送数据块位图,否则Playback会被关掉。
为了防止垃圾信息攻击,必须进行内容验证,这可以使用消息摘要和数字签名。可以在两个层次上进行:数据块层次或数据片层次。
本文转自Phinecos(洞庭散人)博客园博客,原文链接:http://www.cnblogs.com/phinecos/archive/2008/11/21/1338503.html,如需转载请自行联系原作者