这是你了解的P2P 么?

Posted 半吊子全栈工匠

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了这是你了解的P2P 么?相关的知识,希望对你有一定的参考价值。

【引子】

在系统性能方面,CDN在网络性能优化方面具有重要的地位。本来想学习一下P2PCDN的相关原理和技术,没想到P2P本身的学习就花去了较长的时间,P2P与我原来的认知有着较多的不同。

虽然 P2P 系统是最近才显得火爆,但是 P2P 系统的技术先驱已经存在很长时间了。早期的示例包括 NNTP 和 SMTP,以及 Internet 路由系统,它们大多是去中心化的,依赖于参与者的资源贡献。然而,这些系统中的节点是有组织的,协议也不是自组织的。

曾经的那些鼓舞人心的P2P系统是怎样的呢?

1. P2P 的往事如烟

点对点(P2P)计算并不是什么新鲜的技术,乘坐时光机,追溯到“互联网泡沫”前的1999年,3个系统的发布而引发了第一次P2P热潮,它们是:

  • Napster 音乐共享系统

  • Freenet 匿名数据存储

  • SETI@home 志愿者为基础的科学计算项目。

Napster 允许用户通过互联网直接从对方的电脑上下载音乐。由于带宽密集型的音乐下载直接发生在用户的电脑之间,Napster 节约了巨大的运营成本,能够向数百万用户提供免费服务。虽然最终的法律问题决定了Napster 的命运,但合作共享资源的想法启发了许多其他的应用程序。

Freenet旨在将分布式存储与内容分发、抗审查和匿名结合起来。它仍然活着,但背后可能要涉及“暗网”,不便多提。而SETI@home 是全球规模最大、影响范围最广的分布式计算项目。SETI(搜寻地外文明)是一个寻找地球以外智慧生命的科学实验,使用射电望远镜来监听太空中的窄带无线电讯号,因为有些信号是不可能自然产生的,如果能探测到这样的信号就可以证明地外文明的存在。

1999年5月17日,SETI@home开始正式运行,吸引了全球海量志愿者参与。SETI@home项目总部位于加州大学伯克利分校的空间科学实验室,而记录和分析的信号资料来自波多黎各的阿雷西博天文台,那里有曾经世界上最大的单面口径射电望远镜,直径350米,现在这个记录属于我国贵州的FAST天眼工程。去年3月31日SETI@home官方宣布进入休眠期(hibernation),分布在全球的志愿者计算资源将不再接收新的数据包。项目所需分析的数据已经全部处理完毕,接下来研究人员要全力进行结果的后端分析,并发表项目研究成果。在某种程度上,SETI@home或许是一个最成功的P2P项目。

二十多年过去了,P2P 技术已经远远超出了音乐共享、匿名数据存储和科学计算的范畴,已经在开源社区和行业中得到了越来越广泛的应用,尤其skype的成功,和P2P在IPFS及FIlecoin区块链领域的大放异彩,P2P技术再次受到了极大的研究关注。 

2. 什么是P2P?

P2P 系统到底是什么意思呢?

P2P网络,即对等计算机网络,是一种在对等者(Peer)之间分配任务和工作负载的分布式应用架构,是对等计算模型在应用层形成的一种组网或网络形式。——百度百科

然而, 实际上P2P 没有统一而完整的定义。

2.1 P2P 的特点

一般地,P2P 系统是一个的分布式系统,具有3个典型的特征:去中心化,自组织和多管理域。

2.1.1 高度去中心化

对等节点实现了client/server的功能,系统的大部分状态和任务都在对等节点之间动态分配,几乎没有具有集中状态的专用节点。因此,操作系统所需的大部分计算、带宽和存储都由参与节点提供。

2.1.2 自组织

一旦一个节点被引入到系统中(通过提供参与节点的 IP 地址和一些必要的关键数据) ,维护系统几乎不需要手动配置。

2.1.3 多个管理域

参与的节点不是由单个组织/机构拥有和控制的。一般来说,每个节点由一个自愿加入系统的独立个体拥有和操作。

2.2 P2P 的系统分类

根据中心化组件存在与否,可以对 P2P 系统的体系结构进行大致的分类。

2.2.1 半中心化的 P2P 系统

这样的系统中有一个专用的控制器节点,用于维护节点的集合并控制系统。半中心化的 P2P 系统相对简单,可以通过控制器由单个组织管理。比如,BitTorrent 的早期版本有一个“跟踪器”,这个节点来跟踪一组节点是否上传和下载相同的内容,并定期为节点提供一组可以连接的节点; BOINC 志愿计算平台有一个网站来维护会员资格和分配计算任务; Skype 有一个中心网站来提供登录、账户管理和支付服务。

半中心化的 P2P 系统也可以提供有机的增长和丰富的资源。但是,不一定提供可伸缩性和弹性,因为控制器形成了一个潜在的瓶颈和单点故障。

2.2.2 去中心化的 P2P 系统

在去中心化P2P 系统中,没有影响系统运行的专用节点,没有固有的瓶颈,可以很好地进行规模扩展,对故障、攻击和法律挑战有着潜在的弹性。

在一些去中心化的 P2P 系统中,资源丰富的节点、高可用性和公共可路由的 IP 地址充当超级节点。这些超级节点还有额外的职责,例如充当防火墙后节点的交汇点、存储状态或保持可用内容的索引。超级节点可以提高 P2P 系统的效率,但也可能增加其对节点故障的脆弱性。

3. P2P 的技术优劣

由于这些技术特点的存在,使得P2P 技术有了先天的优势:

3.1 部署门槛低

由于 P2P 系统很少或根本不需要专用的基础设施,因此与CS系统相比,部署 P2P 服务所需的前期投资往往很低。

3.2 有机增长

由于资源由参与节点提供,P2P 系统几乎可以任意增长,而不需要对现有基础设施进行”升级”,例如,用更强大的硬件替换服务器。

3.3 对故障和攻击的适应能力

P2P 系统对故障的适应能力很强,因为对系统运行至关重要的节点很少。为了攻击或关闭 P2P 系统,攻击者必须同时攻击大部分节点。

3.4 资源的丰富性和多样性

流行的 P2P 系统拥有丰富的资源,很少有组织能够单独承担。这些资源具有不同的硬件、软件架构、网络、电力供应、地理位置和管辖权。这种多样性降低了级联故障、攻击甚至审查制度的脆弱性。

事物都有其两面性,P2P 也是如此。例如,P2P 的去中心化能力可以帮助公民避免审查; 同时,它也可能被滥用,来试图躲避执法,进行犯罪活动。P2P系统的可扩展性可用于在全球范围内有效地传播,但也可用于版权内容的非法传播。因此,P2P 技术面临着诸多挑战,引起了对其可管理性、安全性和执法性的关注。此外,P2P 应用正在影响互联网服务提供商所提供的流量,并有可能扰乱当前的互联网经济。

4. P2P 系统是如何工作的?

P2P 系统中最重要的技术是构建一个网络覆盖层,其路由能力能够在高节点流失的情况下很好地工作。针对 P2P 场景,更为具体的问题是应用状态的维护、应用级节点的协调和内容分发。

4.1 覆盖层网络的维护

P2P 系统维护了一个覆盖网络,可以认为是一个有向图G = (N,E),其中 N 是计算机的集合,E是一组覆盖链路。通过 E 中的链路连接的一对节点知道彼此的 IP 地址,并通过互联网直接进行通信。

在半中心化的 P2P 系统中,新节点通过连接到位于已知域名或 IP 地址的控制器来加入覆盖层网络。因此,覆盖层最初有一个星形的拓扑结构,控制器在中心。在控制器引入的参与者之间可以动态地形成覆盖层链接。

在去中心化的P2P系统中,新加入的节点需要通过外部通道获得已经参与系统的某个节点的网络地址(例如 IP 地址和端口号)。例如,可以从 Web 站点获取这种引导节点的地址,新节点联系引导节点来加入覆盖网络。

4.1.1 非结构化的覆盖层网络

在非结构化的 P2P 系统中,不同节点之间的链路没有约束,因此覆盖图没有任何特定的结构。在一个典型的非结构化 P2P 系统中,一个新加入的节点通过重复执行一个从引导节点开始的随机遍历并请求一个到该遍历终止节点的链接来形成它的初始链接。通过执行更多的随机遍历,节点获得额外的链接。

通常,选择最小的节点度来维护覆盖图中的连通性,维护最大的节点度是为了绑定与维护覆盖链接相关的开销。

4.1.2 结构化的覆盖层网络

在结构化的覆盖层网络中,每个节点在一个数字空间中有唯一的标识符,标识符使它们在该空间中均匀分布。覆盖层网络图有一个特定的结构:节点的标识符决定了它在该拓扑结构中的位置,并限制了它的覆盖链接集。

分配节点时也使用了密钥。密钥空间在节点间进行划分,每个密钥通过一个简单的函数准确地映射到当前的某个覆盖层节点之一。例如,一个密钥可以被映射到其标识符是密钥空间中最接近的逆时针方向节点。在这种技术中,密钥空间被认为是循环的。

覆盖层网络的结构化是为了提高基于密钥路由的转发效率。基于密钥的转发方案实现了KBR (n0,k),即给定一个起始节点 n0和一个密钥 k,KBR 生成一条路径,即一系列覆盖节点,它们的终点是密钥k 所代表的节点。一般来说,它们在每个节点所需的路由状态数量和传递消息所需的转发节点数量之间取得了平衡。典型的实现需要每个节点的状态量和若干个转发跃点,二者在网络的大小上都是对数关系。

由此可见,在半中心化的 P2P 系统中,控制器有利于覆盖层的形成。在其他 P2P 系统中,覆盖层网络的维护是完全去中心化的。与非结构化覆盖网络相比,结构化覆盖网络需要投入更多的资源来维护特定的图结构。作为回报,结构化覆盖能够有效地执行基于密钥的转发方法。

非结构化覆盖和结构化覆盖之间的选择取决于基于密钥的转发方法对应用的有用程度,也取决于覆盖成员的更新频率。基于密钥的转送方法可以可靠而有效地定位唯一标识的数据项并维护成员节点之间的生成树。然而,在高流失环境中维护一个结构化的覆盖需要相关的成本,如果应用程序不需要基于密钥的转发方法提供的功能,就要避免这些成本。

当然,一些 P2P 系统同时使用了结构化和非结构化覆盖,例如 控制器采用结构化的覆盖,而内容分发可以采用非结构化的覆盖。

4.2 分布式的网络状态

大多数 P2P 系统维护一些特定于应用的分布式网络状态。一般地,认为网络状态是具有唯一键的对象集合。分布式网络状态的维护,就是这些对象的存储和定位机制。

4.2.1 半中心化系统中的网络状态

在半中心化的 P2P 系统中,状态对象通常存储在插入对象的节点,以及随后下载对象的任何节点。控制器节点维护关于系统中存在哪些对象、它们的键、名称和其他属性以及当前存储这些对象的节点信息。查询一个给定的关键字,或者一组与对象名称或属性匹配的关键字,被定向到控制器,控制器通过一组节点进行响应,从这些节点可以下载对应的状态对象。

4.2.2 非结构化系统中的网络状态

与半中心化的系统一样,内容通常存储在将内容引入系统的节点上,并在其他下载器上进行复制。为了方便查找内容,一些系统将插入对象的副本(或指针)放在其他节点上,例如,沿着覆盖图中随机遍历的路径。

为了定位对象,查询节点通常会通过覆盖层网络发送请求消息。查询可以通过键、元数据或关键字指定所需的对象。接收查询并具有匹配对象(或指向匹配对象的指针)的节点响应查询节点。在这种情况下,节点 i 将一个对象插入到系统中并保存其唯一的副本,但是沿着以节点 r 结尾的随机遍历在所有节点上插入指向该对象的指针。当节点 s 尝试定位对象时,它会发送大量的查询,首先到达距离为1个hop的所有节点,然后到达距离为2hop的所有节点。在最后一步中,查询到达节点 r,它返回 i 的地址。

通常,洪泛的范围仅限于用所需的消息数量召回系统中存在的对象被找到的概率。一种替代洪泛的方法是查询节点沿着覆盖层进行随机遍历发送请求消息。

4.2.3 结构化覆盖网络中的状态

在结构化覆盖层网络中,分布式状态使用分布式散列表(DHT)来维护。DHT 具有与传统哈希表相同的 put/get 接口。通过一个简单的函数将插入的键/值对分布在结构化覆盖层网络的节点之间。

给定了这个副本放置策略,DHT 的 put 和 get 操作可以直接使用 KBR 原语实现。为了插入(放置)一个键/值对,我们使用 KBR 原语来确定密钥 k 的负责节点,并将该键值对存储在该节点上,然后该节点将其传播到 k 的副本集合中。负责的节点可以响应提取请求或将其转发到副本集中的一个节点。

当 DHT 波动时,密钥到节点的映射发生变化,必须在节点之间移动键值对。为了最小化所需的网络通信,大数据结构通常不会直接插入到 DHT 中; 相反,在密钥对应的value中插入一个间接指针,它指向实际存储值的节点。

由此可见,非结构化的覆盖层网络在定位广泛复制的对象方面非常有效,而基于 KBR 技术可以可靠和有效地定位系统中存在的任何对象,不管它是否稀疏。换句话说,非结构化覆盖网网络善于找到普通存在的东西,而结构化覆盖网络善于大海捞针。非结构化网络支持任意的基于关键字的查询,而基于KBR的系统直接支持基于关键字的查询。

4.3 分布式协调

通常,P2P 应用中的一组节点必须在没有集中控制的情况下协调它们的操作。例如,复制特定对象的节点集必须相互通知对象的更新。再例如,对接收特定的流内容感兴趣的节点而言,可能希望在当前接收该信道的节点中找到附近并具有可用的上游网络带宽的节点。

一般地,有两个不同的方法来解决这个问题:

  • 自复制技术,其中信息通过系统进行类似病毒的传播

  • 基于树的技术,其中分布树形成传播信息。

这里,只需关注去中心化的P2P系统即可,因为在半中心化的系统中,控制器节点可以完成协调。

4.3.1 非结构化覆盖网络中的协调

在非结构化覆盖网络中,协调通常依赖于自复制技术。在这些协议中,信息传播的方式类似于感染在人群中传播的方式: 产生信息的节点将信息发送给覆盖层的邻居节点,邻居节点将信息再发送给它的邻居节点,以此类推。这种传播方法非常简单和有效,但信息传播的速度与管理费用之间存在着权衡。此外,如果一个给定的信息片段只对节点子集感兴趣,并且这些节点广泛分散在覆盖层网络中,那么这些信息最终被不必要地传递给所有节点。

协调一组节点之间动作的一种更有效方法是在节点之间形成一个生成树。生成树嵌入到覆盖层的网络图中,使用分布式算法完成生成树。然后,可以使用该树向所有成员发送多播消息,或计算组内状态变量的摘要(例如总和、平均值、最小值或最大值)。然而,这种增加的协调效率必须与在非结构覆盖网络中维护生成树的开销相平衡。

4.3.2 结构化覆盖网络中的协调

在结构化的覆盖网络中,使用 KBR 原语可以非常有效地形成和维护覆盖节点群中的生成树,使树成为覆盖节点中首选的协调方法。要加入生成树,节点使用 KBR 路由到与组关联的唯一密钥。来自所有组成员的路径的结果联合形成一个生成树,根在负责组的密钥节点上。然后,使用这个 KBR 树聚合和传播与组相关的状态,并实现组播和选播。

因为一个连接消息一旦被树截获就会终止,所以组成员关系的维护是去中心化的,也就是说,一个节点的到达或离开只由树中节点的父节点和子节点记录。因此,这种技术可以扩展到大量的群组,以及大型高动态的群组。

由此可见,通常用于协调非结构化覆盖层网络的的自复制技术简单而且对覆盖层的混乱具有鲁棒性,但是它们可能不会扩展到大型的覆盖层或大量的群组对象,而且信息往往传播缓慢。生成树可以提高协调效率,但在非结构化覆盖中维护生成树会增加成本。维护结构化覆盖层的额外开销与覆盖层成员总数的波动成正比。一旦支付了这些开销,KBR 树就能够在覆盖图中潜在的大量、大型和动态子群之间实现高效和快速的协调。

4.4 内容发布

P2P 系统中的另一个常见任务是向一组感兴趣的节点分发批量数据或流内容。P2P 内容分发技术可以分为两种:

  1. 基于树的技术,是通过结构化覆盖层或嵌入非结构化覆盖层形成固定的分发树

  2. 群集协议,是对于路由内容没有固定树的概念,通常形成非结构化覆盖层

关于分发树的相关技术比较常见,可以重点看一下群集协议——swarm protocol。

在群集协议中,内容被划分为一系列的块,每个块对所有覆盖节点进行单独的多播,使不同的块沿不同的路径分布。一个群集协议的基本操作很简单: 每一个群集间隔(例如,一秒钟) ,覆盖层的邻居交换信息,指示他们有哪些内容块可用。在流内容分发中,通常只有最近发布的块是有趣的。每个节点交叉从其邻居那里收到的可用性信息,然后从拥有它的邻居那里请求一个它尚未拥有的块。

重要的是,块在对等点之间得到很好的分配,以确保邻近的对等点可以交换块,并且当一些对等点离开系统时,块仍然可用。为了实现这样的分布,系统可以随机选择下载块和请求邻居的块。在一种可能的策略中,一个节点选择下载其覆盖邻居所持有的所有块中最稀有的块。

5. P2P 的典型应用

虽然最早的 P2P 系统主要是文件共享的应用,但目前 P2P 技术的应用更加多样化,包括数据、软件、媒体内容的分发,以及互联网电话和科学计算。此外,越来越多的商业服务和产品依赖于 P2P 技术。

5.1 文件的分发与共享

比较流行一点的 P2P 文件共享是eDonkey和BitTorrent,如果没有听说过,只能说明自己太年轻了。这两种类型的系统都可以被看作是 Napster 的继承者。在 Napster 中,用户与其他参与者共享他们磁盘文件的子集,这些参与者可以在文件名中搜索关键字。然后,通过共享查询结果的对等实体,用户将直接下载查询结果中的任何文件。在BitTorrent 中,为了减少大文件的下载时间,BitTorrent 设计了大量的用户可以快速有效地下载大容量数据。BitTorrent 不包括搜索组件,用户下载不同的内容时彼此并不知情,因为它们形成了单独的网络。该协议被广泛用于数据、软件或媒体内容的传播。

5.2 流媒体

流媒体分发和 IPTV是一种日益流行的 P2P 应用。与文件共享一样,基本的思想同样是利用客户端的带宽,以降低带宽成本。流媒体分发比下载大容量数据有更严格的时间要求,因为数据必须在播放期限之前交付才有用,示例系统包括 PPLive17和 Cool Streaming等。

5.3 电话通信

P2P 技术的另一个主要用途是进行音频和视频通话,这正是Skype 应用取得成功的原因。利用参与节点的资源为用户提供无缝的视听连接,而不管他们当前的位置或互联网连接类型。对等接点帮助那些没有公共路由 IP 地址的用户建立连接,从而解决防火墙和网络地址转换引起的连接问题,而不需要集中的基础设施来处理和转发呼叫。

5.4 志愿计算

第四个重要的应用是志愿计算。在这些系统中,用户将他们的空闲 CPU 周期用于科学计算,通常是在天体物理学、生物学或气候学等领域。这种类型的第一个系统就是 SETI@home。志愿者安装一个屏幕保护程序,在用户不使用电脑的时候运行 P2P 应用程序。该应用程序从 SETI@home 服务器下载射电望远镜收集的观测数据的块。然后应用程序分析这些数据,搜索可能的无线传输,并将结果发送回服务器。SETI@home 和类似项目的成功导致了 BOINC 平台的开发,该平台已被用于开发许多的共享 P2P 系统。

5.5 区块链的基石

区块链的核心是去中心化,这和P2P网络的观念不谋而合。在区块链应用中,比特币使用的是gossip, 以太坊使用的是Kademlia DHT。gossip是一种非结构化的p2p协议,基本上是随机连上一些节点就可以了,网络拓扑会呈现更随机的形状,比特币中的参数是每个节点最多主动连8个节点,最多接受117个的外来连接。Kademlia DHT是一种结构化的p2p技术,这也是根据文件分享应用的需求而来的。完美的网络结构当然是最好按照物理距离来,每个节点连接和它物理距离最近的节点。但使用物理距离比较困难,Kademlia算法使用节点id之间的异或操作来当作节点之间的距离。Kademlia网络中查找节点内容的通信复杂度是对数级别,路由表缓存效率更高,网络扩展性更好。

从某种意义上,区块链可以看做是P2P技术的一次重生。区块链实现了数字货币的功能,顺便解决了激励问题。

5.6 其他应用

P2P内容分发网络(P2PCDN),获得了相对广泛的应用。在这些系统中,一组合作的用户组成了一个网络缓存和域名服务网络,当用户访问 Web 内容时,这些服务器复制 Web 内容,从而减少了源服务器的负载。

为 P2P 应用程序开发的技术也被纳入到其他类型的系统中。例如,Dynamo (是一个存储,亚马逊内部使用它的许多服务和应用程序)使用了分布式散列表(DHT) 。尽管这些系统由单一组织控制,因此不严格满足P2P 系统的定义,但它们是基于 P2P 技术的。

6. P2P 的那些挑战

P2P 系统的许多潜力来自于独立于专用基础设施和集中控制的特性。然而,这些特性也使 P2P 系统面临一些独特挑战。

6.1 控制成员资格

大多数 P2P 系统具有开放或松散的成员关系。由于缺乏强用户身份,攻击者可以通过创建许多不同的身份来填充 P2P 系统中的节点。一旦他控制了大量的“虚拟”对等点,攻击者就可以击败针对节点故障或不当行为的多种防御措施。例如,攻击者如果希望抑制与 DHT 中某个密钥 k 相关的值,可以向系统中添加虚拟节点,直到他控制了存储该值副本的所有节点。然后,当密钥 k 的 get 操作发出时,这些节点可以否认键/值对的存在。

解决这种攻击的最初建议需要工作量证明(例如,解决加密谜题或下载大文件) ,然后新的节点才能加入覆盖。虽然这些方法限制了攻击者获得身份的速度,但它们也使合法用户更难加入。此外,有足够资源或访问僵尸网络的攻击者仍然可以发起这样的攻击。

另一种解决方案需要经过认证的身份,其中一个可信中心为对等身份和相应的现实世界实体之间的对应关系提供担保。认证身份的缺点是,受信任的授权机构和必要的登记过程在某些应用程序中可能的不切实际或不适用的。

6.2 数据保护

P2P 系统健壮性的另一个方面是存储在系统中或由对等点下载的数据的可用性、持久性、完整性和真实性。不同类型的 P2P 系统设计了不同的机制来解决这些问题。

6.2.1 完整性和真实性

对于 DHT,通常使用自证明命名对象来验证数据完整性。DHT 利用了这样一个事实,即它们在选择存储在 DHT 中的值的密钥时具有灵活性。通过在 put 操作期间设置 key = hash (value) ,下载程序可以通过对 get 操作的结果应用密码哈希函数来验证检索到的数据是否正确,并将其与原始密钥进行比较。存储可变数据的系统和允许用户为插入内容选择任意名称的系统可以使用加密签名来保护数据的完整性和真实性。但是,这样的系统需要一个基础设施来管理密钥。

不能保护插入数据完整性的系统往往充斥着标签不正确或损坏的内容。解决内容污染问题的一个可能的方法是由对等节点对数据的真实性进行投票。

6.2.2 可用性和持久性

一个挑战是如何确保存储在 P2P 系统中数据的可用性和持久性。即使在没有攻击的情况下,确保可用性也会因为频繁更新而变得困难。要使数据对象可用,至少有一个存储副本的节点必须始终处于联机状态。为了确保某个对象在不断变更的情况下仍然可用,系统必须不断地将副本移动到活动节点,这可能需要大量的网络带宽。可扩展存储、高可用性和抗流失能力是一个实用的 P2P 存储系统的不可能三角。

另一个挑战是 P2P 存储系统的长期成员资格(即定期在线的节点集)必须不减少,以确保存储数据的持久性。否则,由于其余成员之间可用的存储空间可能低于存储所有数据所需的空间,系统可能会永久丢失数据。

6.3 激励措施

人们期望 P2P 系统的参与者为共同利益贡献资源。然而,如果用户可以免费使用这项服务,他们就不一定有贡献的动机。这些用户可能希望节省自己的磁盘空间、带宽和计算周期,或者他们可能不希望在共享系统中贡献任何内容。这种用户在许多 P2P 系统中都非常普遍。那些人的存在减少了 P2P 系统的可用资源,并可能恶化该系统能够向用户提供的服务质量。

为了解决这个问题,在 P2P 系统的设计中加入了奖励计划。例如,一个用户必须上传同一个文件的另一部分,否则就要冒着与该用户断开连接的风险,才能从对方那里下载文件。这为用户共享他们的上传带宽提供了动力,因为不上传数据的话,对方的下载性能会很差。这些机制都试图将服务的质量与节点的贡献联系起来。

6.4 管理 P2P 系统

这是一个悬而未决的问题,P2P 系统是否比其他分布式系统更容易管理呢?

一方面,P2P 系统适应各种各样的工作负载和资源可用性条件,能够自动从大多数节点故障中恢复,并且用户可以独立地管理自己的硬件。因此,与基于服务器的解决方案相比,P2P 系统的日常运维似乎较少。另一方面,P2P 系统可能会经历难以管理的大范围停服,然而,要解决这个问题还需要更多的研究和实践。

7. P2P与互联网服务供应商的纠葛

互联网服务提供商见证了 P2P 应用的成功,而且心情复杂。一方面,P2P 推动了对网络带宽的需求。另一方面,P2P 流量模式挑战了互联网服务提供商在设计网络和为服务定价时所做的某些假设。

互联网是一个由独立网络提供商组成的有等级的集团。本地互联网服务供应商通常连接到区域互联网服务供应商,而区域互联网服务供应商又连接到(跨)国家主干网供应商。处于同一层级的互联网服务提供商(即所谓的对等互联网服务提供商)也可以直接交换流量,主干网供应商之间是完全互联的。通常情况下,对等网络服务提供商之间并不直接交换流量,但是用户需要为他们发送给服务提供商的流量付费。

这种定价模式起源于client-server应用主导互联网流量的时代。商业服务器运营商为所使用的带宽向互联网服务提供商支付费用,而互联网服务提供商则向各自的供应商支付费用。然而,对于 P2P 内容分发的应用,家庭P2P 节点可以相互上传内容。除非 P2P 节点碰巧连接到同一个 ISP 或两个直接相互对等的 ISP,否则上传节点的 ISP 必须将数据转发给自己的提供商。因此,一些互联网服务提供商已开始约束网络流量,甚至阻塞P2P的流量。

这些问题必须得到解决, P2P 应用才能蓬勃发展,同时确保互联网服务提供商的利润。一个很有前途的技术方法是将 P2P 应用中的对等点选择偏向于连接到同一互联网服务提供商或互相对等的互联网服务提供商节点。另一个解决方案是互联网服务提供商改变他们的定价模型。

从长远来看,互联网服务提供商可能会直接或间接地受益于 P2P 系统带来的创新和新服务的涌现。此外,互联网服务提供商可以通过为P2P的成功服务提供基础设施支持,从而找到新的收入来源。

8. 结束语

作为一种破坏性创新,P2P 为互联网、工业和社会创造了巨大的机遇和挑战。P2P 技术最重要的承诺在于它能够显著降低创新的障碍。立于专用的基础设施和集中的控制是一柄双刃剑,因为它创造了新的挑战,必须通过技术、商业和法律手段来应对。

当前的现实是,P2P成为了新思想和新服务的试验场,具有特别的价值。那些最终被证明是受欢迎的、合法的、商业上可行的服务,然后可能会转化为更基于基础设施的商业服务。在那里,P2P思想可以与传统的集中式方法相结合,构建高度可扩展和可靠的系统。

【关联阅读】

以上是关于这是你了解的P2P 么?的主要内容,如果未能解决你的问题,请参考以下文章

面试官问:HTTP 的负载均衡你了解么?你不是说了你们用的Nginx么?说一下把。

你真的了解 “开源” 么?请查收保姆级开源百科

你真的了解load方法么?(转载)

你真的了解DOM事件么?

android权限机制,你真的了解么

你了解RPC么?