第二章第六节 P2P应用
在本节内容开始前,咱们要先来对P2P架构有一个宏观的认知:算法
P2P:(Peer to Peer 对等结构) 以对等方式进行通讯,并不区分客户端和服务端,而是平等关系进行通讯。在对等方式下,能够把每一个相连的主机当成既是主机又是客户,能够互相下载对方的共享文件。好比迅雷下载就是典型的P2P通讯方式。 数据库
本章描绘的前三个应用都采用了CS(客户-服务器)体系结构,极大的依赖于老是打开的基础设施服务器。而在本节中,咱们将介绍两种适用于P2P的应用:一个是文件分发,在其中咱们将介绍流行的BitTorrent协议;另外一个是分布在大型对等方社区中的数据库,在其中咱们将探讨分布式散列表(Distrubuted Hash Table,DHT)的概念。服务器
Outline
Note
- 纯P2P架构具备以下特色:
- 没有服务器,任意端系统之间直接通讯
- 节点阶段性接入Internet
- 节点可能更换IP地址
- 资源共享
- 资源分布
## 文件分发
【P2P体系结构的扩展性】网络

- 为了方便讨论,咱们假设如上图的简单定量模型,其中us为服务器上传带宽;ui为节点i上传带宽,di为节点i下载带宽。
- 对于客户机/服务器架构:
- 服务器串行地发送 N 个副本,时间为: NF/us
- 客户机i 须要 F/di 的时间下载
- 咱们所须要的最短期为:

- 对于P2P架构:
- 服务器必须发送一个副本,时间: F/us
- 客户机i 须要 F/di 的时间下载
- 总共须要下载NF比特
- 最快的可能上传速率: us + ∑ui
- 所须要的最短期为:

- 结论:对足够大的N(对等方的数量):
- 客户机/服务器体系结构的分发时间随着对等方的数量N线性增长而且没有界。
- P2P体系结构,其最小分发时间曲线与log2N曲线相似,所以最小分发时间远小于客户机/服务器体系结构的分发时间。其自扩展性很强。

【BitTorrent】架构
- BitTorrent是一种用于文件分发的流行P2P协议,每一个下载者在下载的同时不断向其余下载者上传已下载的数据。
- BT协议与FTP协议不一样,特色是下载的人越多,下载速度越快,缘由在于每一个下载者将已下载的数据提供给其余下载者下载,充分利用了用户的上载带宽。经过必定的策略保证上传速度越快,下载速度也越快。
- 基本概念:
- Torrent:参与一个特定文件分发的全部对等方的集合被称为一个洪流。
- chunk:在一个洪流中的对等方彼此下载等长度的文件块(一个文件被分红若干个块),典型的块长度为256KB。
- Tracker:每一个洪流都有一个基础设施结点,成为追踪器

- 当一个新节点(Alice)加入torrent:
- 没有chunk,但会随着时间不断积累
- 结点向tracker注册得到节点信息表,并与某些结点创建联系(成为“邻居”),一个结点的临近对等点会随着时间而波动。
- 结点下载的同时,也为其余对等方上传了多个块。结点可能随时加入或离开。
- chunk的获取
- 给定任一时刻,不一样的节点持有文件的不一样chunk集合
- 节点(Alice)按期查询每一个邻居所持有的chunk列表
- 节点发送请求,请求获取缺失的chunk
- 稀缺优先:针对她没有的块在他的邻居中决定最稀缺(副本数量最少)的块,并优先请求稀缺块
- 稀缺优先的目的:大体的均衡每一个块在洪流中的副本数量
- chunk的发送:决定Alice响应哪一个请求(对换算法)
- Alice根据当前可以以最高速率向他提供数据的邻居,给出其优先权
- 每10秒,从新评定一下Top4,这四个对等方被称为疏通(unchocked)
- 每30秒,Alice随机选择一个其余结点,向其发送chunk。
- 除了随机选择的伴侣做为试探对等方和以前的Top4,其余的对等方都称为阻塞()
## P2P应用:索引技术
【P2P中搜索信息】分布式
- P2P系统的索引:信息到节点位置(IP地址+端口号)的映射。
- 文件共享(电驴)
- 利用索引动态跟踪节点所共享的文件的位置
- 节点须要告诉索引它拥有哪些文件
- 节点搜索索引,从而获知可以获得哪些文件
- 即时消息(QQ)
- 索引负责将用户名映射到位置
- 当用户开启IM应用时,须要通知索引它的位置
- 节点检索索引,肯定用户的IP地址
【集中式索引】性能

- 如上图所示,集中式索引更像是P2P和CS的混合体
- 当Alice须要下载信息时,通过如下步骤:
-
- 初始时,全部的对等方要将自身的IP和可共享的文件名称通知集中式索引服务器,该索引服务器从每一个活动的对等方那里收集这些信息,从而创建起一个动态索引,将每一个文件拷贝映射到一个IP地址集合。
- 当Alice须要下载一些文件时会将查询内容发送给索引服务器,服务器将查询结果返回给Alice(Bob的IP地址)。
- Alice根据收到的信息,从Bob处下载资源。
- 集中式索引的问题:内容和文件传输是分布式的,可是内容定位是高度集中式的。会出现以下问题:单点失效问题、性能瓶颈、版权问题。
【查询洪泛】(创建在“Gnutella”协议基础上)ui
- 查询洪泛采用彻底分布式方法。在查询洪泛中,索引全面地分布在对等方的区域中。每一个对等方索引可供共享的文件而不索引其余文件。
- 其扩展性差,尤为是为了防止某个对等方发起查询,该查询就会传播到整个覆盖网络的每一个其余对等方,从而产生大量流量。为解决这个问题,设计者使用了受限查询洪泛,即限制其传播的最大跳数。
【层次覆盖】(由FastTrack独创,Kazza和Morpheus也实现了这种文件共享协议)spa
该方法结合了上述两种方法的优秀特征,与洪泛查询相似,层次覆盖设计不使用专用的服务器(或服务器场)来跟踪和索引文件。然而,与洪泛查询不一样的是,在层次覆盖的设计中并不是全部对等方都是平等的。.net
以下图所示,若是某对等方不是超级对等方,则它就是一个普通对等方,并被指派为一个超级对等方的子对等方。
超级对等方维持着一个索引,该索引包括子对等方正在共享的全部文件的标识符、有关文件的元数据和相应子对等方的IP地址,但与前面的集中式索引不一样,这里的超级对等方并非一台专用服务器,而是普通对等方。超级对等方之间能够相互创建TCP链接,从而造成一个覆盖网络。

## 分布式散列表
在课程中未涉猎,具体请移步https://blog.csdn.net/zy_zhengyang/article/details/76838523