有朋友问,为什么我用电骡下载某个文件即使源很多,下载速度也特别慢呢?这就要从P2P分享率谈起,分享率是P2P世界的一个非常重要的指标,分享率指上传和下载的比值。
不同的P2P技术对于解决分享率有不同的处理方式。大致可以分为两种:坏人算法和好人算法。所谓坏人算法和好人算法其实是一种假设,坏人算法假定所有的客户端都是自私的,但是为了大家都来贡献自己的力量,制定了一个规则:如果不共享,就要遭受一定的惩罚;好人算法默认每个客户端都会按照自己能力尽量上传。
在电骡的网络中,采用了一种信用机制,当你上传流量很多的时候,你就获得比较高的信用值,从其他人那里获取流量的可能性就加大。每个电骡会维护一个服务队列,当我向别人请求数据时候,别人会根据我的信用等级进行排队,信用等级越低,排队越靠后。因此,老电骡们由于上传多,积分也高,下载速度就比较快;而新手由于上传少,积分低,下载速度也相对比较慢。
BT采用的是坏人算法,客户端定时会计算对方是否给自己流量,如果对方不给我流量,我会将对方阻塞掉。这样迫使对方必须提供一定的上传带宽。
迅雷采用的主要还是好人算法,每个客户端不可以控制自己不向别人贡献流量。风播采用好人算法和坏人算法相结合的方式。
调度算法
调度算法是所有P2P技术的核心,不同的厂商有不同的实现方式,一般都是技术机密。对于BT、电骡、迅雷来说,一般采用乱序下载算法,这是迅速利用客户端上传带宽比较有效的方式。风播为了实行在线播放,调度算法完全不同于其他P2P软件,是一种顺序和乱序的结合算法。

图2
假设做种的Seed 有1、2、3、4、5 五个分片,如果按照传统的HTTP或FTP下载方式,Peer1和Peer2 向Seed 都从文件头部的分片1开始请求,那么极端的后果就是P2P无法实行,因为Peer1和Peer2还是把压力加在Seed上(原理如图2所示)。

图3
但是如果采用乱序下载就不一样了,Peer1 从Seed获取分片1,Peer2从Seed获取分片2,它们相互就可以从对方获取自己没有的数据,P2P 方式就很容易发挥作用(原理如图3所示)。
对于P2P下载,乱序方式解决得很好。但是对于流媒体,必须要求文件分片是顺序获取,风播采用了一种乱序和顺序相结合的方式来解决该问题,也就是整个文件的获取方式,基本上是顺序方式获取,但是具体每个分片,又采用乱序方式获取,这样就取得了下载速度和顺序观看影片的平衡。
http://www.cpcw.com/disp.php?aid=11522&cid=67&pg=3
