P2P模式(JXTA对P2P的应用)--转载米花网
P2P工作原理与工作方式
P2P的发展可以被划分为三代:第一代是以Napster为代表的、还用中央服务器管理的P2P,这一代的P2P生命力十分脆弱——只要关闭服务器,网络就死了;第二代分布式P2P没有中央服务器,但是速度太慢;而第三代为混合型,采用分布服务器。目前我国流行的BT?变态下载?和电驴就是属于这类。
说到P2P,就不能不提BT,这个被人戏称为“变态”的词几乎在大多数人感觉中与P2P成了对等的一组概念,而它也将P2P技术发展到了近乎完美的地步。实际上BitTorrent(中文全称比特流,简称BT)原先是指是一个多点下载的P2P软件。它不象FTP那样只有一个发送源,BT有多个发送点,当你在下载时,同时也在上传,使大家都处在同步传送的状态。应该说,BT是当今P2P最为成功的一个应用。
如果解释一下的话,BT首先在上传者端把一个文件分成了多个部分,客户端甲在服务器随机下载了第N部分,客户端乙在服务器随机下载了第M部分。这样甲的BT就会根据情况到乙的电脑上去拿乙已经下载好的第M部分,乙的BT就会根据情况去到甲的电脑上去拿甲已经下载好的第N部分。
有一句话可以作为BT最为形象的解释就是:“我为人人,人人为我”。现在看来,没有贡献怎么会有获取?这大概最可以概括BT下载传输的精髓。工具软件BTJoy,将这一技术以软件的形式完美起来,这个诞生仅有一年的软件已经迅速热遍了整个网络——对于BT下载的爱好者来说,120G的硬盘都可以被迅速塞满!
?P2P给互联网的分布、共享精神带来了无限的遐想,有观点认为至少有100种应用能被开发出来,但从目前的应用来看,P2P的威力还主要体现在大范围的共享、搜索的优势上。在这方面主要引发了,或者是说更好的解决网络上四大类型的应用:对等计算、协同工作、搜索引擎、文件交换。
?1、对等计算
?通过众多计算机来完成超级计算机的功能,一直是科学家梦寐以求的事情。采用P2P技术的对等计算,正是把网络中的众多计算机暂时不用的计算能力连结起来,使用积累的能力执行超级计算机的任务。任何需要大量数据处理的行业都可从对等计算中获利,如天气预报、动画制作、基因组的研究等,有了对等计算之后,就不再需要昂贵的超级计算机了。在硅谷现在有许多公司正在投入对等计算的开发,如PopularPower,Centrata,UnitedDevices,Entropia等,并获得了巨大的风险资金。Intel也利用对等计算技术来设计其CPU,并为其节省极大的费用,同时对等计算的发展是以PC机资源的有效利用为根本出发点的,自然也极力受到Intel的极力推崇。从本质而言,对等计算就是网络上CPU资源的共享。
?2、协同工作
?公司机构的日益分散,给员工和客户提供轻松、方便的消息和协作的工具,变得日益重要。网络的出现,使协同工作成为可能。但传统的WEB方式实现,给服务器带来了极大的负担,造成了昂贵的成本支出。P2P技术的出现,使得互联网上任意两台PC都可建立实时的联系,建立了这样一个安全、共享的虚拟空间,人们可以进行各种各样的活动,这些活动可以是同时进行,也可以交互进行。P2P技术可以帮助企业和关键客户,以及合作伙伴之间建立起一种安全的网上工作联系方式,因此基于P2P技术的协同工作也受到了极大的重视,Lotous公司的创始人奥奇更是获得了6000万美元的风险投资,来开发其协同工作产品Groove。
?3、搜索引擎
?P2P技术的另一个优势是开发出强大的搜索工具。P2P技术使用户能够深度搜索文档,而且这种搜索无需通过Web服务器,也可以不受信息文档格式和宿主设备的限制,可达到传统目录式搜索引擎(只能搜索到20%-30%的网络资源)无可比拟的深度(理论上将包括网络上的所有开放的信息资源)。以P2P技术发展的另一先锋Gnutella进行的搜索为例:一台PC上的Gnutella软件可将用户的搜索请求同时发给网络上另外10台PC,如果搜索请求未得到满足,这10台PC中的每一台都会把该搜索请求转发给另外10台PC,这样,搜索范围将在几秒钟内以几何级数增长,几分钟内就可搜遍几百万台PC上的信息资源。可以说,P2P为互联网的信息搜索提供了全新的解决之道。著名的搜索引擎公司Google也宣称要采用P2P技术来改进其搜索引擎,一家名为infrasearch的新建公司也因为开发P2P技术的搜索引擎而获得了一笔巨额风险投资。
?4、文件交换
?可以说文件交换的需求直接引发了P2P技术热潮。在传统的WEB方式中,要实现文件交换需要服务器的大力参与,通过将文件上传到某个特定的网站,用户再到某个网站搜索需要的文件,然后下载,这种方式的不便之处不言而喻。电子邮件是方便了个人间文件传递问题,却没法解决大范围的交换。这也是WEB的重要缺陷,Napster就是在情况下横空出世,抓住人们对MP3喜欢的需求,Napster的MP3交换直接引发了网络的P2P技术革命。
?文件交换的需求也很轻松地延伸到了信息的交换,在线拍卖也被赋予了新的形式,大家也不必要到拍卖网站登记要卖的商品了,在自家的硬盘上建个商店就可以了。由此又可以延伸到,一切中介网站都会被替代。
?当然以上四类型应用决不是P2P仅有的应用,被认为至少还有100种应用等着去开发。与B2C、B2B、C2C、C2B等一些概念不同,P2P是技术,甚至技术思想的革命。更重要的是,P2P技术将实现互联网的大部分潜力,将互联网从一个基于文件的网页和电子邮件网络转变成一个动态的、颗粒状网络,在网络中,特定的信息组件可被有效地放置和分享。网络与计算机将不再有什么差别了,大家还记得这个口号吧:网络就是计算机,也许就是武侠小说的最高境界:天人合一。
5、即时通讯。
所谓即时通讯,其实指的就是诸如QQ、旺旺等被我们称作在线聊天的软件,从某种意义上说,由于版权的限制,即时通讯应用将超过文件共享应用,成为P2P的第一大应用。在即时讯息领域,AOL和微软、Yahoo一直有比较激烈的争斗,当然国内还是QQ一家的天下。为什么即时通讯软件会那么红火?与IRC比较,即时通讯软件可以以极其简单的方法实现聊天;与WEB聊天室比较,即时通讯软件可以随时知晓对方在线与否,使交流的可能性最大。
目前很多游戏也开始向P2P方向发展,本文在下面章节也提供一套基于P2P平台的游戏框架。但是在游戏不同于聊天软件,特别是对战游戏,它的即时性远远高于通讯软件。在聊天时一方可以等待对方一段时间,甚至当对方不在线的时候也可以发送信息,但是游戏必须在一定的时间范围内接受到应该收到的消息,否则游戏就没法玩起来。关于如何提高P2P平台下响应时间,也将在下文有介绍。
P2P网络架构优缺点
在客户/服务器体系中,客户请求服务,服务器提供服务。在当今的Internet上,存在在大量的服务器–Web服务器,邮件服务器,FTP服务器等等。客户/服务器体系是中央化体系的一个例子,整个的网络都依靠中央的节点和命名的服务器来提供服务。如果没有服务器,网络将是毫无意义的;如果没有它们,Web浏览器如何工作?不论客户端或者浏览器的数目有多少,网络只能在服务器存在的前提下才有意义。
和客户/服务器体系相似,P2P也是一个分布的计算模型,但是有一个很大的不同,P2P是一个非中央化的体系,在网络中并没有客户或者服务器的状态区分。网络中的每个实体都是同等的,有着同样的状态,这意味着一个实体可以请求一个服务(客户端的特性)或者提供一个服务(服务器的特性)。展示的是一个P2P网络。
虽然每个节点在网络中有着同等的状态,不过它们并不要求都有着同样的物理性能。一个P2P网络可以包含有不同性能的节点,由移动设备到大型机。对于一个移动设备来说,可能由于自身的限制,不能作为服务器,但从网络方面来说,并没有这个限制。
两个网络模型都有着各自的优点和缺点。由图中的客户/服务器网络你可以看到,当网络增大时(即越来越多的客户加入),中央服务器的压力就越大。当加多一个客户,中央节点的性能就会弱化;而它的失效将会导致整个网络的瘫痪。
对于P2P网络来说,情况就完全不一样了。由于网络中的每个实体(或者节点)都是积极的参与者,每个节点都会为网络提供一些资源,例如存储空间或者CPU。当越来越多的节点加入网络时,网络的性能将会增长。因此,当网络增大时,它的性能也会增强。你将不会碰到客户/服务器体系中的扩展问题。
P2P网络和客户/服务器模型还有一个很大的不同是:即使只有一个节点是活跃的,P2P网络也被认为是活跃的。只有在没有任何节点时,P2P网络才是不可用的。
不过,金无足赤,虽然P2P网络有着这些的优点,但你也要付出一些代价的。首先,管理这样一个网络可能是一个噩梦,而在客户/服务器网络中,你只需要管理中央的节点。因此,无论在安全策略和备份策略方面,P2P网络都要复杂一些。第二,P2P协议比传统的客户/服务器协议需要更多的“交互”,例如当节点加入或者退出网络。这些方面都会对性能产生一些影响。
JXTA介绍
JXTA是Juxtapose(并列)的缩写。JXTA最早起源于2000年的夏天,现在大家把JXTA看成是P2P的平台,JXTA的目标是要解决几个技术与商业上的难题。第一是解决众多P2P系统互不相通的问题。2000年,是P2P突飞猛进的高潮年,但高潮背后却是许多小公司用自己的封闭系统试图在Internet上圈一块地。Sun认为,只有互通才能真正发挥出P2P的优势,就好像IM(InstantMessaging),能互连的人越多,越有价值。所以Sun决定出面发布一个平台,使所有P2P系统都能连接起来,只有Sun这样位置中立、但在技术上有雄存实力被大家认可的公司才有希望做成这一平台。Jxta工程是按社区方式运作的,旨在为对等应用构建实用应用程序底层。虽然Jxta的参考实现是用Java语言写的,但事实上它对当今现有的任何语言,操作系统(OS)或平台都会欣然接纳—而且,更重要的是,对于人们现在想都没想过的技术,它也做好了准备。目前Jxta的最高版本是2.3.2.
JXTA对P2P的作用与影响
JXTA的一个目的是寻找一套数量最少、概念最简单的系统构成的“积木“。如果成功,这几块积木就会是今后大家构架信息系统的基本模块,从而帮助人们摆脱像Windows或TCP/IP这样的传统软件带来的包袱。JXTA,它是由一系列网络协议构成的,用任何语言都可以实现,并不只限于Java,只有彻底独立于操作系统、网络传输技术以及程序设计语言,才能真正达到了跨平台,这样的技术,也最容易受到业界的认同。
JXTA技术提供了基础性的机制解决当前分布计算应用中面临的问题,实现新一代统一、安全、互操作以及异构的应用。目前它支持基于Java技术的平台和系统。而将来JATX技术将不受到内存的限制而支持更多小型移动设备。JXTA通过Java技术和XML数据表达的结合,提供了强大的功能使得垂直应用得以交互,并且可以克服目前P2P软件中的限制。同时,通过小型、简单、便于开发的构造模块,JXTA将使开发者从建立各自框架的复杂工作得以解放,可以潜心关注于建设各类新颖、创造性的、分布式计算应用。
JXTA的协议
有六个协议构成了JXTA的核心,JXTA通过这六个协议来完成Peer之间的通信,彼此之间的资源的发布和发现,信息的传递和路由,协议本身并不是应用程序,需要添加更多的代码来开发有用的应用,协议隐藏了很多细节,这样使得编写JXTA应用程序比从空白开发P2P应用要容易得多。
1、对等机发现协议PeerDiscoveryProtocol(PDP):主要用来发布自己的广告信息,并且从其他Peer处获得广告。PDP允许一个Peer发现其他Peer的广告(包括Peer广告、对等组广告、服务广告,或者是管道广告)。该协议通过指定一种广告类型(如Peer、对等组)、一个XML标签名、一个匹配这个XML标签所表示数据的字符串来定义查询。它使用PeerResolverProtocol来发送和传播搜索广告的请求。
2、管道绑定协议PipeBindingProtocol(PBP):允许Peer之间建立虚拟的通信通道。
该协议首要关注的是通过Peer端点路由协议提供的路由连接Peer。它使用PeerResolverProtocol来发送和传播搜索广告的请求。
3、对等机信息协议PeerInformationProtocol(PIP):用来获得其他Peer的状态信息,包括更新时间、状态等等。该协议有时被用做ping命令,有时被用来获得一个Peer的基本状态信息,PIP消息的正文是自由格式的,它允许询问特定的Peer信息。此外,这种能力可以被扩展以提供控制能力,它使用PeerResolverProtocol来发送和传播搜索广告的请求。
4、对等机解析协议PeerResolverProtocol(PRP):允许Peer发送更一般的请求,并可以接收到该请求的回应;同时可以将请求分发到组内的一个或者多个匹配的处理器,Peer解析协议是一个基础通信协议,它按照一种请求/响应格式来进行,要使用这个协议,需要提供一个查询的Peer和一个包含能被目标Peer理解的XML请求消息,该协议被用来支持JXTA中的其他协议(PDP、PBP和PIP),而且允许传播查询,例如,如果一个Peer收到一个查询并且不知道答案,解析协议就会将该查询发送给别的Peer。
5、端点路由协议PeerEndpointProtocol(PEP):通过该协议Peer以发送消息的形式获得一条路由路径。它使用Peer间的网关来建立一条包含一个或多个适合建立管道的管道协议组成的通路。管道绑定协议借助此Peer列表来建立Peer间的路由。一般情况下传统的路由器和DNS服务器会因为防火墙、代理服务器和NAT设备等原因而无法建立连接,而端点路由协议通过寻找网关来穿越诸如防火墙等障碍来建立连接。端点路由协议还可以同时帮助相互不支持对方使用协议的Peer进行通信。例如,如果你连接支持TCP的Peer-A和只支持HTTP的Peer-B,端点路由协议既可以选择一个可以支持此传输的网关,又可以选择多个并且相互协议兼容的一组网关。
6、集合点协议RendezvousProtocol(RVP):通过该协议Peer可以对一个服务订阅或者被订阅。集合点协议负责在JXTA对等组内传播消息,它为Peer在组内接收和发送消息并且控制消息如何传播定义了一个基本的协议。
从编写P2P应用程序的角度而言,可以简单地划分上述协议的主要用途:
*PeerDiscovery—-搜索资源
*PeerResolver—-一般查询服务
*PeerInformation—-监控
*PipeBinding—-可寻址的消息传递
*Rendezvous—-消息传播
*PeerEndpoint—-路由
JXTA工作原理
对等(P2P)网络与传统的客户机/服务器或多层服务器网络不同,对等网络中的对等机是彼此直接通信的。这种通信无需依赖集中式服务器或资源就可完成。在P2P网络中,通过对等机之间的交互操作就可以完成工作,共享信息。通过创建有潜力展示非常高的可用性和容错能力的计算资源网络,P2P体系结构使真正的分布式计算成为可能。
传统的客户机/服务器和多层次体系结构已经是业界的识途老马,而采用P2P体系结构的系统则还只是初生牛犊。Jxta工程是Sun为了向构建跨平台、跨操作系统(OS)和跨编程语言的P2P应用提供实用应用程序底层而发动的突袭。这项工程现在是开放源代码的,Sun也参与其中,可以参阅http://www.jxta.org官方网站以获取关于Jxta社区的信息。
Jxta工程的组件是认真的设计分工的产物。它们为泛型P2P网络提供最小需求,去除了所有特定于策略的逻辑和组件。这样,就仅剩下几乎所有的应用程序都能使用的构件要素,不考虑目标用户和特定实现。在接下来的几个月和几年里,Jxta核心社区的一个主要任务就是确保这种普遍适用性仍然是真实的。您可以争辩说,P2P最引人注目的应用程序尚未开发,那么如果Jxta把特定于策略或实现的细节嵌入其基础构造层后就完事的话,那么这些尚未想像到的应用程序就可能永远不会和这个平台一起工作。换句话说,Jxta组件没有强加一些不必要的策略,也没有硬性规定特定的应用操作模型,使得简单地构造P2P应用成为可能,也更方便。