一、概述 美国Sun公司自从1995年向世界推出了Java语言以来,每年都会在Java领域里推出新的技术,从JavaCard、J2ME到J2EE、JINI、JavaTV,推动了Java技术的发展和应用。在最近几次的旧金山的JavaOne会议中,JXTA是该公司向业界推出的较新技术。该技术的目的是为P2P的网络应用开发提供一个统一的平台,而且为了鼓励和支持该技术的发展,JXTA项目采用了开放源码的方式,因此吸引了大量业界人士参与到JXTA技术的研究与应用当中,JXTA Community(www.jxta.org)就是人气很旺的一个Java技术研究开发的网站。
JXTA最早起源于2000年的夏天,现在大家把JXTA看成是P2P的平台,JXTA的目标是要解决几个技术与商业上的难题。第一是解决众多P2P系统互不相通的问题。2000年,是P2P突飞猛进的高潮年,但高潮背后却是许多小公司用自己的封闭系统试图在Internet上圈一块地。Sun认为,只有互通才能真正发挥出P2P的优势,就好像IM(Instant Messaging),能互连的人越多,越有价值。所以Sun决定出面发布一个平台,使所有P2P系统都能连接起来,只有Sun这样位置中立、但在技术上有雄存实力被大家认可的公司才有希望做成这一平台。
JXTA的另外一个目的就是找寻一套数量最少、概念最简单的系统构成的“积木”。如果成功,这几块积木就会是今后大家构架信息系统的基本模块,从而帮助人们摆脱像Windows或TCP/IP这样的传统软件带来的包袱。Java、Jini和JXTA像是J的三部曲,Java取自著名咖啡产地名,Jini是genie(精灵) 的谐音,而JXTA则是Juxtapose的缩写。当时BillJoy用grep把所有J打头的英文词找出来,juxtapose跃然纸上,很是巧妙。既表现了P2P或肩并肩的意义,又说明JXTA不局限于P2P。但JXTA与众不同,它是由一系列网络协议构成的,用任何语言都可以实现,并不只限于Java,只有彻底独立于操作系统、网络传输技术以及程序设计语言,才真正达到了跨平台,而这样的技术,最容易受到业界的认同。
JXTA是项目创始人、Sun首席科学家BillJoy二十多年酝酿的结晶,“JXTA技术是网络编程和计算的平台,用以解决现代分布计算尤其是点对点(P2P)计算中出现的问题。”JXTA研究项目,将提供使用户更便捷地访问连接在互联网上的个人电脑资源的新框架,从而进一步拓展互联网的空间。同时JXTA也是Sun的ONE互联网战略的延续,并且将更积极的姿态与Microsoft的.Net战略和Hailstorm计划一争高低。Joy指出,JXTA可能是Sun One平台最简单的一部分,而不是打算将它变成象微软的.Net那样复杂的东西,而且JXTA也将是开放源代码的团体;有别于而微软的Passport和Hailstorm技术都是申请专利的专有技术,Sun希望通过公开JXTA源代码的方式,成为微软最有力的竞争对手,在公开源代码的领域中,Linux和Apache是卓越的成功典范,Sun也希望JXTA能铸造新的成功。
JXTA技术提供了基础性的机制解决当前分布计算应用中面临的问题,实现新一代统一、安全、互操作以及异构的应用。目前它支持基于Java技术的平台和系统。而将来JATX技术将不受到内存的限制而支持更多小型移动设备。JXTA通过Java技术和XML数据表达的结合,提供了强大的功能使得垂直应用得以交互,并且可以克服目前P2P软件中的限制。同时,通过小型、简单、便于开发的构造模块,JXTA将使开发者从建立各自框架的复杂工作得以解放,可以潜心关注于建设各类新颖、创造性的、分布式计算应用。
二、JXTA 的设计目标及有关概念 一)P2P技术
P2P即Peer to Peer,称为对等连接或对等网络,P2P技术主要指由硬件形成连接后的信息控制技术,其代表形式是软件;P2P并不是一个新的概念,因特网上的许多核心协议本身就是P2P的应用程序,因特网的发展过程也说明了这一点,我们可以通过下述特性来描述P2P:
Peer知道其他Peer的存在。
Peer在一个虚拟的网络中运行。
Peer同时具有Client和Server的特点。
多个Peer可以组成为一个Peer组。
从因特网的发展来看,目前已经完全有可能开发新的P2P应用程序来补充和取代现有的集中式应用程序,文件共享程序和聊天程序的成功已经吸引了许多程序员加入P2P程序的开发。而且随着技术的发展,P2P所面临的安全、控制和网络使用的问题将逐步解决。P2P系统可以提供如下功能:
Peer的独立控制能力----用户将变得非常强大,可以创建自己的组和虚拟网络,而且可以非常容易地发布自己的资源。
可靠性----P2P系统是任何人都可以获得的可靠系统。
扩展性----P2P系统的用户数量可以急剧膨胀,可以与最大的集中式系统媲美。
性能----各种资源之间可以协同工作来有效地解决问题。
P2P是一种基于互联网环境的新的应用型技术,主要为软件技术,P2P网络应用发展可能要涉及到4个方面关键技术:
1) 对于互联网上众多计算机,P2P应用比其他应用要更多考虑那些低端PC的互联,它们不具备服务器那样强的联网能力,同时对于以往的P2P应用技术,现在的硬件环境已经更为复杂,这样在通信基础方面,P2P必须提供在现有硬件逻辑和底层通信协议上的端到端定位(寻址)和握手技术,建立稳定的连接。涉及的技术有IP地址解析、NAT路由及防火墙。
2) 在应用层面上,如果两个Peer分别代表两家不同的公司,而且它们已经通过互联网建立连接,那么一方的信息就必须为另一方所识别,所以当前互联网上关于数据描述和交换的协议,如XML、SOAP、UDDI等都是一个完善的P2P软件所要考虑的。
3) 有通信就要有安全保障,加密技术是必须要考虑的。
4) 其他需考虑的有如何设置中心服务器,如何控制网络规模等。
与P2P相关技术,有许多其他的技术被称做P2P,或者与P2P相关,或者可以被当作P2P使用,主要是以下几方面内容:
JINI技术;
软件代理(Agent)技术;
JXTA的竞争者(Gnutella和Freenet等);
Web Services技术。
二)JXTA设计目标及层次结构
1、JXTA设计目标
首先,JXTA是为了构建P2P网络而制订的一组协议,是处理构建P2P网络所碰到的问题的解决方法,JXTA标准协议规范介绍如下:
“JXTA由六个协议组成,这些协议是专为特定的、分布式的、对等的网络计算而设计的。使用这些协议,Peer可以互相合作来建立自我组织、自我管理的对等组,而不必关心它们在网络中所处的位置(在网络边缘或者防火墙的后面),并且也不需要集中的管理机构。”
因此JXTA的核心是六个协议,其次,JXTA是P2P应用程序开发的运行平台;目前JXTA首先推出了基于Java的参考实现,提供了支持六个协议的Java API,JXTA还将推出包括C语言在内的其他编程语言的API,JXTA在设计时有如下几个目标:
操作系统无关
语言无关
为P2P应用提供服务和基础
从本质上讲,JXTA的目标是希望在任何设备,从台式机到PDA、汽车、洗衣机等设备都可以支持P2P编程。这里有几个概念上的目标,它们包括:
使用组来组织Peer并且在组内提供服务和应用的环境。
组可以使用认证和验证方式来控制组内的访问权限。
通过网络来发布关于Peer和网络资源的信息。
通过系统来发布各种请求。
提供一个基础平台,供Peer之间做路由和通信。在防火墙或者其他障碍后面的Peer之间的通信也是这个目标中很关键的一部分。
提供一种机制允许Peer之间可以彼此监视状态和资源。
除此之外还有一些其他目标,例如加密、支持不同的通信协议、易用性、稳定性和性能等,所有这些目标在设计JXTA协议和最初的Java API时,都被考虑到,另外,开发人员和Sun公司的管理者还考虑了以下目标:
系统应该允许任何设备直接加入到JXTA网络中去。
系统应该允许ISP对网络上的Peer进行集中管理。
系统应该支持数字产品版权的管理,例如购买的软件、音乐CD、电影等。
封装和抽象一些特定的核心功能,以便产生出商业方面的应用。
从上面列出的目标可以看出两点,首先要让企业觉得使用JXTA可以使自己对系统进行控制,原因在于大部分P2P系统没有集中式的管理,所以在应用中不受企业的欢迎;其次,对于硬件或者软件提供商来说,JXTA系统需要能够创造出利润。
根据以上这些目标,JXTA被设计成企业可以接受的、容易维护的、健壮的,并且能够满足任何P2P应用的概念。
2、JXTA的层次结构
JXTA由三层组成,如图1所示。第一层是JXTA核心层,它包含了服务所需要的核心功能;第二层是服务层,它提供了访问JXTA协议的接口;第三层是应用层,它使用服务来访问JXTA网络和JXTA提供的功能。这样的设计和一个标准的操作系统比较相似,标准的操作系统包括核心操作系统、服务和应用程序。
图1 JXTA的层次结构
各层的说明如下所示:
核心层(JXTA Core):这一层封装了最根本的东西,包括Peer、对等组、Peer发现、Peer通信、Peer监视和相关的安全原语。
服务层(JXTA Services):这一层包括对于P2P网络不是必需的、但很通用的功能,如查找、共享、索引、代码缓存和内容缓存的机制。
应用层(JXTA Application):这一层包括了应用JXTA服务开发出来的完整的P2P应用程序,例如myJXTA,JXTA-CAD等应用程序。
三)JXTA有关概念
在JXTA网络中,有一些概念是需要熟悉和理解的,它们是从JXTA协议中提出的一系列的专有名词。
1、Peer(对等机)
Peer是一个虚拟的通信点。在一台计算机或者设备上可以有很多个Peer,一个Peer并不是一个用户,因为一个用户可以有多个Peer