2001 年 3 月 01 日
对等网络计算 (peer-to-peer, P2P) 成功地将许多有趣的分布计算技术重新拉回到人们视线中。为了更好地理解 P2P 技术,Todd Sundsted 写了包括本文在内的一系列文章。本文主要从 80 年代初流行的早期 P2P 应用程序开始,阐述 P2P 的发展过程,并解释 P2P 计算技术之所以拥有广阔前景的原因。同时,Todd 还给出一个最简单的 P2P 程序代码,从而说明使用 P2P 技术时要解决哪些问题。通过这些内容,您可以使用 Java 语言来编写自己的 P2P 程序,或是利用 P2P 中某些技术来解决您项目中遇到的类似问题。
过去的九个月以来,您必然对 peer-to-peer(P2P,对等网络计算)有所耳闻。在大多数人眼中,P2P仅仅是一种局限于文件共享的应用,或是由互联网介入给计算方法带来的新发展。这种错误的印象很大程度上是由那些极端的P2P 支持者造成的。
事实上,P2P计算是非常重要的。它成功地将许多被忽略的有用技术拉回到大家注视的焦点。掌握如何将P2P 计算应用到更广阔的技术领域是很有帮助的。当然,通过一些实际的P2P 代码来学习也是必须的,所以本文也会给出一些用 Java语言编写的代码例子。
下面将具体阐述 P2P的有关知识。为了避免陷入其他一些不太重要的周边细节讨论,本文将主要集中讨论以下几个方面:
- 在许多流行的 P2P应用中,不可避免地要涉及到合法、隐私安全、控制以及版权等问题。尽管这些方面都是非常有趣的课题,却不应该过分地分散掉我们讨论P2P技术的注意力。因此通常情况下本文不会涉及这些课题,除非某个专门的应用例子必须解决它们。
- 技术工程师在设计和开发 P2P应用程序时遇到的问题未必都是新问题。因此在讨论到这些旧问题时,会借鉴计算机科学其他领域中的一些现成技术。
总而言之,我们希望能够将精力集中在技术本身,主要包括内容和资源的管理、信赖和安全、属主和权限、通讯模型、分布式计算、以及搜索和查询等。至于P2P 技术所涉及的社会、政治和合法性等问题则基本上略过不谈。
发展历史
P2P应用最初出现时和现在并不相同。事实上可以认为它是若干不同技术以及流行趋势的产物。下面是两个导致 P2P 技术发展最重要的趋势:
首先是某些新技术与软件工程结合,形成了一种将工作分散的趋势。P2P计算正是这种分散工作趋势的自然结果。
其次,从工程的角度看来,在企业应用集成等因素的驱动下,过去十年渐渐形成一种从集中的单机系统转向分布式系统的趋势。在集中式的应用中进行控制是相对容易的,这一点在一定程度上抑制了分布式潮流的发展。然而随着互联网的发展,以及B2B商务交易方式的日益流行,全面的分布式计算也就成为一种商业需求。
对功能强大的网络计算机的需求以及昂贵的带宽开销,是对这种趋势影响最大的两个因素。为了提高效率,P2P计算由许多互相连接的同位体 (peer) 组成。
这两种趋势导致了 P2P 应用技术研究的迅速发展。
除了技术方面之外的社会因素也是一个重要原因。毫无疑问,人们现在对P2P 计算技术的热切关注起源于 Napster, Scour, Gnutella,以及这些家族的其他成员产品。这些产品提供了所谓的 "killer apps"功能,能够将 P2P技术中的一部分下放到客户端用户的手中。正是这种第一手的体验,使得人们越来越关注P2P 技术的强大功能。
然而必须指出的是,最初的 P2P应用大约产生于20年前,并且其中的许多至今仍然被使用。尽管这些早期应用的核心就是P2P,但由于大多数的使用者并未感觉或接触到,因此通常并不认为它们是P2P 技术。
早期的尝试
P2P 计算并非一种全新的技术。虽然 P2P这个术语是现在才发明的,但 P2P 本身的基本技术的存在时间却至少和USENET、FidoNet这两种非常成功的分布式对等网络技术一样长,甚至更长些(因此笔者建议读者朋友去尝试这样一个挑战--寻造最早的P2P 应用,尤其是那些现今仍在使用的应用)。关键在于,在最初的 P2P应用出现时,许多使用该技术的人们甚至不会使用计算机。
USENET 产生于 1979年,是一种分布式系统,能够为各个地方提供新闻组(笔者最喜欢的是 rec.arts.int-fiction
和 rec.games.int-fiction
)。USENET最早的雏形由是两名研究生 Tom Truscott 和 Jim Ellis实现的。当时并没有任何类似于互联网上“随选”信息的概念,文件只能通过电话线批量传送,且常常选在长途费用比较低的夜间进行。因此,当时的USENET若采用集中式的控制管理方法将效率低下,自然而然地就提出了一种分散、分布式的管理方法。这种分布的结构一直沿用到今天。
早期 P2P 应用另一个杰出的代表则是 FidoNet。它和 USENET类似,也是一个分散、分布的信息交换系统。Tom Jennings 于 1984年创建了 FidoNet 系统,来让不同 BBS系统中的用户们互相交换信息。这种符合人们需要的技术,迅速成长起来,并一直沿用到今天。
USENET 和 FidoNet都是值得探究的系统,因为它们在多年前就遇到并解决了许多当今 P2P技术所面临的同样问题,同时也还存在着安全性以及其他一些问题。为了开发成功的P2P 计算系统,首先必须了解这些 P2P 技术的发展历史。
技术前景
前面我们已经浏览了一遍 P2P 的发展历史,下面可以做一些文字游戏。
几乎所有人都会同意 “P2P计算是分布计算的一个子集”这种说法。而且大多数人也都会认为“并非所有的分布式计算都是P2P 计算。"peer-to-peer" 这个名字意味着各个 peer之间的关系是平等的,并且它们之间的联系是直接的。
P2P 网络中含有许多能够互相通讯的 peer,每个 peer都有专门的用途。通常情况下,网络中 peer的数目是非常大的,但用途却只有若干种。这就是 P2P应用之所以能大量并行运行的重要原因。众所周知的 Gnutella网络就是一个最好的例子,它包含了大量本质上相同的 peer。P2P技术中最有趣的地方就在于这些对等 peer之间的联系,其次则是它们自身。
在很大程度上,P2P计算与那些分布计算所面临的问题是重叠的--调整并监控网络中独立节点的动作,并确保鲁棒性、以及节点间的可靠通讯。但并非所有的分布计算都是P2P 计算。比如象 SETI@home 或 distributed.net
中不同的项目,这些分布计算几乎没有考虑网络节点中的对等交互,因此并不能认为是真正意义上的P2P 应用。然而由于分布计算和 P2P面临很多相同的问题,这就值得我们了解一些分布计算方面的内容。对于这类不能算是P2P技术的分布计算,笔者建议用“面向同位体”的应用( peer-oriented)来命名。
最简单的 peer以及它存在的问题
使用 Java 语言编写一个最基本的 P2P应用是非常容易的,这里笔者给出一个简单的例子,以供读者参考。给出这个例子的另一目的则在于表明,在网络中传送文件和消息是很方便的。然而若要为P2P 应用建立一个鲁棒性很好的平台则很困难。这个 P2P例子中缺少了许多应有的重要特性。其中,例如安全性等特性也是当今许多流行的P2P应用所缺乏的。另外一些特性(例如消息路由和分布查询等)则在某些应用中得到了实现,例如Gnutella 就能够支持简单的消息路由以及分布查询。
图 1 中显示了一个典型 P2P 应用的系统框图。为了支持文件共享,这个P2P 系统只负责与抽象的资源进行交互,而具体资源则从 Resource
接口中获得。这些具体资源可以是任何可定位的信息,包括文件系统、数据库、词典或是一个电话本。
图 1. P2P应用的主体设计框图
MessageServer
类是这个 P2P应用的核心。它能够与其他的对等网络获得联系,并将消息转发到合适的地方。
该类的具体代码在文件 p2p.jar
中(可以在 资料部分下载此文件)。读者可以试着在命令行环境下,输入 java -jarp2p.jar
,就能够运行这个简单的 P2P 应用程序。
这个程序会从它所在的目录中寻找名为 p2p.properties
的属性文件。在属性文件中可以定义要下载的资源以及它所知道的同位体信息。您所下载的jar 文件中还含有一个属性文件的样本,可以对它进一步修改。
如图 2 所示,用户可以通过简单的命令行界面与该 P2P程序交互。如果已选择了某个 peer或是正在访问某些远程资源,则该程序会将相关的信息显示出来。
图 2.程序的初始运行界面
任何时候,用户只要在提示符后面输入一个问号(?),屏幕上就会显示出一系列选项(如图3 所示)。如果用户还没有选择peer,输入问号时,就会显示出该程序的所有已知的peer;否则则显示已选定 peer能够访问到的资源。只要在提示符后面输入某个 peer或资源的名字,就能够选定它们。
图 3. 显示peer 和资源列表
在图 3 中,用户选择了名为 "guppy" 的 peer,然后显示 guppy能够获得的资源。在选定 peer和资源之后,用户就能够访问并控制该资源(如图4)。如果选定的是一个文件系统资源,那么对该资源对象的访问就意味着从远程peer 将该对象拷贝到本地 peer 中。
图 4.列出可控制的资源对象
只要输入两个点(..),用户就可以随时取消对某个资源或 peer的选择。
图 5.取消选择
结论
真正的 P2P应用程序显然要比本文中这个简单的应用程序复杂得多。它至少还需要扩展以下几个方面的功能:足够的安全性(包括验证以及授权等机制)、可靠的消息路由和传送、内容和资源的管理、分布查询以及命名。在以后的章节中,笔者还会提出一些的具体例子和工作代码,来进一步讨论这些功能的实现。
参考资料
关于作者
|
|
|
Todd Sundsted,从桌面 PC 流行起就开始从事编程工作。起初兴趣主要集中在使用 C++ 语言编写分布式程序,后来意识到 Java 语言在这方面的显著优势,从而转向采用 Java 编写分布式程序。除了编程之外,Todd 还是 PointFire 有限公司的首席工程师以及创办人之一。您可以通过 todd-p2p@etcee.com 与 Todd 联系。
|
相关推荐
Napster作为第一代P2P网络的代表,虽然存在诸多局限性,但它开启了P2P技术的新纪元,并激发了后续一系列创新和技术进步。从Napster的经验中,我们可以看到P2P技术的巨大潜力,同时也意识到在实现P2P网络时需要解决的...
Wi-Fi联盟技术委员会P2P工作组发布了《Wi-Fi Peer-to-Peer (P2P) 技术规范v1.2》文件,这是一份关于Wi-Fi P2P技术的详细技术规格文档。P2P(Peer-to-Peer)技术,即点对点技术,是一种网络通信技术,它允许无线设备...
1. **基础理论与核心技术趋于成熟**:经过多年的探索和发展,P2P的基础理论和技术体系已经相对成熟,近几年鲜有重大的创新出现。这意味着P2P领域已经进入了一个稳定发展的阶段,更多地关注如何将现有技术应用于实际...
文章标题为《A Survey of Peer-to-Peer File Sharing Technologies》,而副标题则是对全文内容的进一步阐述,它表示这篇论文是由Stephanos Androutsellis-Theotokis撰写的一个关于对等网络文件共享技术的调查研究。...
摘要:在P2P(peer-to-peer)借贷领域,尤其是中国市场,对借款人信用风险的有效评估是最大的挑战,因为大部分借款人缺乏广泛认可的信用评分。本研究利用2012年至2015年来自Renrendai.com网站的信用数据,通过构建...
- **Java 开发**:介绍最新 JDK 的核心特性和开源工具(如 Ant、JUnit 和 Hibernate)的使用方法。 - **非 EJB 开发**:探讨不使用 EJB 创建高质量应用的方法及替代方案。 - **Spring 框架与 Hibernate**:利用这些...
这部分介绍了P2P技术的历史背景和互联网模型,分析了Napster如何激发了P2P革命,并探讨了P2P的概念如何被重新塑造。同时,作者们讨论了公共资源的丰富性,即“Commons”的概念,以及如何通过P2P模式实现资源的共享和...
《对等网络(Peer to Peer):驾驭颠覆性技术的力量》一书由Andy Oram编辑,首次出版于2001年3月,是P2P技术领域的经典之作。该书全面探讨了P2P系统的发展目标、面临的问题以及开发者找到的技术解决方案。作者团队包括...
Wi-Fi P2P(Peer-to-Peer)技术规范由Wi-Fi联盟发布,旨在定义一种允许设备之间直接建立无线连接的标准协议,无需通过接入点或路由器。此版本为V1.1,是Wi-Fi P2P技术规范的一个重要更新,增强了功能并解决了先前...
- **Peer-to-Peer**:P2P网络的特点和技术。 - **Reputation**:声誉管理的概念。 - **Distributed Eigenvector Computation**:分布式特征向量计算。 #### 实施与应用 - **实现语言**:Java是一种常用的实现...
- 发展历史:从最早的Napster到后来的Gnutella、Kazaa等,P2P技术不断发展,应用场景也越来越广泛。 - **流行的P2P文件共享系统** - **FastTrack**:由Kazaa采用的一种P2P架构,支持大规模的数据共享。 - **...
- **CMPP**:China Mobile Peer to Peer,中国移动点对点协议 - **SMSC**:Short Message Service Center,短消息中心 - **GNS**:Gateway Name Server,网关名称服务器(汇接网关) - **SP**:Service Provider,...
在这个“P2P的作业的一些文档”中,我们可以期待深入理解P2P(Peer-to-Peer)网络的基础知识以及其在分布式系统中的应用。 1. **P2P网络基础** - **定义**:P2P网络是一种去中心化的架构,其中每个节点既是客户端...
通过对上述知识点的总结,我们可以看到对等计算作为一种分布式计算模型,在理论和技术上已经取得了显著的进展,并且在未来有着广阔的应用前景。随着技术的不断发展和完善,P2P网络将在更多领域展现出其独特的优势。
《WiFi_P2P_Technical_Specification_v1.2》是一份由WiFi联盟发布的技术规范文档,详细阐述了WiFi Peer-to-Peer(P2P)通信的技术规格与实现方法。这份文档对于理解并应用WiFi P2P技术至关重要,尤其是在物联网、...
- **2.** _They focus too much on studying, dealing with peer pressure and worrying about what others think, and not enough on other things._ 描述了学生可能面临的压力源,如过度学习、同伴压力和在意他人...
计算机网络的发展历史 - **起源**:起源于20世纪60年代美国的ARPANET项目,最初是为了军事目的而设计的。 - **发展**:随着技术的进步和社会需求的增长,逐渐演变为今天的互联网。 - **特点**:具有分布式处理能力...
- **典型并行程序模式**:例如对等模式(Peer-to-Peer)和主从模式(Master-Worker),并给出具体实例。 - 对等模式:以Jacobi迭代为例,展示如何在多个进程间传递数据以实现并行计算。 - 主从模式:以矩阵向量乘法为...