目录
P2P系统是第一个关注节点数量可伸缩性的分布式系统,P2P技术在云计算系统中比比皆是,例如分布式键值存储,使用chord系统进行哈希。
我们通过介绍P2P经典系统来介绍其历史发展和架构变化:
- Napster
- Gnutella
- Fasttrack
- BitTorrent
1、Napster
典型有多个服务器的去中心化结构:decentralized
星型结构,实际上星型结构的服务器多半就是为了提供检索功能。
- 连接到Napster服务器
- 上传要共享的音乐文件列表相当于注册。
- 服务器维护<filename,ip_address,portnum>元组的列表。服务器不存储任何文件。
- 搜索
- 发送要搜索的服务器关键字(服务器使用关键字搜索其用户列表)
- 服务器向客户端返回主机列表(<ip_address,portnum>元组)
- 客户端ping列表中的每个主机以查找传输速率
- 客户端从最佳主机获取文件
- 所有通信都使用TCP(传输控制协议)
- 可靠有序的网络协议
server管理元数据,即用户指针。Napster虽然有服务器,但是P2P结构而不是集中式的主要原因是,音乐数据保存在peer端,仅把音乐信息在服务器上,用来定位检索,再和对应peer直连。
Napster的查询过程:
Napster系统管理简单,虽然距今20年了,但提出了里程碑的思想,到目前为止,还有很多用同样的运用,比如谷歌的云计算(后面介绍)。
P2P系统都默认节点可以自由加入和离开,所以P2P系统要求不仅查询,还有管理即加入退出越简单越好(最好一条消息搞定),综合来说Napster主要还是得益于有一个集中式服务器。
Napster存在的问题:
- 集中式服务器可能导致拥塞。
- 单点失败 性能瓶颈。
- 无安全性:纯文本消息和密码
- 服务器 “间接侵权” ——下一个系统:Gnutella
2、Gnutella
对比Napster架构的区别:1.取消服务器 2.客户端机器之间进行搜索和检索 3.客户端也充当服务器
架构:
标准P2P架构,完全P2P,没有任何中心服务器。
思考:没有服务器,如何找peer?
回答:最初选择用广播,但广域网不可能(后面有突破性技术,可以实现了,但当时没有)。但问题在于广播完全不可控,广播出去后消息的传输完全不可控。
Gnutella在覆盖图中路由不同的消息,所以Gnutella协议有5种主要的消息类型:
- 查询(搜索)——最重要
- QueryHit(对查询的响应)
- Ping(为其他对等点探测网络)
- Pong(对ping的回复,包含另一个对等方的地址)
- 推送(用于启动文件传输)
何时结束广播?在消息头中设置TTL,TTL减到0停止广播。问题:P2P协议里,有很多类似的协议,但这种纯粹的广播协议,太粗糙,基本一定会被废弃掉(TTL的设置没有标准,全凭经验)。
Gnutella查询过程:
本质就是泛洪,泛洪是不确定协议,TTL大小的设置不确定,基本没人用了。Gnutella后续也有一些优化,例如不转发给同一个、Ping-Pong(在网络空闲的时候,系统主动做探查,了解周边,提高性能,尽量避免转发,因为P2P系统节点可以自由加入退出)等等。查找成功后发一个QueryHit message,该消息不需要泛洪,原路返回即可。
传染病协议和gossip协议在P2P中最常用,也是不确定协议。(后面介绍)
问题:取消服务器导致性能急剧变差。泛洪导致巨大的通讯负载。
3、FastTrack
介于Gnutella和Napster之间的混合系统。类似Gnutella,但有一些节点被定义为超级节点。
人为把节点做服务器。
- 超级节点存储一个目录,列出附近的子集(<filename,peer pointer>),类似于Napster服务器
- 超级节点成员身份随时间变化。
- 任何对等体都可以成为(并保持)超级节点,前提是它已经赢得了足够的声誉。
技术:DHT=Distributed Hash Table 分布式哈希表
- 哈希表允许插入、查找和删除带有键的对象
- 性能问题:
- 负载平衡
- 容错
- 查找和插入的效率
- 地点
- Napster、Gnutella、FastTrack都是DHT(部分)
- Chord也是如此,我们接下来要研究的一个结构化的对等系统
区分有结构的P2P系统和无结构的P2P系统:
- 无结构P2P:邻居随机组织
- 有结构P2P就类似哈希查找,或者折半查找,无结构P2P即Flooding就类似遍历
用分布式哈希表实现节点的插入删除查找,本质就是折半查找,时间效率为lgn。
时间复杂度对比:
Chord系统(节点形成逻辑环)在现在的P2P中占统治地位。(第五章介绍)
4、BitTorrent
建立在DHT基础上,但不完全是DHT,现在的P2P下载软件。BitTorrent有两个驱动,和napster很像,但性能好得多,实现了分块下载,并发、多线程等高性能技术。
但现在P2P技术效率依然和集中式服务器没法比,一个O(logn)一个O(1)
先获得.torrent种子文件,文本文件,里面实际是一个HTTP链接,代表服务器地址,再访问服务器,拿到peer 列表,最后get peer。
声誉系统在BitTorrent系统中非常常见,鼓励做种子。纯粹BitTorrent软件和非P2P软件的区别:限速。如果限制上传速度,在P2P软件中会自动限制下载速度。所以如果想要更好的下载速度就要提高上传。声誉系统也是在积累是否愿意上传,愿意做种子。建立更好的生态。还有BitTorrent往往呈现爆发式的事态,比如大片刚上映,Peer非常多,但是热点过了后,大家都关闭了BitTorrent,所以BitTorrent系统时效性很大。迅雷不是纯粹P2P,可以只下载不上传(BitTorrent强制上传)
Gn
tella
Napster Searh
Napster Search