您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > 基于JavaRMI的分布式计算
基于Java+RMI的分布式计算摘要:随着网络技术和面向对象技术的日趋成熟,分布式计算已经成为软件设计的主流。面向对象编程语言JAVA使得分布式计算更容易实现。本文首先阐述了分布式计算的概念,接着讨论了RMI(远程方法调用)的编程方法和介绍利用RMI进行分布计算的步骤。最后通过实例来论述如何让RMI实现分布计算。关键字:JAVA语言;RMI;分布式计算;面向对象技术;Abstract:withthematurityofnetworktechnologyandobject-orientedtechnology,distributecomputinghasbecomemainstreaminsoftwaredesign.Anobject-orientedprogramminglanguageJAVAmakesdistributecomputingeasiertoimplement.Wewillexpoundstheconceptionofdistributecomputingfirst,thendiscussabouttheprogrammingmethodofRMI(RemotingMethodInvocation)andintroducethestepsfordistributecomputingbasedonRMI.LastwewilldiscusshowtoimplementdistributecomputingwithRMIbyexamples.Keywords:JAVAlanguage;RMI;distributecomputing;object-oriented;1.引言由于现代人类各个课题学科繁多,涉及面广,而分类又细。而当今的每个学科似乎都需要进行大量的计算。天文学研究组织需要计算机来分析太空脉冲(pulse),星位移动;生物学家需要计算机来模拟蛋白质的折叠(proteinfolding)过程;药物学家想要研制克服艾滋病(AIDS)或非典(SARS)的药物;数学家想计算最大的质数和圆周率的更精确值;经济学家要用计算机分析计算在几万种因素考虑下某个企业/城市/国家的发展方向从而宏观调控。由此可见,人类未来的科学,时时刻刻离不开计算。而分布式计算(DistributedComputing),以其独特的优点——便宜、高效而越来越受到社会的关注。支持分布式应用软件开发的工具层出不穷,它们都在一定程度上促进了分布式的应用和发展。但是它们在面向对象,安全性和可移植性上存在很大的不足。使得分布式软件的开发仍存在很大的困难。面向对象语言JAVA出现,其平台无关性的优势使得它自身成为Internet上广泛应用的程序语言。在JAVA1.1版本以后推出的RMI,使客户机上的程序可以调用服务器上的远程对象,这样就使程序员能够很容易编写出分布计算程序。2.分布计算分布式计算是一门计算机科学,它研究如何把一个需要非常巨大的计算能力才能解决的问题分成许多小的部分,然后把这些部分分配给许多计算机进行处理,最后把这些计算结果综合起来得到最终的结果。最近的分布式计算项目已经被用于使用世界各地成千上万位志愿者的计算机的闲置计算能力,通过因特网,您可以分析来自外太空的电讯号,寻找隐蔽的黑洞,并探索可能存在的外星智慧生命;您可以寻找超过1000万位数字的梅森质数;您也可以寻找并发现对抗艾滋病病毒的更为有效的药物。这些项目都很庞大,需要惊人的计算量,仅仅由单个的电脑或是个人在一个能让人接受的时间内计算完成是决不可能的。分布式计算是近年提出的一种新的计算方式。所谓分布式计算就是在两个或多个软件互相共享信息,这些软件既可以在同一台计算机上运行,也可以在通过网络连接起来的多台计算机上运行。分布式计算比起其它算法具有以下几个优点:1、稀有资源可以共享。2、通过分布式计算可以在多台计算机上平衡计算负载。3、可以把程序放在最适合运行它的计算机上。其中,共享稀有资源和平衡负载是计算机分布式计算的核心思想之一。3.分布式通信在分布式系统中,由于缺少共享存储器,系统中的通信都是基于消息传递的。消息传递,物理上复制要共享的数据到另外一个进程的地址空间。3.1组通信组通信最简单的实现方式就是不可靠组播,即简单地向每个目标发送一条消息。相对的,可靠组播是发送者向一个组中所有成员发送消息,然后等待每一个成员的回复。3.2远程调用RPCRPC(RemoteProcedureCallProtocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。RPC采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。首先,调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。在服务器端,进程保持睡眠状态直到调用信息的到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息,然后等待下一个调用信息,最后,客户端调用过程接收答复信息,获得进程结果,然后调用执行继续进行。运行时,一次客户机对服务器的RPC调用,其内部操作大致有十步:(1).调用客户端句柄;执行传送参数(2).调用本地系统内核发送网络信息(3).消息传送到远程主机(4).服务器句柄得到消息并取得参数(5).执行远程过程(6).执行的过程将结果返回服务器句柄(7).服务器句柄返回结果,调用远程系统内核(8).消息传回本地主机(9).客户句柄有内核接收消息(10).客户接收句柄返回的数据。3.3RPC和RMI的区别RMI和RPC之间最主要的区别在于方法是如何别调用的。在RMI中,远程接口使每个远程方法都具有方法签名。如果一个方法在服务器上执行,但是没有相匹配的签名被添加到这个远程接口上,那么这个新方法就不能被RMI客户方所调用。在RPC中,当一个请求到达RPC服务器时,这个请求就包含了一个参数集和一个文本值,通常形成“classname.methodname”的形式。这就向RPC服务器表明,被请求的方法在为“classname”的类中,名叫“methodname”。然后RPC服务器就去搜索与之相匹配的类和方法,并把它作为那种方法参数类型的输入。这里的参数类型是与RPC请求中的类型是匹配的。一旦匹配成功,这个方法就被调用了,其结果被编码后返回客户方。4.RMI技术4.1RMI简介RMI(RemoteMethodInvocation,远程方法调用)是用Java在JDK1.1中实现的,它大大增强了Java开发分布式应用的能力。Java作为一种风靡一时的网络开发语言,其巨大的威力就体现在它强大的开发分布式网络应用的能力上,而RMI就是开发百分之百纯Java的网络分布式应用系统的核心解决方案之一。其实它可以被看作是RPC的Java版本。但是传统RPC并不能很好地应用于分布式对象系统。而JavaRMI则支持存储于不同地址空间的程序级对象之间彼此进行通信,实现远程对象之间的无缝远程调用。4.2RMI原理RMI主要由三层来构成。每一层的边界由确定的接口和协议加以定义。每一层都独立于下一层,并且可以在不影响系统中其他层的情况下,用可选的实现替代。它的三层结构包括:Stub/Skeleton层;远程引用层;传输层。(1).Stub/Skeleton层:这一层是应用层RMI系统与其它部分之间的接口。客户与本机Stub对象进行交互。远程对象的Stub就是远程对象的客户端代理,它定义了远程对象实现所支持的所有接口,并借助于远程引用层把调用请求传送给服务器对象。(2).远程引用层:主要处理低端传输接I=1.也负责执行专门的远程引用协议,这个协议是独立于客户端的存根和服务端的框架之外的。(3).传输层:实现具体的客户端到服务器端的网络连接。主要执行以下动作:建立远程地址空间的连接进行管理和监控连接状态:监听新的调用;建立并维护地址空间的远程对象表:建立新调用的连定位远程调用的调度程序,并建立与此调度程序的连接。在这种体系结构中每个RMI服务都由一个接口定义,该接口描述了可以远程执行的对象方法。可以创建接口的多个实现,而且开发者无需了解使用的是哪个实现以及该实现位于何处。另外.用于进行远程调用的对象称为客户机对象,远程对象称为服务器对象:客户机与服务器的职责完全可能在某个位置上互相对换,进行前一个方法调用的服务器本身,在它调用驻留在另一个计算机上的远程方法时.将变成客户机。因此,基于这种体系结构开发大型系统时可以将复杂的逻辑处理分散于不同的服务器中.更便于分布式系统的开发。其优点有以下几方面:(1)面向对象:RMI可将完整的对象作为参数和返回值进行传递,而不仅仅是预定义的数据类型。(2)可移动属性:RMI可将属性(类实现程序)从客户机移动到服务器,或者从服务器移到客户机。(3)安全:RMI采取了Java内置的安全机制,可保证下载执行程序时用户系统的安全。(4)可连接现有/原有的系统:RMl可通过Java本机方法接口JNI与现有系统进行交互。(5)编写一次,到处运行:RMI是Java“编写一次,到处运行”方法的一部分。任何基于RMI的系统均可100%地移植到任何Java虚拟机上,RMI/JDBC系统也不例外。(6)分布式垃圾收集:RMI采用其分布式垃圾收集功能收集不再被网络中任何客户程序所引用的远程服务对象。(7)并行计算:RMI采用多线程处理方法,可使服务器利用这些Java线程更好地并行处理客户端的请求。5.JAVARMI分布计算的步骤基于上节的论述,接下来讨论RMI的实现所需步骤:(1).定义远程接口:这一步是最主要的部分,因为接口是连接服务器和客户机的关键部分。它包含了远程调用所需要的方法。通常在java中只能实现单一继承,而使用接口后可以实现多类继承。为了使用RMI,不仅要继承JAVA的RMI类,还要继承用户自己定义的类。因此使用接口。此类中只定义远程调用方法和变量的声明,而方法的具体实现则由接口派生出来的类来完成。(2).实现远程服务器上接口的方法:定义了服务器接口,下一步就是实现它。这个实现将给出每个方法的功能,也可以定义其他的方法。然后,只能由RMI服务器接口所定义的方法才能远程访问。(3).创建服务器对象的服务器程序:在服务器上首先要创建两个服务器对象。然后使用Naming.rebind()方法,将这个对象和一个名称联系(绑定)在一起。这个名称就是客户机查找服务器对象所使用的名称。Naming是java.rmi包中的类。这个类的作用是建立一套查找对象的命名机制。通过它就可以将绑定在特定名称上的对象找到。(4).编写客户端代码:创建一个任务,并规定如何执行这个任务。客户只需取得指向远程接口的对象引用,而不需关心怎样发送和接收消息以及服务位置。由于RMI的存在,系统可以做到:可以直接通过名字定位远程方法的位置,可以参数的形式将一个对象传递给一个远程方法可以使一个对象到另外一个虚拟机上运行计算结果可以返回6.JAVARMI实现分布计算的实例下面通过一个简单的实例来说明具体实现的方法。创建一个提供RMI服务的远程对象,这个对象只提供一个方法BubbleSort(),调用一个整型数组作为参数,进行冒泡排序后返回结果。然后在客户机上运行客户程序,提供两个整型数组,分别调用远程方法BubbleSort(),最后再将两个已经排好序的数组归并成一个有序数组。本文数组分块思想将第一个数组A(m*l)按列分块,将第二个数组B(l*n)按行分块。A的第一列与B的第一行分块到第一块。做矩阵乘法。乘出的矩阵k1(m*n)。将分块的矩阵都加起来就得到最后的A*B矩阵相乘的结果。不论A,B的矩阵形势是如何?都可以按进程个数循环的将分块交给远程方法执行。本例是3个进程。数组是A(5*3)*B(3*5)最后乘的矩阵C(5*5)(1)定义一个远程接口:importjava.rmi.Remot
本文标题:基于JavaRMI的分布式计算
链接地址:https://www.777doc.com/doc-6302218 .html