P2P问答式交互系统程序设计.doc_第1页
P2P问答式交互系统程序设计.doc_第2页
P2P问答式交互系统程序设计.doc_第3页
P2P问答式交互系统程序设计.doc_第4页
P2P问答式交互系统程序设计.doc_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第1章 前 言1.1 课题的研究背景近年来,P2P技术正逐渐成为技术界的一个热门话题,与之相关的商业应用也是蓬勃发展。P2P带来的一个显著的变化是改变了“内容”所在的位置,内容正在从“中心”走向“边缘”,信息的共享不再完全依赖中心服务器。互联网技术以往的发展轨迹向我们预示着,P2P这一新的网络技术思想,最终也会对于网络结构本身,网络中的信息使用和传播方式、以及人们使用互联网的方式等产生深远的影响。P2P是英文Peer-to-Peer的缩写,“Peer-to-Peer”这个名字意味着P2P网络中各个节点之间的关系是对等的,并且它们之间的联系是直接的,是无需经过任何中心节点服务器的直接联系。P2P是一项重要的分布式网络计算技术,其目的是将网络中不同的计算机连接在一起,并充分利用互联网和Web站点中任何地方的闲置资源。P2P号称自身就等同于网络。在这个网络中,存在于传统客户端/服务器(Client/Server)体系结构中的在客户端和服务器上的功能及通信的分离已经消失1。每个节点既作为客户端也作为服务器。P2P技术的实质就在于将互联网传统的“服务器/客户端”体系结构的“主/从”计算的集中管理模式引向分散对等(Peer-to-Peer)的管理模式,改变传统的“内容位于中心”模式为“内容位于边缘”的模式,将内容从中央单一节点引向网络的边缘对等节点上,从而充分利用互联网中众多终端节点所蕴涵的处理能力和潜在资源2。1.2 P2P发展现状 1.代表性研发产品和技术ICQ类的即时通信软件:两个或多个用户互相使用文字、语音或文件进行交流,快速、直接,易于同非PC网络设备(如PDA、手机)通信,而且它不依赖设备即可辨别用户。由于利用P2P技术可以弱化甚至摆脱对中央服务器的依赖,这样的通信更接近非互联网通信模式。 Farsite(Microsoft),Ocean Store类数据存储软件:用于在网络上将存储对象分散化存放,而不像现在放于专用服务器。 Napster类软件:实现数据共享,使用者可以直接从任意一台安装同类软件的PC上下载及上载文件,而不是从服务器。用户可以检索、复制共享的文件。软件自动发现最新的文件列表,发布者无需担心发布的问题。 Infrasearch、Pointera类数据搜索及查询软件:用来在P2P网中完成信息检索。Netbatch(Inte1)类协同计算软件:利用各Peer的空闲时间进行协同计算,完成超计算量的工作(如空间探测,分子生物学计算,芯片设计)。 Groove类数据或行动协同软件:是基于P2P连接的软件工具,可以建立一个安全的企业级协同工作平台(P2P网),提供供求信息链上的互动信息沟通,如货品目录、库存及发货清单,帮助使用者进行经销渠道维护、客户服务和支持。 游戏软件:事实上许多网络游戏均是P2P方式的,尤其是那些双人及多人对弈游戏。 2.P2P关键技术 P2P是一种基于互联网环境的新的应用型技术,主要是软件技术。 (1)端到端定位(寻址)和握手技术:对于互联网上众多计算机,P2P的应用应该更多考虑那些低端PC的互联,它们不具备服务器那样强的联网能力,且现在的硬件环境已更为复杂,这样便要求P2P必须提供在现有硬件逻辑和底层通信协议上的端到端定位(寻址)和握手技术,建立稳定的连接。涉及的技术有IP地址解析、NAT路由及防火墙。 (2)识别技术:在应用层面上,如果对等点已通过互联网建立连接,那么一方的信息就必须为另一方所识别。所以当前互联网上关于数据描述和交换的协议,如XML、SOAP、UDDI等都是一个完善的P2P软件所要考虑的。 (3)中心目录服务器的设置问题,控制网络规模和保证网络的鲁棒性等也是使用P2P软件要考虑的问题;而且为保障信息的安全,还必须要考虑加密技术。 (4)发现机制:P2P网络的强动态性决定了难以实现对等点间的相互快速准确定位,即发现对方。目前的主要发现机制有:基于本地缓存的发现、通过集合点或不通过集合点的本地发现、穿越防火墙的发现、基于集中点的传布方式发现等。 (5)高效的搜索策略。一是应尽量减少搜索时经过的节点数,以直接减少请求消息和处理时间;二是数据应倾向流向对其感兴趣的区域,即数据活跃区。快速搜索感兴趣的资料,与其他的对等点共享资源和服务。 3.组织标准 到目前为止,正式的P2P组织尚未成立,2000年8月间成立的P2P工作组,成员包括Intel、IBM、HP等大企业,目标集中在P2P技术的标准、安全性及可靠性等方面。但由于P2P技术本身发展迅速,它所涵盖的范围尚未确定,目前也没有统一的规范。 4.面临的挑战: (1)如何构造一个数据与地域无关的网络环境,数据不再是属于某些特定的服务器。 (2)如何构造一个网络拓扑结构,使P2P网络能自适应最佳的互联网的物理网络;快速准确的发现对等点;建立数据向请求活跃区移动、有选择性的返回数据文件或请求响应包的机制。 (3)如何建立一个管理机制,预防由恶意请求引发的拒绝服务而导致的系统崩溃;对等点的互信机制和身份鉴别机制。 (4)如何建立一个交互式、协同工作平台,实现数据更新、恢复、版本的配置管理,保证数据的一致性。 这些问题需要我们在这一领域中作更为深入地研究,将使P2P技术进一步完善3。1.3 研究P2P的意义信息(Information)、带宽(Bandwidth)、计算能力(Computing resources)是因特网的三大基础资源。但在当前,这些资源并没有被充分利用,部分原因是大多数因特网服务采用客户/服务器(Server/C1ient)模式。在信息方面,信息量在不断地膨胀,但没有一个单一的搜索引擎能够及时的定位并编目Web上不断增加的新信息,以实时方式发现有用信息正在变得更加困难。在带宽方面,虽然网络运营商不断投入资金架设宽带网络,但在目前占主导的客户端/服务器(Client/Server)应用模式下,广大用户还是仅仅使用少数几个热门的网站,比如用户搜索信息还是集中在Google、Yahoo,网上拍卖的又多集中于eBay,结果是空闲的带宽还是空闲,拥挤的地方还是拥挤,这样高负载网络的传输压力难以得到根本地缓解,新增带宽并没有获得足够使用。处理器速度越来越快,存储设备容量越来越大,使得网络终端的处理能力相当强大。但是计算还是主要集中在数据中心,这样使中心的负载几乎达到极限,而其余终端上的计算能力却大量闲置。而P2P技术改变了Internet上传统的客户端/服务器(C/S)的网络应用模式,P2P对等网络中每个节点的地位都是平等的(称为对等点peer),每个节点既充当服务器,为其他节点提供服务,同时也充当客户机,享用其它节点提供的服务。各个对等节点具有相同的责任并提供相应的资源来协同完成任务。对等点之间通过直接互连实现信息资源、处理器资源、存储资源甚至高速缓存资源等的全面共享,无需依赖集中式服务器支持,消除信息孤岛和资源孤岛4。P2P的分布计算模式,为有效均衡负载、充分利用带宽并挖掘计算机空闲的计算能力提供了可能。科学技术的发展与社会的需求及人类社会的发展进步是相互依赖、相互促进的。作为真正的分布式计算技术的P2P,之所以成为目前新一代互联网技术研究与应用的热点之一,不仅是计算机网络技术发展的必然,还有着深刻的社会需求背景,并对社会思想的变革产生影响。因此,对其进行深入的研究有着巨大的学术和商业价值。- 45 - 第2章 技术介绍2.1 P2P概念 P2P是Peer-to-Peer的缩写,Peer在英语里有“对等、同等者、伙伴”等意义,P2P可以理解为“端对端,点对点”的意思,称为对等网。P2P起源于最初的联网通信方式,是一种比较古老的技术,如产生于1979年的USENET和1984年的FidoNet都是基于P2P技术的,但是目前P2P己被赋予了新的含义,是旧有技术新的应用模式5。国内一般将P2P翻译成“端对端”或者“点对点”。P2P的原意其实就是一种通信模式,在这种通信模式中,每一个部分(节点)具有同等的地位,任意一个部分(节点)都能开始直接地通信。P2P可以简单地定义为通过直接交换信息,共享计算机资源和服务,对等计算机兼有客户机和服务器的功能6。 P2P技术,是在Internet上实施网络计算的一种新的计算模型。在这种网络中所有的节点是对等的(称为对等节点),各节点具有相同的责任与能力并协同完成任务。对等节点之间通过直接互连,共享信息资源、处理器资源、存储资源甚至高速缓存资源等,无需依赖集中式服务器就可完成。IBM为P2P作了如下定义:系统依存于边缘化(非中央式服务器)设备的主动协作,每个成员直接从其他成员而不是从服务器的参与中受益,系统中成员同时扮演服务器与客户端的角色,系统应用的用户能够意识到彼此的存在,构成一个虚拟或实际的群体。P2P工作组对P2P的定义:通过在系统用户之间的直接交换实现计算资源和服务的共享。2.2 P2P特点 在P2P系统中,每一个Peer都是平等的参与者,承担服务使用者和服务提供者两个角色。资源的所有权和控制权被分散到网络的每一个节点中。服务使用者和服务提供者之间进行直接通信。P2P技术有以下几个方面的特点: 1.非中心化:网络中的资源和服务分散在所有节点上,信息的传输和服务的实现都直接在节点之间进行,可以无需中间环节和服务器的介入,避免了可能的瓶颈。即使是在混合P2P中,虽然在查找资源、定位服务或安全检验等环节需要集中式服务器的参与,但主要的信息交换最终仍然在节点中间直接完成。这种策略降低了对集中式服务器的资源和性能要求。分散化是P2P的基本特点,由此带来了其在可扩展性、健壮性等方面的优势7。 2.可扩展性:在传统的C/S架构中,系统能够容纳的用户数量和提供服务的能力主要受服务器的资源限制。为支持互联网上的大量用户,需要在服务器端使用大量高性能的计算机,铺设大带宽的网络。为此集群、Cluster等技术纷纷上阵。在这些结构中,集中式服务器之间的同步、协同等处理产生了大量的开销,限制了系统规模的扩展。 而在P2P网络中,随着用户的加入,不仅服务的需求增加了,系统整体的资源和服务能力也在同步地扩充,始终能较容易地满足用户的需要。即使在诸如BitComet等混合型架构中,由于大部分处理直接在节点之间进行,减少了对服务器的依赖,因而能够方便地扩展到数百万个以上的用户。而对于纯P2P来说,整个体系是全分布的,不存在瓶颈。理论上其可扩展性几乎可以认为是无限的。 3.健壮性:在互联网上随时可能出现异常情况,网络中断、网络拥塞、节点失效等各种异常事件都会给系统的稳定性和服务持续性带来影响。在传统的集中式服务模式中,集中式服务器成为整个系统的要害所在,一旦发生异常就会影响到所有用户的使用。 而P2P架构则天生具有耐攻击、高容错的优点。由于服务是分散在各个节点之间进行的,部分节点或网络遭到破坏对其它部分的影响很小。而且P2P模型一般在部分节点失效时能够自动调整整体拓扑,保持其它节点的连通性。事实上,P2P网络通常都是以自组织的方式建立起来的,并允许节点自由地加入和离开。一些P2P模型还能够根据网络带宽、节点数、负载等变化不断地做自适应式的调整。 4.隐私保护:随着互联网的普及,以及计算和存储能力飞速增长,收集隐私信息正在变得越来越容易。隐私的保护作为网络安全性的一个方面越来越被大家所关注。目前的Internet通用协议不支持隐藏通信端地址的功能。攻击者可以监控用户的流量特征,获得IP地址。甚至可以使用一些跟踪软件直接从IP地址追踪到个人用户。 在P2P网络中,由于信息的传输分散在各节点之间进行而无需经过某个集中环节,用户的隐私信息被窃听和泄漏的可能性减小。此外,目前解决Internet隐私问题主要采用中继转发的技术方法,从而将通信的参与者隐藏在众多的网络实体之中。在传统的一些匿名通信系统中,实现这一机制依赖于某些中继服务器节点。而在P2P中,所有参与者都可以提供中继转发的功能,因而提高了匿名通讯的灵活性和可靠性,能够为用户提供更好的隐私保护。 5.高性能:性能优势是P2P被广泛关注的一个重要原因。随着硬件技术的发展,个人计算机的计算和存储能力以及网络带宽等性能依照摩尔定理高速增长。而在目前的互联网上,这些普通用户拥有的节点只是以客户机的方式连接到网络中,仅仅作为信息和服务的消费者,游离于互联网的边缘。对于这些边际节点的能力来说,存在极大的浪费。 采用P2P架构可以有效地利用互联网中散布的大量普通节点,将计算任务或存储资料分布到所有节点上。利用其中闲置的计算能力或存储空间,达到高性能计算和海量存储的目的。这与当前高性能计算机中普遍采用的分布式计算的思想是一致的。但通过利用网络中的大量空闲资源,可以用更低的成本提供更高的计算和存储能力。 6.负载均衡:P2P网络环境下由于每个节点既是服务器又是客户机,减少了对传统C/S结构服务器计算能力、存储能力的要求,同时因为资源分布在多个节点,更好的实现了整个网络的负载均衡8。2.3 P2P体系结构P2P的体系架构存在三种结构模式:以Napster为代表的集中目录式结构,以Gnutella为代表的纯P2P网络结构和混合式网络结构。 1.集中目录式结构 集中目录式结构采用中央服务器管理P2P各节点,P2P节点向中央目录服务器注册关于自身的信息(名称、地址、资源和元数据),但所有内容存储在各个节点中而非服务器上,查询节点根据目录服务器中信息的查询以及网络流量和延迟等信息来选择与定位其他对等点并直接建立连接,而不必经过中央目录服务器进行。如图2-1所示。 集中目录式结构的优点是提高了网络的可管理性,使得对共享资源的查找和更新非常方便;缺点是网络的稳定性(服务器失效则该服务器下的对等节点全部失效)。 图2-1 集中目录模型2.纯P2P网络结构纯P2P网络结构也被称作广播式的P2P模型,它却没有集中的中央目录服务器,每个用户随机接入网络,并与自己相邻的一组邻居节点通过端到端连接构成一个逻辑覆盖的网络。对等节点之间的内容查询和内容共享都是直接通过相邻节点广播接力传递,同时每个节点还会记录搜索轨迹,以防止搜索环路的产生,纯P2P网络结构解决了网络结构中心化的问题,扩展性和容错性较好。如图2-2所示。由于没有一个对等节点知道整个网络的结构,网络中的搜索算法以泛洪的方式进行,控制信息的泛滥消耗了大量带宽并很快造成网络拥塞甚至网络的不稳定,从而导致了整个网络的可用性较差,另外这类系统更容易受到垃圾信息,甚至是病毒的恶意攻击。 3.混合式网络结构混合式网络结构综合了纯P2P去中心化和集中式P2P快速查找的优势,按节点能力不同(计算能力、内存大小、连接带宽、网络滞留时间等)区分为普通节点和搜索节点两类。搜索节点与其临近的若干普通节点之间构成一个自治的簇,簇内采用基于集 图2-2 纯P2P模型中目录式的P2P模式,而整个P2P网络中各个不同的簇之间再通过纯P2P的模式将搜索节点相连起来;也可以在各个搜索节点之间再次选取性能最优的节点,或者另外引入一新的性能最优的节点作为索引节点来保存整个网络中可以利用搜索节点信息,并且负责维护整个网络的结构。如图2-3所示。 由于普通节点的文件搜索先在本地所属的簇内进行,只有查询结果不充分的时候,再通过搜索节点之间进行有限的泛洪。这样就极为有效地消除纯P2P结构中使用泛洪算法带来的网络拥塞、搜索迟缓等不利影响。同时,由于每个簇中的搜索节点监控着所有普通节点的行为,这也能确保一些恶意的攻击行为能在网络局部得到控制,在一定程度上提高整个网络的负载平衡9。 图2-3 混合P2P模型2.4 P2P的技术特性和关键技术2.4.1 P2P的技术特性 传统的C/S系统架构使互联网上的资源趋向集中,无论信息资源还是成本资源均向同一方向集中,这样的模式符合一对多、强对弱的社会关系形式,如政府对个人、对企业,大企业对小企业,学校对学生,企业对职工等等关系。P2P方式则使信息数量、成本资源都向互联网各点均匀分布,也就是所谓“边缘化”的趋势。此模式符合“一对一”的特点,以及彼此相当的社会关系形式,如个人对个人,规模相当的企业之间等等。相对于C/S系统,P2P具有内容发布的便捷性、内容定位的及时性和平台无关性及使用设备的广泛性等特性。具体说来:1.P2P网络中的每一个节点既是Client又是Server,如何表现取决于用户的要求,网络应用由使用者自由驱动。2.没有一个节点拥有对整个网络系统数据存放位置的全局视图,系统的整体行为是由网络局部连接逐步形成的。 3.信息在网络设备间直接流动,高速及时,降低中转服务成本。4.系统中所有已存在的数据和服务对网络中任何节点都是可获得的。5.在使网络信息分散化的同时,相同特性的P2P设备可以构成存在于互连网这张大网中的子网,使信息按新方式又一次集中。2.4.2 P2P的关键技术 P2P是一种基于互联网环境的新的应用型技术,主要为软件技术,P2P网络应用发展要涉及到如下几个方面的关键技术: 1.对于互联网上众多计算机,P2P应用比其他应用要更多考虑那些低端PC的互联,它们不具备服务器那样强的联网能力,同时对于以往的P2P应用技术,现在的硬件环境已经更为复杂,这样在通信基础方面,P2P必须提供在现有硬件逻辑和底层通信协议上的端到端定位(寻址)和握手技术,建立稳定的连接。涉及的技术有IP地址解析、NAT路由及防火墙。 2.在应用层面上,如果两个Peer分别代表两家不同的公司,而且它们已经通过互联网建立连接,那么一方的信息就必须为另一方所识别,所以当前互联网上关于数据描述和交换的协议,如XML、SOAP、UDDI等都是一个完善的P2P软件所要考虑的。 3.有通信就要有安全保障,加密技术是必须要考虑的。 4.如何设置中心目录服务器,控制网络规模和保证网络的鲁棒性等。5.高效的搜索策略。一是应尽量减少搜索时经过的节点数,以直接减少请求消息和处理时间;二是数据应倾向流向对其感兴趣的区域,即数据活跃区。快速搜索感兴趣的资料,与其他的对等点共享资源和服务。2.5 JAVA平台和JXTA2.5.1 JAVA平台Sun公司在“Java白皮书”中对Java的定义是10:Java:A simple,object-oriented,distributed,interpreted,robust,secure,architecture-neutral,portable,high-performance,multi-threaded,and dynamiclanguage。(Java是一种具有“简单、面向对象、分布式、解释型、健壮、安全、与体系结构无关、可移植、高性能、多线程和动态执行”等特性的语言。)1. Java的主要特性Java的主要特性有11: (1)简单性 Java语言简单而高效,基本Java系统(编译器和解释器)占用空间小。 (2)面向对象Java语言是纯面向对象的。在面向对象的技术中,把现实世界中的任何实体,都可以看作是对象。对象其实就是现实世界模型的一个自然延伸。现实世界中的对象均具有属性和行为,映射到计算机程序上,属性用数据表示,行为用程序代码实现。 (3)平台无关性与可移植性平台无关性与可移植性指的是程序不经修改而在不同硬件或软件平台上运行的特性,也就在一定程度上决定了程序的可应用性。可移植性可分两个层次:源代码级可移植性和二进制可移植性。Java不仅是源代码级可移植的,甚至源代码经过编译之后形成的二进制代码字节码,也同样是可移植的。此外,Java的可移植性还体现在Java的运行环境上。Java编译器是用Java语言本身所编写的,整个运行时环境体现了一个定义良好的可移植性接口。 (4)稳定性和安全性网络分布式计算环境要求软件具有高度的稳定性和安全性。Java首先摒弃了指针数据类型,这样,程序员便不再能够凭借指针在任意内存空间中“遨游”;其次,Java提供了数组下标越界检查机制,从而使网络“黑客”们无法构造出类似C和C+语言所支持的那种指针;第三,Java提供了自动内存管理机制,它可以利用系统的空闲时间来执行诸如必要的垃圾清除等操作,同时也避免了恶意的使用者利用指针去改变不属于自己程序的内存空间。此外,Java的运行环境还提供了其它安全保障机制,如:字节码校验器(Byte Code Verifier),运行时内存布局和类装载器(Class Loader),文件访问限制等。 (5)多线程和高性能一般情况下,可移植性、稳定性和安全性几乎总是以牺牲性能为代价的,解释型语言的执行效率一般也要低于直接执行源码的速度。但Java所采用的措施却很好地弥补了这些性能差距。这些措施包括:高效的字节码;多线程等。Java的多线程支持体现在两个方面:Java环境本身就是多线程的,它可以利用系统的空闲时间来执行诸如必要的垃圾清除和一般性的系统维护等操作;Java还提供了对多线程的语言级支持。利用其多线程编程接口,编程人员可以很方便编写出支持多线程的应用程序,提高程序的执行效率。 (6)动态特性在面向对象的程序设计中,经常会用到各种类库,很多时候还需要一些从第三方厂商处购买的类库。销售应用程序时,类库有时是单独出售的。对于C+应用程序,这就会导致一个问题:类库一旦升级,用这些类库编写的应用程序就必须重新编译,并且重新发送到用户手中,否则就无法利用升级后类库的新增功能。Java采用“滞后联编”机制避免了这个问题。Java程序的基本组成单元为类,这些类是在运行过程中动态装载的。因此,Java可以在分布式环境中动态地维护应用程序及其支持类库之间的一致性。这样,对于Java而言,其支持类库升级之后,相应的应用程序不必重新编译,也一样可以利用升级后类库的新增功能。“滞后联编”机制使得Java完全利用了面向对象编程模式的优点,使得Java程序能够适应不断变化的执行环境。 (7)分布式分布的概念包括数据分布和操作分布两个方面:数据分布是指数据可以分散存放于网络上的不同主机中,以解决海量数据的存储问题;操作分布则指把计算分散到不同的主机上进行处理,这就如同由许多人协作共同完成一项大而复杂的工作一样。对于数据分布,Java提供了一个URL对象,利用此对象我们可以打开并访问网络上的对象,其访问方式与访问本地文件系统几乎完全相同。对于操作分布,在客户机服务器模式下Java都可以把计算从服务器分散到客户端,从而提高整个系统的执行效率,避免瓶颈制约,增加动态可扩充性。对于编程人员来说,Java的网络类库是对分布式编程的最好支持。Java网络类库是支持TCPIP协议的子例程库。目前支持的协议有HTTP和FTP等。同时,通过编写协议句柄,编程人员还可以扩充Java支持的协议集合。 (8)丰富的类库 Java提供了一个大的类集,这些类被打包分成用户可管理的“知识库”。例如,Java中包含了一个专门用于处理网络连接的包、一个专用于处理1/O的包和一些用于创建可视化元素的包。因此,程序员可将自己的创造性和精力集中于编程的特定方面。Java包中包含的程序预制框架确实加快了语言的学习和程序的开发过程。Java平台的这个优势对于灵活多变的网络环境而言是非常重要的。由上述特征可以看出,Java的确是一门适合Internet和分布式环境的编程语言。2.5.2 JXTA概述 JXTA是Sun公司提供用于开发P2P网络的通用平台。JXTA为juxtapose的缩写,意为并置,并列。JXTA定义了一组通用标准化协议,用于在现有Internet和非IP网络基础之上建立一个虚拟的P2P网络,实现节点间相互通信12。JXTA提供基于现有物理网络结构构建虚拟网的一整套协议,允许网络中的某一节点同处于网络的不同位置的任意其它节点进行信息交换,而不论该点是否位于防火墙后,或经过NAT抑或是非IP网络。信息被透明的传播,使用不同的协议(TCP或HTTP)穿透防火墙或NAT从而到达信息接受节点13。基于JXTA构建的P2P网络应用能方便移动设备在不断改变位置情况下进行通信,而不必担心因不断变换不同的物理网络带来的通信问题14。JXTA制定了关于邻居发现、自构建组、资源发现以及相互间通信一整套协议。JXTA构建的虚拟网络与物理网络之间的对应关系如图2-4所示。JXTA一个最主要的目的是提供一个平台,该平台带有P2P网络所必需的基本功能。此外,JXTA技术还致力于克服现有P2P系统中大量存在的以下潜在缺陷:1.互操作性。现有的许多P2P系统都只提供一种P2P类型的服务,如文件共享、即时通信等。使用JXTA开发的P2P系统能提供多种类型的服务,且因为这些应用都是基于JXTA协议的,还能实现软件间的互操作性,使得开发兼具 图2-4 JXTA虚拟网络 多项功能的大型P2P应用软件成为可能。2.平台无关性。JXTA被设计成与平台无关。平台无关性包括包含三个层次:独立于开发语言如(如JAVA、C);独立于操作系统(如Unix、Windows);独立于网络传输协议(如TCP/IP、Bluetooth)。 3.无处不在性。任何装置(如路由器、PDA、PC、消费电子等)只要拥有数字心跳,就可以JXTA实现P2P服务。 不同的协议、异构和不同的实现方式是现有的P2P解决方案的准确描述。目前开发者用不同的方法和途径进行P2P应用开发,这种在C/S开发模式中广泛存在的状况在P2P应用开发中也大量存在。JXTA提供了一套简单、简练和灵活的机制用于构建能在任意平台、任何地方和任何时间进行P2P运算核心网络计算技术。JXTA在总结现有P2P特点的基础上,开发出能解决现有P2P计算中存在的问题的核心技术。其关键在于提供了进行P2P计算的基本机制并为开发者提供了大量的可选择策略。同时采用软件构件思想,通过小型、简单、便于开发的构造模块,JXTA将使开发者从建立各自框架的复杂工作得以解放,可以潜心关注于建设各类新颖、创造性的、分布式计算应用,从而达到快速实施的目的15。第3章 P2P问答式交互系统程序设计3.1 程序总体设计 本文所设计的问答式交互系统应用程序包含了两个主要部件:一个用户接口(客户端/前端)和一个JXTA集成(后台应用程序)。该应用程序的用户接口显示了与对等节点之间的通信相关数据,而JXTA集成的后台应用程序则负责更新在用户前端显示的数据。这个JXTA应用程序是基于简单的P2P应用程序架构的基础上的。虚拟教室的教师是一个对等节点,通信代理是另一个对等节点,而虚拟教室的每个学生也是不同的对等节点。在这个应用程序中,发生在应用程序前端和后台之间以及对等节点之间的通信是通过如下方式进行传输的:虚拟教室的教师接受到来自学生对等节点的关于某个问题的请求,然后从通信代理对等节点上获得该学生对等节点回答的一个问题,将该问题发送到通信代理对等节点上,然后再接收该学生对等节点为这个问题给出的答案,然后从该通信代理对等节点上获得需要学生对等节点回答的下一个问题。当虚拟教室的教师对等节点不再提出任何问题时,这个“问题答案”会话就结束了。程序设计流程图如图3-1所示。3.2 选用P2P的原因 C/S方式和P2P方式具有各自的技术特点,各有其独特的应用空间,在现有互联网应用中的并行共存、互为补充。 P2P模式是非中心结构的对等模式,P2P与C/S模式的区别为16: 1.每一个对等点具有相同的地位,既可以请求服务也可以提供服务,同时扮演着C/S模式中的服务器和客户端两个角色,还可以具有路由器和高速缓冲存储器的功能,从而弱化了服务器的功能,甚至取消了服务器。 2.P2P技术可以使得非互连网络用户很容易地加入到系统中,每一个对等体老师判断最后一题答案对错,并把学生共答对的题目数和建议发送给学生老师判断答案对错,并向学生发送下一个问题学生回答老师问题老师收到请求后向学生发送问题等待直到老师在线发送学生会话请求 开始老师是否在线 N是否还有问题 Y Y N 结束图3-1 系统设计流程图可以充分利用网络上其他对等体的信息资源、处理器周期、高速缓存和磁盘空间;对等体通常没有固定的IP地址,并且可常常从网络上断开,信息的存储及发布具有随意性,缺乏集中管理。 3.P2P是基于内容的寻址方式17,内容包括信息、空闲机时、存储空间等。P2P网络中,用户直接输入要索取的信息的内容,而不是信息的地址,P2P软件将会把用户的请求翻译成包含此信息的节点的实际地址,这个地址对用户来说是透明的。P2P模式相对于C/S模式有如下主要优点18:1.资源的高度利用率。在P2P网络上,闲散资源有机会得到利用,所有节点的资源总和构成了整个网络的资源,整个网络可以被用作具有海量存储能力和巨大计算处理能力的超级计算机。C/S模式下,纵然客户端有大量的闲置资源,也无法被利用。2.随着节点的增加,C/S模式下,服务器的负载就越来越重,形成了系统的瓶颈,一旦服务器崩溃,整个网络也随之瘫痪。而在P2P网络中,每个对等体都是一个活动的参与者,每个对等点都向网络贡献一些资源,如存储空间、CPU周期等。所以对等点越多,网络的性能越好,网络随着规模的增大而越发稳固。3.基于内容的寻址方式处于一个更高的语义层次,因为用户在搜索时只需指定具有实际意义的信息标识而不是物理地址,每个标识对应包含这类信息的节点的集合。这将创造一个更加精炼的信息仓库和一个更加统一的资源标识方法。4.信息在网络设备间直接流动,高速及时,降低中转服务成本。5.C/S模式下的互联网是完全依赖于中心点-服务器的,没有服务器,网络就没有任何意义。而P2P网络中,弱化服务器的功能,甚至取消服务器,任意两台PC互为服务器/客户机,即使只有一个对等点存在,网络也是活动的,节点所有者可以随意地将自己的信息发布到网络上。P2P的技术方式将导致信息数据成本资源向所有用户的PC均匀分布,即“边缘化”趋势。但是P2P也有不足之处。首先,P2P不易于管理,而对C/S网络,只需在中心点进行管理。随之而来的是P2P网络中数据的安全性难于保证。因此,在安全策略、备份策略等方面,P2P的实现要复杂一些。另外,由于对等点可以随意地加入或退出网络,会造成网络带宽和信息存在的不稳定。P2P技术与C/S技术性能比较如表3-1所示19。表3-1 C/S与P2P比较表特性C/SP2P数据发布差好数据接收好中数据互动性差好数据即时性(传输速度)差好数据更新差好数据质量(价值)好中数据覆盖率和数量(价值)好差容错性差好可扩展性差好成本控制差好安全性好差易管理性好差3.3 采用JAVA的优势 JAVA是一门面向对象的编程语言。JAVA从一开始就被设计为面向对象的20。JAVA非常简单,它包含了其他面向对象的语言比如C+的很多优点,但降低了这些面向对象编程语言的复杂性。绝大多数程序员都发现,相对其他编程语言而言,JAVA语言更容易学习。 JAVA提供了一个大的类集,这些类被打包分成用户可管理的“知识库”。例如,JAVA中包含了一个专门用于处理网络连接的包、一个专用于处理I/O的包和一些用于创建可视化元素的包。因此,程序员可将自己的创造性和精力集中于编程的特定方面。JAVA包中包含的程序预制框架确实加快了语言的学习和程序的开发过程。JAVA平台的这个优势对于灵活多变并且需要适应多种环境的P2P应用程序而言是非常重要的。就其本质而言,P2P应用程序包含了很多活跃因素且具有很多不同的目的。因此,P2P程序是非常动态化的,它需要能适应其发展变化的编程语言和工具。JAVA是一种解释性语言,这是未来绝大多数针对多种不同目的的编程语言的发展方向。这是因为JAVA虚拟机的解释能力和其他绝大多数编程语言中通过消除程序连接所获得的优势远远超过了为解释程序所需的处理时间。因为程序运行时执行解释功能的JAVA虚拟机抽象了系统硬件和操作系统的区别,所以JAVA是一种独立于平台的编程语言。Java的平台独立性为P2P的分布式特性提供了支持。这两种技术结合在一起将改变在目前的应用程序部署中面临的一些限制条件或局限性。Java使得我们能够将应用程序代码部署到最能满足我们需求的地方。P2P完全消除或降低了客户端/服务器编程模式在功能上的分离并推进了边缘资源的分布特性。新设备市场能支持Java和P2P的很多特性,从而使得我们能采用新的或现有方法为个人化设备提供支持。3.4 有关应用程序的相关概念3.4.1 对等体(Peer) 对等体是任意在网络中实现了一个或多个JXTA协议的实体。该实体并不一定是一台计算机,可以以三种不同形态存在: 1.具备数字心跳的设备都可以是一个对等体。因此对等体既可以是一台大型机,也可以是一部移动电话甚至是一个移动探测器。 2.对等体可以是一个应用程序,一台独立的计算机可以驻留多个JXTA程序,每个程序都是一个对等体,同时也是一个虚拟的设备。 3.一个对等体也可能是一个跨越多台计算机的分布式应用程序 对等体是一个虚拟的通信点,对等体间是独立存在并能相互间异步通信,并且以Peer ID所唯一地标识。JXTA协议可使用任何可用的网络接口实现对等体间的相互通信,每个接口被通告为一个唯一地标识该接口的对等体端点(PeerEndpoint)。两个对等体之间通过对等体端点建立直接的点对点连接。相互通信的对等体间不一定直接连接,采用一些中间节点来路由因为不同物理网络或因配置管理不能直接送达的消息。对等体通过对等组进行管理,即对等体间可配置为在网络中能够彼此发现而建立暂时或者持续的关系。3.4.2 对等组(Peer Groups) 对等组就是共享资源和服务的对等体的集合,通常是多个具备共同兴趣或进行协同工作的对等体的汇聚体。逻辑上,任何对等体都可以加入任意多个不同类型的对等组。一个物理网络可以包括多个对等组,一个对等组也可以跨越多个物理网络中,所有的对等体都隶属于NetPeerGroup对等组。对等组与物理网络的关系如图3-2所示。JXTA规范并不具体指定或推荐组成对等组的适当方式,这主要由对等组维护成员资格的方式决定,对等组的成员必须在通信方式和共享信息方面保持一致的协议。 图3-2 对等组与物理网络关系 对等组是一种组织对等体并且发布组内的特定服务的方式。对等组可以被创建、加入和退出,在一个组里还可以更新一个组成员的关系。出于某些原因,对等组需要对成员关系进行一些限制,例如为了通信的安全、隐私的考虑等。采用协议来对成员进行授权和认证、收集信息和判断其是否符合成员关系的要求等21。 基于以下不同的动机创建对等组: 1.建立一个安全的环境。对等组创建一个用于执行特殊安全策略的本地控制域。安全策略可以基于简单的用户口令认证,也可以采用比如公共密钥加密等复杂的方式。在组的边缘,成员对等体可以访问和发布受保护的内容。对等组形成一个资源在边界上被受限访问的逻辑区域。 2.进行访问区域控制。对等组可以被创建为一个特殊用途的本地域。比如,组可以创建来进行文件共享和CPU共享。对等组把现实的网络划分为一个个为实现特殊目的而建立的逻辑访问区域。 3.建立一个监控环境。对等组允许为某种特定的目的(如获取数字心跳等)让组内对等体监测其它对等体。 JXTA定义了一系列的对等组服务,用于完成基本的组管理和成员通信等服务。核心对等组服务包括:发现服务、成员服务、访问服务、管道服务、解析服务和监控服务。一个对等组提供多个对等组服务。两个对等体要通过对等组服务实现交互,则它们必须隶属于同一个对等组。3.4.3 端点(Endpoint) 在JXTA应用中,端点是最基本的通信方法。端点是实现了特定通信协议的对等体的地址。如一个IP地址加上一个端口就是一个端点。一个对等体可拥有多个端点,用于实现对等体间的多协议通信,从而增强了P2P网络中节点的连通性。比如,如果两个对等体都位于防火墙的后面,采用封装TCP协议的端点通信;如果分别位于防火墙的两端,则采用封装HTTP协议的端点通信。 端点独立于物理地址,允许物理地址发生变化。对等体通常不直接使用端点,通过构建在端点之上的管道(Pipe)来间接使用的。管道提供连接,而连接的实现则由端点来实现。采用这种分层结构,可以为创建P2P应用提供强大的功能并降低复杂性。 一个对等体端点对应一个Peer ID,封装了所有可用的物理网络地址。端点的作用类似于日常生活中名片,提供多种可用的联系方式。当对等体收到某个端点通告,它能从可用的端点地址列表中选择最为有效的通信方式(如处于同一网络中,可直接通信则选用TCP/IP,需要穿越防火墙则采用HTTP协议)22。3.4.4 管道(Pipe) 管道是在JXTA环境中建立的虚拟通信通道,用于在服务和应用之间发送消息。管道提供了一种基于对等体端点的虚拟抽象,实现了与对等体位置的物理无关性,如图3-3所示。管道可以连接一个或多个端点,假定在每个端点都有能独立用于收发、管理信息队列和信息流。管道根据在两端作用的不同被称为输出管道(OutputPipe,接收数据对等体那一端)和输入管道(InputPipe,发送数据对等体那一端)。管道通过管道通告来发布和发现,一个管道ID唯一标识一个管道。管道被解析器在系统运行时动态绑定到对等体端点。使用这种管道抽象,服务和应用可以实现透明的失效恢复,通过从一个失效的物理对等体端点过渡到另外一个可用的对等体端点来避免服务或对等体失效。我们也可以利用该抽象来实现对一个新发布的服务实例进行访问。管道的绑定过程由查找和连接(连接可以实现一个管道连接到多个端点)两步构成。当有新信息通过管道进行发送时,信息从输出管道发送到正在侦听的目标输入管道。 图3-3 JXTA管道与物理网络的关系 管道之所以是虚拟的是因为对等体不必知道具体的网络地址就可以使用管道进行通信。因为防火墙和其它通信壁垒的存在,许多对等体并不能直接连接,这时,管道更像一个在多种通信协议之上的虚拟层,利用中继对等体实现通信。管道是JXTA最基本、最重要的特性,它提供了一种很好的方案,使得对等体在大多数网络情况下都可以通信,而不用去管防火墙或者其他的障碍。即便在不知道另外一个对等体的位置以及它所使用的协议等信息的情况下,仍然可以通过管道实现通信。管道作为一种抽象的方法,隐藏了一些细节,能比较方便的实现多节点通信和重定位等功能。JXTA并没有定义一个管道工作的内部细节,可以使用单播或多播协议,以及它们的算法来实现。管道整个链路可以使用多段连接而成,每一段可以使用不同的传输协议。管道提供两种模式的通信方式,点对点模式和扩散模式,如图3-4所示。1.点对点管道(Point-to-point Pipe)该种管道的两端连接到一个非直连或异步的通道,输入管道端接收从输出管道端发送的数据。点对点管道不支持应答和确认操作,发送的数据除消息本身外还应包含用于消息线程队列识别用的唯一ID。消息净荷也可包含用于打开一个新管道实现应答的管道通告。2.扩散管道(Propagate Pipe)该种管道可将一个输出管道连接到多个输入管道。消息从输出管道端发送到所有的输入管道端。扩散消息将被发送到对等组内所有在侦听的输入管道端。在TCP/IP网络中通常采用多播的方式实现,在不支持多播的网络环境中通过点对点的连接方式实现扩散管道。 图3-4 管道的通信方式 3.4.5 通告(Advertisement) 通告用以表示所有的网络资源,如对等体、对等组、服务等,每个通告以XML文档表示。通告一系列元素组成,每个元素包含它的数据或更多的元素。 通告是最常用协议信息交换文档。每个通告都有其生命周期,因此必须在过期之前重新新发布。服务和对等体可以通过组合或扩展已有的类型来定义自己的通告类型。3.4.6 消息(Message)在JXTA网络中所有的通信是通过接收和发送消息来实现的,也就是说在管道(Pipe)和端点(Endpoint)传递的信息都是以消息的方式来封装的。消息采用标准的格式,它是实现互操作性的关键。消息被设计为能够适应异步的,不可靠的,单向的传输。因而,它被设计为一个包含封装体和带有一个协议头堆栈的主体的数据包。这个封装包含消息头、消息摘要、源节点和目标对等体地址。一个节点是一个逻辑的目的地,它被给出为URL的形式。另外还有一个出于安全目的的可选的消息摘要。消息正文的长度是任意的,可以包含一个可选的证书(出于安全性目的)和内容。JXTA消息的格式比较灵活,可以适应不同的环境,能在不同网络上实现,而不仅在TCP/IP上。为了提供一个标准的、语法上简单的、通用的编码机制,JXTA消息大量采用XML文档格式。JXTA利用了XML的普遍可访问性和易使用、易编程的特点,可以很好的保证JXTA的与平台无关性。然

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论