首先回顾一下纯P2P架构的特点:
- 没有服务器
- 端系统之间直接通信
- 端系统经常改变IP 间歇性连接
下面将学习两种不同的特别适合于P2P设计的应用。
- 文件分发,其中应用程序从单个源向大量的对等方分发一个文件。
- 分布在大型对等方社区中的数据库。
P2P文件分发
在P2P文件分发中,每个对等方能够重新分发它所有的该文件的任何部分,从而在分发过程中协助该服务器。
1.P2P体系结构的扩展性
为什么文件分发时P2P会比客户-服务器更加有效?
用F表示备份发文件的长度,N表示要获得该文件副本的对等方数量。分发试卷是所有N个对等方得到该文件的副本所需要的时间。
(1)客户-服务器体系结构
服务器必须向N个对等方传输该文件的一个副本,因此该服务器必须传输NF比特。而服务器上载速率是us,则分发该文件的时间必定至少为NF/us。
客户机下载的速度为di,则有最小分发时间至少为F/dmin。
所以,最小分发时间Dcs=max{NF/us,F/dmin}。
(2)P2P体系结构
每个对等方能够帮助服务器分发该文件。当一个对等方接收到某些文件数据,它能够使用自己的上载能力重新将数据分发给其他对等方。
服务器必须经其链路至少发送改文件每个比特一次。最小分发时间为F/us。
客户机下载的速度为di,则有最小分发时间至少为F/dmin。
观察到系统整体的总上载能力等于服务器的上载速率加上每个单独的对等方上载速率,即utotal=us+u1+u2+……+un。系统必须向这N个对等方的每个交付N比特,因此最小分发时间也至少是NF/(us+u1+u2+……+un)。
所以,最小分发时间Dp2p=max{F/us,F/dmin,NF/(us+u1+u2+……+un)}。(此时我们认为一旦每个对等方接收到一个比特就能够重新分发一个比特。)
对于客户-服务器体系结构,随着对等方数量的增加,分发时间呈线性增长并且没有界。然而,对于P2P体系结构,最小分发时间不仅总是小于客户-服务器体系结构的分发时间,并且对于任意的对等方数量N,总是小于1小时。
因此,具有P2P体系结构的应用程序能够是自扩展的。这种扩展性的直接成因是:对等方除了是比特的消费者还是它们的重新分发者。
2.BitTorrent
BitTorrent是一直用于文件分发的流行P2P协议。
在BT系统里,文件是分片的。
当一个peer 节点开始加入一个 洪流(Torrent) 时,它没有文件块。随着时间的推移,它将累积越来越多的文件块。当它下载文件块时,也为其他 peer 节点上载了多个文件块。peer 节点一但获得了整个文件,它可以(自私地)离开 Torrent,或(大公无私地)留在 Torrent 中并继续向其他 peer节点上载文件块。
每一个洪流具有一个基础设施结点,称为追踪器。当一个对等方加入某洪流时,他向追踪器注册自己,并周期性地通知追踪器它仍在该洪流中。以这种方式,追踪器跟踪正参与在洪流中的对等方。一个给定的洪流可能在任何时刻具有数以百计或数以千计的对等方。
当一个 peer 节点 Alice 加入 Torrent 时,追踪服务器随机选择一些 peer 节点,并将这些peer 节点的 IP 地址发送给 Alice。
Alice 持有这些 peer 节点的列表,试着与该列表上的多个 peer 节点创建并行的 TCP 连接。这里称所有与 Alice 成功地创建 TCP 连接的 peer 节点为“邻近 peer 节点”。
随着时间的推移,其中的一些 peer 节点可能离开,而其他 peer 节点可能试着与 Alice创建 TCP 连接。因此,邻近 peer 节点将随着时间而改变。
在任何时刻,每个 peer 节点都拥有来自某文件块的子集,且不同的 peer 节点具有不同的文件块子集。Alice 周期性地(经 TCP 连接)询问每个邻近 peer 节点它们所具有的块列表。
如果 Alice 有 L 个邻居,那么她将获得 L 个块列表。因此,Alice 将对她当前还没有的块发出请求(仍通过 TCP 连接)。
Alice 使用一种称为最稀罕优先的策略,其思路是根据她没有的块从她的邻居中确定最稀罕的块(最稀罕的块就是在她的邻居中拷贝数量最少的那些块),并优先请求那些最稀罕的块。按照此方式,最稀罕的块更迅速地重新分发,其目标(大致)是均衡每个块在洪流中的拷贝数量。
如果多个用户向她请求文件块,为了决定她响应哪个请求,BitTorrent 使用了一种对换算法。其基本思想那些当前能够以最高的速率供给她数据的邻居具有较高的优先权。Alice对于她的每个邻居都持续地测量她们之间连接的速率,确定以最高速率流入的 4 个邻居。然后,她将数据块发给这 4 个邻居。每过 10 秒,她重新计算该速率并可能修改这 4 个 peer节点。更重要的是,每过 30 秒,她要随机地选择一个另外的邻居并向它发送块。
在 P2P 文件共享中,搭免费车(free-riding)是一个常见的问题,这是指 peer 节点从文件共享系统中下载文件而不上载文件。BitTorrent 的对换算法有效地消除了这种搭免费车问题。
分布式散列表
分布式散列表在 P2P 网络中实现了一个简单的数据库。
数据库只包含 key-value 对例如:键可以是社会保险号,值可以是相应的人名;在这种情况下,键一值对的例子如(156-45- 7081 , John ),或者键可以是目录名(例如,电影、唱片和软件的名字),值可以是存储内容的 IP 地址。当用键来查询数据库,如果存在键值对,数据库就返回相应的值。
由于每个 peer 节点具有了一个整数标识符,这时就可以将 key-value 对分配给具有最近ID 的 peer 节点.,一般最近的 peer 节点是指 key 是最邻近的 peer 节点的后继,例如假设有 8 个 peers: 1,12,13,25,32,40,48,60。
如果 key = 53,那么这个 key-value 对将分配到 60 号 peer 节点。
如果 key = 60,那么这个 key-value 对将分配到 60 号 peer 节点。
如果 key = 61,那么这个 key-value 对将分配到 1 号 peer 节点。
1.环形DHT
为了处理规模的问题,将这些 peer 节点组织成环状,每个 peer 节点仅知道它的直接后继和直接前任。查找某个键值对时,在这个环状网络中进行时钟顺序查找。时间复杂度O(N).
为了加速查找,又建立了 peer 节点之间的捷径连接。时间复杂度O(logN)。
2.对等方扰乱
在P2P系统中,对等方能够不加警示地到来和离开。为了处理对等方扰动,我们要求每个对等方联系其第一个和第二个后继。也要求每个对等方周期性地正式它的两个后继是存活的(如发送ping报文并寻求响应)。
原文地址:https://www.cnblogs.com/shirleyya/p/12546111.html