摘要 点对点(PP)网络无疑是当前最热门的话题之一在这个领域中Sun推出了Jxta一个用于PP应用开发的网络计算平台这篇文章介绍PP和Jxta在这方面所作的努力适合有意开发PP应用的编程者阅读 今日的Internet正面临着一场革命这场革命正在为改变Internet的一个基本的特性而努力这就是网络的终端(或者说客户端)例如桌面电脑移动电话PDA等正要求一个更优越的网络地位以结束以服务器为主导的Internet这就是PP PP是一个网络的模型它的基本概念就是任何的节点都可以作为服务器或者客户端传统的客户/服务器网络都有预定义的客户和服务器节点而PP则不同PP可提供一些额外的特性而这些特性使用传统的模型是无法实现的 在这篇文章中我将为你介绍PP网络并且将它和客户/服务器网络作对比我还会介绍Jxta(发音是juxta)Jxta是由Sun的首席科学家兼CEO Bill Joy提出来的Jxta正在被成千上万的开放源代码开发者模型化在PP领域中Jxta作出了巨大的改进它定义了一套的协议开发者可以使用这些协议来建立几乎所有的PP应用同时这些协议也非常灵活可以适合不同应用的特别需要Jxta也不使用特定的编程语言或者环境不过Java无疑是一个适合的选择原因在于便携性容易开发和丰富的类库 PP概览 现今最普遍的分布计算模型是客户/服务器模型图一描绘的就是典型的客户/服务器架构 *****图一******* 在客户/服务器体系中客户请求服务服务器提供服务在当今的Internet上存在在大量的服务器Web服务器邮件服务器FTP服务器等等客户/服务器体系是中央化体系的一个例子整个的网络都依靠中央的节点和命名的服务器来提供服务如果没有服务器网络将是毫无意义的如果没有它们Web浏览器如何工作?不论客户端或者浏览器的数目有多少网络只能在服务器存在的前提下才有意义 和客户/服务器体系相似PP也是一个分布的计算模型但是有一个很大的不同PP是一个非中央化的体系(如图)在网络中并没有客户或者服务器的状态区分网络中的每个实体都是同等的有着同样的状态这意味着一个实体可以请求一个服务(客户端的特性)或者提供一个服务(服务器的特性)图展示的是一个PP网络 *****图********* 虽然每个节点在网络中有着同等的状态不过它们并不要求都有着同样的物理性能一个PP网络可以包含有不同性能的节点由移动设备到大型机对于一个移动设备来说可能由于自身的限制不能作为服务器但从网络方面来说并没有这个限制 两个网络模型都有着各自的优点和缺点由图的客户/服务器网络你可以看到当网络增大时(即越来越多的客户加入)中央服务器的压力就越大当加多一个客户中央节点的性能就会弱化而它的失效将会导致整个网络的瘫痪 对于PP网络来说情况就完全不一样了由于网络中的每个实体(或者节点)都是积极的参与者 每个节点都会为网络提供一些资源例如存储空间或者CPU当越来越多的节点加入网络时网络的性能将会增长因此当网络增大时它的性能也会增强你将不会碰到客户/服务器体系中的扩展问题 PP网络和客户/服务器模型还有一个很大的不同是即使只有一个节点是活跃的PP网络也被认为是活跃的只有在没有任何节点时PP网络才是不可用的 不过金无足赤虽然PP网络有着这些的优点但你也要付出一些代价的首先管理这样一个网络可能是一个噩梦而在客户/服务器网络中你只需要管理中央的节点因此无论在安全策略和备份策略方面PP网络都要复杂一些第二PP协议比传统的客户/服务器协议需要更多的交互例如当节点加入或者退出网络这些方面都会对性能产生一些影响 Jxta的解决之道 不同的协议不同的体系不同的实现这就是当前PP解决方案的精确描述现今开发者使用各种各样的方法论和途径来创建PP应用相对于客户/服务器模型丰富的标准PP领域的标准可以说是很少为此Sun开发了Jxta 以下是Jxta前景的一些陈述 Jxta工程是为了建立核心的网络计算技术它提供一套简单精简和便利的技术可以在任何的平台任何地点和任何时间支持PP计算该工程首先概述了PP的功能然后建立核心的技术以弥补当前PP计算方面的不足它集中于创建基本的技术并且将策略的选择权交给应用的开发者 Jxta致力于提供一个基本的PP架构这样其它的PP应用可以建立在上面这个基架包含有一套协议这些协议与语言平台和网络都是无关的(这就是它们对底层的网络没有作出任何的假定)这些协议只规定了建立普遍PP应用的必要之处它的设计是精简的开销很小这些协议的目的可引用Jxta前景陈述中的一句话来说明要令每个设备都带有一个数字的心跳 当前的Jxta定义了六种协议不过并不要求所有的Jxta节点都实现全部六种协议节点实现的协议数目和它的性能有关一个节点可以只实现一种协议根据需要节点也可以扩展或者替换任何的协议 有一点要注意的是Jxta协议自身并不提供交互性对于这一点你可以通过TCP/IP来理解这一点虽然FTP和HTTP都建立在TCP/IP上不过你不能使用FTP客户来访问网页Jxta也是这样两个建立在Jxta上的应用并不意味着它们是可以交互的这一点应该由开发者开保证不过由于Jxta提供了一个可交互的基层所以开发者在实现交互时可以少考虑一些东西 Jxta中的XML 毫无疑问要提供一个通用基本协议层第一步就是要采用一种适合的表现方式这种方式可以被当前的大部分平台明白XML无疑是一个理想的选择它已经成为数据交换的一个默认标准XML提供通用的语言和平台无关的数据表现XML也可以很容易地转换为其它的编码因此用XML格式定义了所有的Jxta协议 虽然Jxta的信息使用XML定义不过Jxta并不依靠XML来编码实际上Jxta实体并不需要一个XML解析器它是一个可选的组件可以将XML看成是Jxta使用的一种便利的数据表现形式小的实体(例如移动电话)可以使用预编译的XML信息 Jxta的术语 在更进一步讲述Jxta之前让我们先来看一下它的各种术语 Peers(节点) 网络上实现一种或者多种Jxta协议的任何实体一个节点可以是任何的东西例如大型机小至一部移动电话甚至是一个传感器节点的存在是独立的并且可以与其它节点异步通信 Peer groups(节点组) 有者共同目的的节点可以集合起来形成节点组节点组可以跨越多个物理网络域 Messages(信息) 在Jxta的网络中所有的通信是通过发送和接收信息来实现的这些信息称为Jxta messages它们符合标准的格式是交互的前提 Pipes(管道) Pipes在Jxta的环境里建立起虚拟的通信管道节点通过它们来发送和接收Jxta的信息Pipes被认为是虚拟的因为Pipes无需要知道使用它们的真正网络地址这是一个重要的抽象 Services(服务) Peers和Peer groups都可以提供服务如果一个服务由一个peer独立提供那么就被称为是一个Peer服务这是一个和中央化相等的概念没有其它的Peer需要提供该服务如果该Peer没有活动那么服务将无效 Peer groups提供的服务被称为是peer group服务与peer服务不同这些服务并不依赖某个单独的peer而是由整个组提供Peer group服务的可用性更强因为即使一个peer不可用其它的peers还可以继续提供相同的服务 Codats Codat (Code/Data)在Jxta中它意味着可以是代码或者数据的内容如果有需要Codats可以被发布和复制 Advertisements Advertisement可发布和揭露任何的Jxta资源例如一个peer一个peer组一个管道或者codatAdvertisements以XML文档的方式来表现 Identifiers(标识符) 在Jxta环境中Identifiers扮演着重要的角色Identifiers指定资源而不是物理的网络地址Jxta的Identifier被定义为一个URN(Uniform Resource Name统一资源名)一个URN就是一个URI(Uniform Resource Identifier统一资源标识符)它必须是保持全局唯一的即使是该资源不存在了它仍然要保持不变 World peer group 任何一个Jxta peer在默认的情况下都是World peer group的一个成员每一个Jxta peer都知道World peer group并且可以加入该peer组即使它在网络上找不到任何其它的peers即使断开的peer也是其中的成员 Net peer group 在一个本地网络中网络管理员通常都可以设置一个peer组该组可以让网络上的任何peer加入这就是Net peer group它类似一个DHCH(dynamic host configuration protocol动态主机配置协议)服务该Net peer group可为peer提供一个全局的连接它的限制由管理者定义 Rendezvous peers(集合点) 一个集合点是一个特别的节点它通过缓沖节点的广播可以存储其它节点的信息因此一个集合点可以帮助节点发现网络上的其它节点集合点还可以将搜索的请求导向到其它的集合点 Endpoints(终点) 终点表示网络上的一个目的地它可以由一个网络地址来表示Peers通常都不直接使用终点而是通过管道来间接使用它们管道都建立在终点上 Routers(路由器) 在Jxta的网络上移动包的东西均被称为Jxta路由器并不要求所有的peers都是路由器不是路由器的pe |