对等网络计算 (peertopeer PP) 成功地将许多有趣的分布计算技术重新拉回到人们视线中为了更好地理解 PP 技术本文主要从年代初流行的早期 PP 应用程序开始阐述 PP 的发展过程并解释 PP 计算技术之所以拥有广阔前景的原因同时还给出一个最简单的 PP 程序代码从而说明使用 PP 技术时要解决哪些问题通过这些内容您可以使用 Java 语言来编写自己的 PP 程序或是利用 PP 中某些技术来解决您项目中遇到的类似问题 在大多数人眼中PP 仅仅是一种局限于文件共享的应用或是由互联网介入给计算方法带来的新发展这种错误的印象很大程度上是由那些极端的 PP 支持者造成的事实上PP 计算是非常重要的它成功地将许多被忽略的有用技术拉回到大家注视的焦点掌握如何将 PP 计算应用到更广阔的技术领域是很有帮助的当然通过一些实际的 PP 代码来学习也是必须的所以本文也会给出一些用 Java 语言编写的代码例子 下面将具体阐述 PP 的有关知识为了避免陷入其他一些不太重要的周边细节讨论本文将主要集中讨论以下几个方面 在许多流行的 PP 应用中不可避免地要涉及到合法隐私安全控制以及版权等问题尽管这些方面都是非常有趣的课题却不应该过分地分散掉我们讨论 PP 技术的注意力因此通常情况下本文不会涉及这些课题除非某个专门的应用例子必须解决它们 技术工程师在设计和开发 PP 应用程序时遇到的问题未必都是新问题因此在讨论到这些旧问题时会借鑒计算机科学其他领域中的一些现成技术 总而言之我们希望能够将精力集中在技术本身主要包括内容和资源的管理信赖和安全属主和权限通讯模型分布式计算以及搜索和查询等至于 PP 技术所涉及的社会政治和合法性等问题则基本上略过不谈 PP 应用最初出现时和现在并不相同事实上可以认为它是若干不同技术以及流行趋势的产物下面是两个导致 PP 技术发展最重要的趋势首先是某些新技术与软件工程结合形成了一种将工作分散的趋势PP 计算正是这种分散工作趋势的自然结果 其次从工程的角度看来在企业应用集成等因素的驱动下过去十年渐渐形成一种从集中的单机系统转向分布式系统的趋势在集中式的应用中进行控制是相对容易的这一点在一定程度上抑制了分布式潮流的发展然而随着互联网的发展以及 BB 商务交易方式的日益流行全面的分布式计算也就成为一种商业需求 对功能强大的网络计算机的需求以及昂贵的带宽开销是对这种趋势影响最大的两个因素为了提高效率PP 计算由许多互相连接的同位体 (peer) 组成这两种趋势导致了 PP 应用技术研究的迅速发展 除了技术方面之外的社会因素也是一个重要原因毫无疑问人们现在对 PP 计算技术的热切关注起源于 Napster Scour Gnutella 以及这些家族的其他成员产品这些产品提供了所谓的 killer apps 功能能够将 PP 技术中的一部分下放到客户端用户的手中正是这种第一手的体验使得人们越来越关注 PP 技术的强大功能 然而必须指出的是最初的 PP 应用大约产生于年前并且其中的许多至今仍然被使用尽管这些早期应用的核心就是 PP但由于大多数的使用者并未感觉或接触到因此通常并不认为它们是 PP 技术 早期的尝试 PP 计算并非一种全新的技术虽然 PP 这个术语是现在才发明的但 PP 本身的基本技术的存在时间却至少和 USENETFidoNet 这两种非常成功的分布式对等网络技术一样长甚至更长些(因此笔者建议读者朋友去尝试这样一个挑战——寻造最早的 PP 应用尤其是那些现今仍在使用的应用)关键在于在最初的 PP 应用出现时许多使用该技术的人们甚至不会使用计算机 USENET 产生于 年是一种分布式系统能够为各个地方提供新闻组USENET 最早的雏形由是两名研究生 Tom Truscott 和 Jim Ellis 实现的当时并没有任何类似于互联网上随选信息的概念文件只能通过电话线批量传送且常常选在长途费用比较低的夜间进行因此当时的 USENET 若采用集中式的控制管理方法将效率低下自然而然地就提出了一种分散分布式的管理方法这种分布的结构一直沿用到今天 早期 PP 应用另一个杰出的代表则是 FidoNet它和 USENET 类似也是一个分散分布的信息交换系统Tom Jennings 于 年创建了 FidoNet 系统来让不同 BBS 系统中的用户们互相交换信息这种符合人们需要的技术迅速成长起来并一直沿用到今天 USENET 和 FidoNet 都是值得探究的系统因为它们在多年前就遇到并解决了许多当今 PP 技术所面临的同样问题同时也还存在着安全性以及其他一些问题为了开发成功的 PP 计算系统首先必须了解这些 PP 技术的发展历史 几乎所有人都会同意 PP 计算是分布计算的一个子集这种说法而且大多数人也都会认为并非所有的分布式计算都是 PP 计算peertopeer 这个名字意味着各个 peer 之间的关系是平等的并且它们之间的联系是直接的 PP 网络中含有许多能够互相通讯的 peer每个 peer 都有专门的用途通常情况下网络中 peer 的数目是非常大的但用途却只有若干种这就是 PP 应用之所以能大量并行运行的重要原因众所周知的 Gnutella 网络就是一个最好的例子它包含了大量本质上相同的 peerPP 技术中最有趣的地方就在于这些对等 peer 之间的联系其次则是它们自身 在很大程度上PP 计算与那些分布计算所面临的问题是重叠的——调整并监控网络中独立节点的动作并确保鲁棒性以及节点间的可靠通讯但并非所有的分布计算都是 PP 计算比如象 SETI@home 或 中不同的项目这些分布计算几乎没有考虑网络节点中的对等交互因此并不能认为是真正意义上的 PP 应用然而由于分布计算和 PP 面临很多相同的问题这就值得我们了解一些分布计算方面的内容对于这类不能算是 PP 技术的分布计算笔者建议用面向同位体的应用(peeroriented)来命名 最简单的 peer 以及它存在的问题 使用 Java 语言编写一个最基本的 PP 应用是非常容易的这里笔者给出一个简单的例子以供读者参考给出这个例子的另一目的则在于表明在网络中传送文件和消息是很方便的然而若要为 PP 应用建立一个鲁棒性很好的平台则很困难这个 PP 例子中缺少了许多应有的重要特性其中例如安全性等特性也是当今许多流行的 PP 应用所缺乏的另外一些特性(例如消息路由和分布查询等)则在某些应用中得到了实现例如 Gnutella 就能够支持简单的消息路由以及分布查询 图 中显示了一个典型 PP 应用的系统框图为了支持文件共享这个 PP 系统只负责与抽象的资源进行交互而具体资源则从 Resource 接口中获得这些具体资源可以是任何可定位的信息包括文件系统数据库词典或是一个电话本 图 PP 应用的主体设计框图MessageServer 类是这个 PP 应用的核心它能够与其他的对等网络获得联系并将消息转发到合适的地方该类的具体代码在文件 ppjar 中(可以在 资料 部分下载此文件)读者可以试着在命令行环境下输入 java jar ppjar就能够运行这个简单的 PP 应用程序这个程序会从它所在的目录中寻找名为 ppproperties 的属性文件在属性文件中可以定义要下载的资源以及它所知道的同位体信息您所下载的 jar 文件中还含有一个属性文件的样本可以对它进一步修改 如图 所示用户可以通过简单的命令行界面与该 PP 程序交互如果已选择了某个 peer 或是正在访问某些远程资源则该程序会将相关的信息显示出来 图 程序的初始运行界面任何时候用户只要在提示符后面输入一个问号(?)屏幕上就会显示出一系列选项(如图 所示)如果用户还没有选择 peer输入问号时就会显示出该程序的所有已知的 peer否则则显示已选定 peer 能够访问到的资源只要在提示符后面输入某个 peer 或资源的名字就能够选定它们 图 显示 peer 和资源列表在图 中用户选择了名为 guppy 的 peer然后显示 guppy 能够获得的资源在选定 peer 和资源之后用户就能够访问并控制该资源(如图 )如果选定的是一个文件系统资源那么对该资源对象的访问就意味着从远程 peer 将该对象拷贝到本地 peer 中 图 列出可控制的资源对象只要输入两个点()用户就可以随时取消对某个资源或 peer 的选择 图 取消选择真正的 PP 应用程序显然要比本文中这个简单的应用程序复杂得多它至少还需要扩展以下几个方面的功能足够的安全性(包括验证以及授权等机制)可靠的消息路由和传送内容和资源的管理分布查询以及命名在以后的章节中笔者还会提出一些的具体例子和工作代码来进一步讨论这些功能的实现 |