对等|络卛_来(f)了,它承创徏一个根本不同的计算世界 ?而且Q在某些斚w ?比基于老模式客hQ服务器的要更好。Jxta 工程是按C方式q作的,旨在为对{应用构建实用应用程序底层。虽?Jxta 的参考实现是?Java 语言写的Q但事实上它对当今现有的M语言Q操作系l(OSQ或q_都会(x)ƣ然接纳 ?而且Q更重要的是Q对于h们现在想都没惌的技术,它也做好了准备。在本文Q即此系列的W一部分Q共 3 部分Q中QJava 开发h员兼作?Sing Li 解释了支?Jxta 的基本概念和协议Q(zhn)ؓ(f)阅读后面的文章做好准备。后面这些文章将教?zhn)试?Jxta shell q且构徏 P2P 应用。请在讨坛与作者和其他读者共享?zhn)关于本文的心得?BR>对等QP2PQ网l与传统的客hQ服务器或多层服务器|络不同Q对{网l中的对{机是彼此直接通信的。这U通信无需依赖集中式服务器或资源就可完成。在 P2P |络中,通过对等Z间的交互操作可以完成工作,׃n信息。通过创徏有潜力展C非帔R的可用性和定w能力的计资源网l,P2P 体系l构使真正的分布式计成为可能?/P>
传统的客hQ服务器和多层次体系l构已经是业界的识途老马Q而采?P2P 体系l构的系l则q只是初生牛犊。Jxta 工程?Sun Z向构q_、跨操作pȝQOSQ和跨编E语a?P2P 应用提供实用应用E序底层而发动的H袭。这工E现在是开放源代码的,Sun 也参与其中,请参阅参考资料部分以获取关于 Jxta C的信息?/P>
Jxta 的设计理?BR>Jxta 工程的组件是认真的设计分工的产物。它们ؓ(f)泛型 P2P |络提供最需求,去除了所有特定于{略的逻辑和组件。这P׃剩下几乎所有的应用E序都能使用的构件要素,不考虑目标用户和特定实现。在接下来的几个月和几年里,Jxta 核心C的一个主要Q务就是确保这U普遍适用性仍然是真实的。?zhn)可以争辩_(d)P2P 最引h注目的应用程序尚未开发,那么如果 Jxta 把特定于{略或实现的l节嵌入其基构造层后就完事的话Q那么这些尚未想像到的应用程序就可能永远不会(x)和这个^C起工作。换句话_(d)Jxta lg没有强加一些不必要的策略,也没有硬性规定特定的应用操作模型Q得简单地构?P2P 应用成ؓ(f)可能Q也更方ѝ?
Jxta 工程?Java q_的独立?BR>在我们讨?Jxta 的核心构件的q程中,(zhn)会(x)发现我们没有提到M?Java 技术相关的东西QSun 已经?Jxta 提供了初步的 Java 语言实现Q但令h惊讶的是QJxta 工程既不特定?Java ~程语言Q也不特定于 Java q_。换句话_(d)M人都可以在Q何硬件^CQ用M操作pȝ、Q何编E语a实现Z Jxta 的网l。添加了q种 Jxta 的传输不可知Ҏ(gu)((zhn)将看到Q它甚至不依赖于 TCP/IPQ,(zhn)就有了一个准备着交互操作?P2P 基础构?BR>在其核心处?XML
我们很快更详细地说明,Jxta 目前使用 XML 作ؓ(f)消息和广告的格式Q这对于?Jxta h互操作性很有帮助。因?XML 技术的单性和普遍可访问性,软g几乎可以创徏在Q何^C以生成ƈ解析 Jxta 消息?/P>
Jxta 核心构g
构成 Jxta pȝ的组件与能在很多 P2P |络实现中识别出来的lg完全一?BR>
对这些组件中的每一个所做的研究揭C?P2P 通信?Jxta |络上是如何工作的?
对等机和对等l?/SPAN> 物理|络的逻辑划分产生了对{机的工作组QP2P 行话UC?I>对等l?/I>。对{组成员资格的交q没有Q何约束;换句话说QQ何对{机有必要属于几个对{组Q就可以属于几个对等l。Jxta 规范q没有规定或推荐l织对等l的合适方式。在 Jxta |络中,对等l就是共享资源和服务的对{机的集合。?zhn)可以很容易地明白Q如果这个规范把对等l限制ؓ(f)例如局域网 ?或者甚xq域|的一个子??那么Q很多要求组成员资格出q些物理限制的新应用E序的可能性将一概被排除。与 Jxta 的设计理念一_(d)对等l被规定为尽可能不受限制、尽可能普遍适应?/P>
h意,对等l的存在要求一些维护成员资格的手段。Jxta 规范又一ơ只规定了维护组成员资格的最需求,而没有指C怎样l护。这U组成员资格服务只是核心 Jxta 服务的一部分Q但它可以接受很多种形式 ?例如Q它可以是数据库或目录服务,q可以是Z集中式或分布式实现的?/P>
服务 ?1. Jxta 服务
Jxta 工程最初的参考实C提供上面列出的五之外的M服务。甚x心服务中的一些服务,例如处理安全性的讉K服务Q也只是实现了非常基的方面。现行的 Jxta C正在些服务中的大多数充实l节Q同时也在定义和实现对对{组或许有益的新服务Q一般地或特定地Q。例如,该社区目前正在进行的新服务包括:(x) ?Jxta 1.0 规范中,一个运行中的服务实例L和一个对{机联系在一P(zhn)可以把它想象成是由一个对{“服务器”主的Q。在一个对{组内,只能有一个服务实例和指定的对{机联系在一赗这U类型的服务被视?I>对等服务Q?/I>如果ȝ该对{服务的对等机当ZQ那么将无法获得该服务。另一斚wQ同一服务的多个实例被冗余地安装在一个对{组内的多个对等Z ?q被UCؓ(f)对等l服务?/I>对等l服务是 Jxta |络的高可用性和定w性的关键。Jxta 应用的实现者可以自由地把Q?Jxta 服务作ؓ(f)对等服务或对{组服务q行安装。管道服务,即ؓ(f)对等通信提供逻辑道抽象的核?Jxta 服务Q常常被作ؓ(f)对等l服务来实现Q以保其L可用?/P>
道 一个管道实例,从逻辑上讲Q是对等l内的一个资源。管道实例的实际实现通常情况下是通过道服务完成的。与传统Q类?UNIX 的)的系l不同,Jxta 道是单向的、异步的。需要双向通信的两个对{机不得不创徏两个独立的管道实例。也跟传l机制如 UNIX 道?TCP/IP 套接字不同,Jxta 道的末端可以在不同的时间连接到不同的对{机上,或者根本不q接。在?P2P |络上的服务提供冗余实现斚wQ只此一个单一概念是革命性的一步。对{机可以在Q一点及(qing)旉辑地“拾起”管道。例如,设想一个想使用拼写查器服务的对{机。它可以q接C个对{组的拼写检查器道Q该道是被作ؓ(f)冗余对等l服务实现的Q上。在q种情况下,只要臛_有一个拼写检查器的实例还在该对等l内的某个地方运行,该对{机p能得到服务?/P>
Jxta 1.0 规范提供了两U一般类型的道Q点对点和广播(propagateQ?/P>
对等机可以?I>点对点管?/I>q接到另一个对{机q单向传输消息。对{机可以使用q播道q接C个或多个其它对等机ƈ向它们全体传输消息。从本质上讲Q点对点道是一对一的消息传输机Ӟq播道则是一对多的消息传输机制。Jxta C目前正在多对多消息传输机制方面努力;q个机制已经被命名ؓ(f) Jxta 导线QwireQ?/I> 不管是什么类型的道Q通过道载送的信息块都UCؓ(f) Jxta 消息。那么,q些消息的确切格式是什么样子呢Q?/P>
消息 消息正文的长度是L的,可以包含一个可选的信QӞZ安全性目的)和内宏V?/P>
h意,Jxta 消息的定义非常松散。考虑到我们日怸般都是在可靠的、宽带的 TCP/IP |络上操作,q样做的必要性ƈ不是立即可以明了的。但 Jxta 消息的格式必L灉|的、善于适应新环境的Q因为它可能要在所有种cȝ|络上实玎ͼ而不只是?TCP/IP 上。设惛_一个支?256 字节数据包的不可靠传输的|络Q象传统的基于数据包的无U网l)上的一?Jxta 实现Q?zhn)׃?x)?Jxta 消息的简单定义如何自己适应诸如q样的不利环境表C赏?/P>
Z提供一个标准的、语法上易分析的、通用的编码机ӞJxta 消息目前采用 XML 文档格式。Jxta 利用?XML 的普遍可讉K性和易用、易~程的特点,q意味着 Jxta 可以用大多数~程语言在大多数q_上很Ҏ(gu)地实??只要 XML 语法分析器和生成库在那里是可用的。然而,Jxta 本n的设计却使其消息代码的编写不依赖?XML 的用。虽然现在不太可能,?Jxta C在规范的未来版本中包含(或要求)Z?XML 的消息是完全可能的?BR> q告 互操作性的基础QJxta 协议 例如Q一个简单的 PDAQ? 位处理器Q基?C 语言~程Q就可以是一个运行在Z数据包的无线|络上的 Jxta 对等机,它可与同一对等l内的各U系l,?PC 服务器到大型机,q行交互。如果这些对{机׃n一个公ql(传送)q正使用 Jxta 协议和消息格式进行通信Q这是可以做到的?/P>
Sun 已ؓ(f) Jxta 提供了初步的 Java 语言实现。Jxta C现在拥有q个参考实现。这个参考实Cؓ(f)那些想立M?Jxta ?Java E序员把事情变简单了。而如果?zhn)正在?Java q_上实?JxtaQ那么理解这些协议就是非帔R要的。表 2 要描qC Jxta 协议的核心集Q涵盖了发现Q对{机如何扑ֈҎ(gu)Q、广告(对等机如何让别的对等Z解对{组、管道等信息Q、通过道q行的通信和对{组成员资格的处理。下面的所有协议都是徏立在传送器上的 XML 消息交换的基上的。同样地Q它们可以用几乎所有的~程语言在几乎所有^C实现?BR> ?2. Jxta 核心协议
毫无疑问Q对{网l是由彼此相互通信的对{机l成的。从Ҏ(gu)上说Q整个连l着的宇宙就是一个大?P2P pȝ。但׃目前q通性和可用带宽的限Ӟ把整个因特网当作一个巨?P2P |络来用是不切实际的。相反,一些划分是必要的?/P>
对等l内的对{机可以׃n使用 Jxta 服务。事实上Q对{机加入一个组可能主要是ؓ(f)了用该l内可用的服务。称?I>核心服务的一l服务对 Jxta |络的基本运转是必不可少的。我们已l看C一个核心服务的实例 ?成员资格服务。表 1 展示?1.0 ?Jxta 规范中包含的核心服务?
服务名称
描述
道
对等Z间通信的主要方式;Z息传输提供单向、异步的道的抽象?/TD>
成员资格
判断哪个对等机属于哪个对{组Q处理对{组内对{机的加入和退出?/TD>
讉K
一U安全性服务,用于控制对对{组内服务和资源的访问;对等l的一U安全性管理器?/TD>
发现
对等用来发现Ҏ(gu)、其它对{组的存在、管道、服务等{的一U方式?/TD>
解析器(ResolverQ?/TD>
允许对等机通过引用QJxta 行话UC?I>q告Q间接地引用Ҏ(gu)Q对{组、管道或服务Q在q行期间Q解析器把引用捆l到实现上?/TD>
正如 Jxta 规范定义Q在对等Z间传输数据、文件、信息、代码或多媒体内容的一U方式是通过逻辑道。Jxta 道用于在对{机之间发送消息(可带L内容Q?/P>
Jxta 消息是通过道从一个对{机传送到另一个对{机的数据束。这里,Jxta 规范再一ơ尽可能C自己普遍适应Q以免不l意间在消息的定义中引入M依赖于实现的{略。消息被定义为由信封和正文组成的L大小的束。信是标准格式Q它包括Q?/P>
q告有点像是消息的“堂兄弟”。Jxta q告也采?XML 文档格式。广告的内容描述了诸如对{机、对{组、管道或服务{?Jxta lg实例的属性。例如,可以讉K另一个对{机的广告的对等机可以设法直接连到该对等ZQ可以访问一个对{组的广告的对等机可以通过q告加入对等l。目前的因特|中与广告相似的东西是域名和 Web 站点?DNS U录。Jxta 规范没有规定如何创徏、传播或销毁广告?
互操作性的另一个关键是q样一个事实:(x)核心 Jxta 对等交互操作模型被完全表CZؓ(f)在底层网l上传输的一套简单协议。换句话_(d)既然协议和消息格式是定义完好的,那么Z Jxta 的系l间的互操作性完全可以在导线一U上辑ֈ?/P>
协议名称
描述
对等发现协议
用来发现来自对等l内其它对等机的q告Q有助于发现对等机、对{组、管道和服务?/TD>
对等解析器协?/TD>
对等机用它来向另一个对{机发送搜索查询以定位对等机、对{组、服务或道?/TD>
对等成员资格协议
对等机用它来加入或退Z个对{组?/TD>
对等信息协议
对等机用它来获得别的对等机的状态?/TD>
道l定协议
对等机用它来把自q定到道端点?/TD>
端点路由协议
对等机用它来h有关到另一对等机的路由信息?/TD>
Jxta 规范不要求对{机实现上述所有协议。Q一特定的对{机只须实现那些实际要用到的协议?/P>
Z Jxta 的系l的一些有的属?/SPAN> 有“电(sh)子心跳”的M东西都可以成Z?Jxta 对等?/SPAN> ?P2P |络上,q分化的讑֤需?I>对等代理?/I>。这个代理h可以代表该简化设备(或多个简化设备)执行发现、广告和通信。代理h的位|可以被性固定在化设备。这P在代理h的帮助下Q简化设备就可以成ؓ(f) Jxta |络上完全合格的对等机。例如,一个被l在一只v龟n上ƈ以无U方式发送出带有位置信息?Jxta 消息?GPS 定位器,可以成?Jxta |络上的一个对{机?/P>
不确定拓扑结构的|络中的序 ?Jxta 世界里,一个特定的资源h不会(x)在几分钟、几时或甚臛_天内q回Q事实上Q它可能Ҏ(gu)׃?x)返回。另外,h同一资源的世界各地的Z很可能得到的是来自完全不同的服务器的资源副本。这引起了一个问题:(x)不确定性系l有什么好处呢Q?/P>
来自 grassroots 软g革命的灵?/SPAN> 在完的 Jxta 世界中,我们在不确定性网l上执行异步h。?zhn)觉得q个概念古怪吗Q?/P>
让我们用一个示例来阐明。设想一个在Z Jxta ?P2P |络上运行的Z|络的音乐请求服务。对{机提交了几个对音乐文g的请求ƈ在一D|间后核查对等l中的音乐请求服务是否找Cq些文g。当我们在一D|间后L查音乐请求服务时Q所h的一些文件已l被扑ֈQ但其它的却无法定位。服务对那些文g的响应是Q音乐的选择和可用性在不断地变化;L(fng)后重试?zhn)的请求。这是一个可接受的不定的结果:(x)虽然服务未能扑ֈ一个文Ӟ但如果我们稍后再ơ提交同一个请求,那个文g或许是可用的了Q因Z我们想要的那个文g的对{机q时或许在线了?/P>
当放到这样一个具体的上下文中的时候,不确定性网l的概念看v来就不再那么陌生了。事实上Q我们多Ch大概都会(x)接受q用这样一个音乐请求服务。我们中的一些h甚至愿意L(fng)自动代理支付一点费用,q种代理?x)持l监视所选文件的可用性,然后为我们取来ƈ存储它们的副本。这?P2P 计算的巨大魅力之一Q均衡ƈ׃n全世界的所有连接着的资源的能力 ?但愿是以有秩序的和文明的方式?
该讲的都讲完了,但最先几个在商业上取得突破的 Jxta/P2P 应用大概q是?x)因把确定性和同步性作为它们的主要特征而引以ؓ(f)豪。这是一个必要的q渡Q因为用L(fng)?fn)惯和市场取向不会(x)在一夜之间改??如果没有强制原因的话来不会(x)改变。新?P2P 模型慢慢地现Qv先可能会(x)是以混合的Ş式出现。一个当前示例:(x)Z边缘传播Qedge-propagation-basedQ的|络高速缓存技术,比如 AkamaiQ是目前定性的、集中式?Web 上的规范。这些技术用 P2P 风格的概念在集中式服务器的世界里实现优化的内容传送?/P>
C会(x)影响和棘手的知识产权问题 在大众和商业新闻中已l写了很多。Sun 不在?Jxta 实现中规定策略的军_使得它可以自由地前进q扫除了q些争论 ?把责L在了那些在内容分发上率先采用 Jxta 技术的先锋们的肩上。然而,在这个舞CQ?Jxta 技术基于社区的发展使它有潜力全局控制 IPQ知识权)所有者和公众之间的良好^衡。开攄 Jxta C可以作ؓ(f)一个论坛,IPQ知识权)所有者和技术专家可在此论坛解决它们之间的分歧?/P>
透视 JxtaQ它如何?.Net ?Jini 较量 要确信,Jxta Z XML 的消息传递与微YQMicrosoftQ的 .Net ?SOAP 技术是cM的。但q种比较的基比较薄弱。随着来多的第三方协议使用?XMLQ很昄只用 XML 作ؓ(f)消息格式对于实际的网l技术ƈ不能说明什么。把高别的、策略丰富的、基构造基?Web 服务?.Net 与本质上低别的、基本的、策略中立的 Jxta 相比是g毫无意义的事? Jxta 工程?Jini 工程也是Ҏ(gu)不同的。它们俩在较高别的交互作用斚w有一些类似的地方Q都能够实现|络上真正的分布式计。然而,cM处也在那里嘎然而止。因为真正的分布式计仍只是未来的一个设惻I所以很Ҏ(gu)低估 Jxta ?Jini 工程之间的区??管事实是我们在比较更多已徏立的客户机/服务器或多层服务器技术的实现时不?x)做同样的事?
两者在战略上的明显不同是:(x)Jxta 在一开始就是以完全互操作性技术(Mq_QQ何编E语aQQ何厂商)的面貌出现的。Sun 是唯一投n于该C的公司。Jini 是以 Java Z心的技术,作ؓ(f)一U战略,Sun 把它集成ƈ应用在将来提供的产品中。Sun 对 Jini 的发展保持一定程度的控制?/P>
没有 Java q_Q代码的灉|性,RMI {等Q的支持QJini 的实用性将受到限制Q另一斚wQJxta 则完全独立于 Java 的装饰。从另一个角度看QSun 仅仅定位在促q?Jxta 的成长,?Sun ?Jini 的成长之间则是有着较多的利宛_pR随着旉的推U,Jini 成?Jxta 的“愈发内向的堂兄弟”;它将作ؓ(f)启用的嵌入技术被应用、部|到许多产品中。Jxta 的命q,在另一斚wQ将取决于参与此Ҏ(gu)术的开攄区的成员们的热情和创造力?/P>
Jxta 的多功能?/SPAN> 当然Q可能的应用是无Ih的Q其中的很多q有待开发或甚至有待构思。在后面的文章中Q我们将安装 Jxta q试验它的命令行 shellQ创 shell 的定制扩展,?Jxta |络设计 P2P 应用?BR>
既然(zhn)已l对 Jxta q_理论上的构g有了一个基本理解,我们来讨论一下作?Jxta 设计l果的一些有的属性?/P>
从理Z_(d)有文本字W串生成能力的最讑֤都可以加入(虽然q不是在每个 P2P 应用中都有必要)?Jxta |络中。这是怎么成ؓ(f)可能的呢Q?/P>
典型 Jxta |络另一个迷人的斚w是它固有的不定的拓扑/响应l构。计机用户通常都习(fn)惯于本质上确定的、同步的计算机系l,q认是一U标准结构。例如,当我们的览器发?Web 面?一?URL hӞ我们期望输出立刻׃(x)出现。我们还期望世界上的每个人都可以使用同一?URL 从同一?Web 服务器检索同一个页面?/P>
我们只要看看?Napster ?Gnutella q样的流?P2P pȝ可以找到答案。下面是它们的一些额外的优势特征Q它们同步性和定性的丧失变得值得Q:(x)
我们先前使用的短??有秩序的和文明的 ?是前沿计和当代C会(x)学的交汇处。事实上Q短语“有U序的和文明的”在不同的文化圈里可有不同的解释Q或者甚臛_单个文化圈的不同环境中也有不同解释。这已经在版权敏感的知识产权QIPQ管理的世界里引起了Ȁ烈的争议和辩论。由于有关集团的优势以及(qing)内容分发上根p固的市场惯例Q这一争论不会(x)很快qx?/P>
自从 Jxta 被介l后Q它已经被拿来和每个可想象得到的|络技术进行比较。即使是有名望的商业杂志也不l意地忽略了q一创新Q因为它昄不和主要竞争Ҏ(gu)大肆宣传的旗C品较量。Jxta 工程是一只独一无二“怪兽??在讨论它的时候不?x)有M现成的参照物。因此,必须独立地对它进行评仗?/P>
׃提供基础机制而不规定{略QJxta 基础对于很多 P2P 应用都是可用的和有h(hun)值的。下面是另外三个普通的个案研究Q?/P>
JxtaQ名UC包含什么意义?
Jxta 不只是以字母 J 开头代?Java ?Jini 名称的、由四个首字母组成的首字母羃写词。事实上Q它代表 Juxtapose 工程?/I> Juxtapose 漂亮而优地描绘了未来完整的 P2P 计算世界。据我们所知,企业内部|(intranetQ或因特|(InternetQ中现有的客hQ服务器计算永远不会(x)消失或被取代。相反,Jxta 技术将作ؓ(f)一U补充,与这些技术共存(因此?juxtaposition q列Qƈl最l用户带来超g验。因特网和企业内部网的用户将能够从网l的q两UŞ式中L(fng)?BR>
关于 Jxta 标识W?BR>从潜力上Ԍ对等l或许可以跟整个联系着的宇宙一样大。在q么大的名称I间中ؓ(f)M事物q行唯一的命名都是一个挑战。ؓ(f)了应对这个问题,Jxta l?Jxta lg的每个可讑֮地址的实例都分配了一个内部标识符。这U标识是通过一?UUID q行的,UUID 是用能够确保在旉和空间上都有很高概率的唯一性的法产生?64 字节的数字?!-- probabilistically -->Jxta 标识W是 URNQ统一资源名称Q格式的Qƈ被嵌入到q告中供内部使用。目前定义了四种标识W类型,用于标识对等l、对{机、管道和代码Q数据(code/dataQ(写ؓ(f) codatQ?
]]>