基于jxxxa的p2p网络技术研究_第1页
基于jxxxa的p2p网络技术研究_第2页
基于jxxxa的p2p网络技术研究_第3页
基于jxxxa的p2p网络技术研究_第4页
全文预览已结束

下载本文档

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

文档简介

基于jxxxa的p2p网络技术研究

0利用p2p网络的应用,实现自由流动的网络协议。在全球随着计算机技术的快速发展,计算机的动作速度迅速提高,但存在的问题越来越复杂。如果计算机的速度达到一定水平,提高计算能力的问题就存在。PC机已经深入千家万户,并且通过Internet连接到了一起,虽然单个PC机的运算能力有限,但对于相应的应用(如上网,办公等)仍有相当的剩余,由于PC机的数量极大,因此这些剩余的计算能力资源极大丰富,如果通过分布系统将其发掘出来并加以控制和利用,将给科研计算带来质的飞跃。首先开发P2P最有名的就是由伯克莱大学开展的寻找外星生命的SETI@home计划。1999年SETI@home开始用分析来自外太空的无线电信号,寻找宇宙中可能存在外太空文明的证据。目前该工程已经将互联网上300万台以上的计算机通过这种方式组织起来,充分共享了这些节点的空闲计算资源,从而达到了几十TFlops的计算能力。在P2P网络中所有的设备都是平等的,彼此可以直接通信。在网络中,每个节点(peer)相互平等,都拥有一个控制端和一个工作端,既提供服务,又请求服务。这种网络允许在计算过程中动态地加入或撤出结点,并且计算能力随结点数增长相应地成比例增长,这样P2P引导网络计算模式从集中式向分布式偏移,也就是说网络应用的核心从中央服务器向网络边缘的终端设备扩散,所有网络节点上的设备都可以建立P2P对话。1jxa标准的开放协议JXTA项目是由美国SUNMicrosystems公司最先提出和开发的,是Sun公司为了构建P2P网络而制定的一组协议。并且已经转交给一个非官方的组织JXTA.org进行维护和开发。它是一个面向Peer-to-Peer计算的开放式的网络计算平台,提供了一套开放的,基于Peer-to-Peer的协议,使得无论何种连接的设备,例如移动电话、PDA(个人数字助理)、PC机或者是服务器,都可以进行互相通讯和协作,并且JXTA分布计算系统的协议是与编程语言无关的,现在可以采用的有Java语言版和C语言两种版本实现。JXTA的层次结构图如图1所示。在JXTA网络中各个节点的地位是平等的,并且它跟客户/服务器模式、基于Web模式的两种传统的分布式计算模式并驾齐驱,也是用来解决分布式应用方法之一。JXTA提供一套标准的开放协议,用来解决如下的一些基于点对点应用的关键技术,例如:节点之间发现协议;在一个组中如何自组织各个节点;广告和节点发现网络服务;节点间的相互通信;节点间的相互监控等。并且这些协议可以在许多传输协议上执行,如TCP/IP,HTTP,Bluetooth和HomePNA等。JXTA定义了一个用于对等网络的开放协议组。这些基于XML的协议描述了复杂的操作,比如对等点发现、端点路由、连接绑定、基本查询/应答消息交换和通过集中对等点进行的网络传播。2基于jxta网络建设2.1网络架构介绍设计这个网络架构的主要目的是为了达到节点的动态加入、负载分配的平衡和任务提交、回收的透明化,最终实现任务一旦提交到网络中,提交人员就不用再做任何事情,网络会自主的完成要计算的任务。这就要求能够充分利用P2P技术的思想,在JXTA平台基础之上实现计算节点的点对点通信。网络架构的基本步骤和简单图示如图2所示。步骤1节点B加入网络,向汇聚节点发送管道通告,同时汇聚节点在计算力列表中加入节点B的信息;步骤2节点A向网络提交一个计算任务。节点A首先向汇聚节点发送查询通告;步骤3汇聚节点通过调用负载的守护进程来完成对计算力列表的查询,从而返回给节点A一个最适合完成这个计算任务的某个节点信息(假设为节点B);步骤4向节点B发送管道通告,建立输出API,等待节点B回应。节点B通过发现机制,发现A的请求后,建立输入API;步骤5节点B将计算结果返回给节点A。2.2聚合对等体的生成构建一个网络特别的要考虑如何使所构建的网络接纳新进的节点,即节点的加入问题。在以JXTA为基础的P2P网络中,各个对等体上配置好JXTA的应用程序后JXTA也就可以为我们提供完整的节点加入技术了。首先引入一个新的概念,一个在JXTA中有着特殊地位的对等体,称之为汇聚对等体。它将保存一份网络中它所了解的所有对等体的列表,而后其它对等体之间要进行通信时就可以方便的查询这份列表。任何对等体都可以创建对等组。而对等组又是由对等体的共同关注点而自我组织的。Shell可以用下面的命令创建一个名为“mygroup”的对等组:在使用这种方式创建一个组后,该组的有关信息就会广播到正在使用发现协议的汇聚对等体中,汇聚对等体会以各个节点的共同关注点(如节点的计算力)为元素构成一张列表,在对等体通过动态方式查询其它节点的时候提供依据。Shell可以用join命令来加入一个特定的组:执行这个命令后,shell将成为组mygroup的一员。2.3监控高效运行在我们的模型中,节点间进行相互通讯,是要通过建立管道来实现的。两个节点间的管道也是通过一个管道公告的XML文件来表示的。组中的一个节点要想被其它计算机发现就必须向组发送管道广告。下面的方法用来启动一个服务。这个服务创建一个管道后,然后向组发送管道广告,以便汇聚节点可以发现其节点信息。管道公告发送代码实例如下:当接收到管道公告后,节点要基于这个公告,建立一个管道连接,这个连接的底层,相应的还是基于Socket的TCP/IP连接,并且会动态绑定到一个端口上。之后,双方就可以实现互相通讯了。汇聚节点接收到新的加入节点发送的管道广告后要将节点的计算力信息加入到其保存的列表中。在模型中计算力的衡量关系到系统的负载平衡问题,所以要设计一种实用高效的衡量计算力的标准。而在局域网中我们最关心的是计算的速度问题,换个角度说就是节点CPU的利用率问题。大运算量的计算任务,对CPU的使用非常频繁,所以选择CPU利用率作为衡量工作负载的指标。同一任务在不同CPU利用率情况下,其响应时间增加的百分比不同,环境负载越重,其响应时间越长;同一负载环境下,占用CPU程度不同的任务,其响应时间增加的百分比也不同。由此可见,CPU利用率能正确反映机器的负载情况,可以用来作为调度负载平衡的指标,而且对于一个实际的系统而言,CPU利用率是很直观,且容易获得的。计算力信息的获得,可以利用了一个计算力获取和更新的守护线程来完成。以便可以实时、动态的在Java应用程序中监视CPU的使用。我们利用JNI(javanativeinterface)Java本地接口,编写自己的CPU监视器,这种方法的不足之处在于丧失了跨平台的优越性,但是却提供了一种实现的节点计算力信息获取的手段,从而实现获取负载的守护进程。下面介绍一下它实现的核心技术以及部分代码。首先,要建立一个声明了本地方法的类,来完成对CPU利用率的监控,edu.jlu.dcslab.utils.SystemInformation,该方法返回当前进程已使用的CPU的毫秒数。publicstaticnativelonggetProcessCPUTime()。而后使用JDK内置的Javah工具生成以后本地代码实现所要使用的C头文件。然后再使用本地方法实现。在大多数的平台上,该方法可以使用getProcessCPU-Time()系统调用来实现,代码简单如下:这个方法累加了执行当前进程的核心和用户代码所耗费的时间,然后除以处理器的数目,并把结果转换到毫秒。fileTimeToInt64()作为一个辅助函数,把FILETIME结构的数据转换为64位的整数。s_currentProcess和s_numberOfProcessors定义为全局变量。最后到JAVA的SystemInformation类中,装载本地库(silib.dllonWin32)通过静态初始化代码块完成。我们需要用Java方法来来记录不同的时刻的CPU数据,并报告任何两个时间点之间CPU的使用率。以下代码创建一个Singleton的线程类CPUUsageThread,它自动地每过一个时间间隔就拍下一个数据快照,并报告给汇聚节点生成计算力列表,来实现我们对CPU利用率的动态获取。综上所述,模型可以通过汇聚节点的时时监控来获取各个节点计算力的变化信息。当有任务提交到计算网络中时,可以根据当时的计算列表来找到合适的计算节点,并把该计算节点的信息发送给任务提交者,从而实现两个节点间的直接通信,

温馨提示

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

评论

0/150

提交评论