几种分布式计算模型的分析与比较

时间:2023-04-26 11:30:06 公文范文 来源:网友投稿

摘要:分布式计算是当前计算机技术的一个重要发展方向。该文主要分析比较了4种分布式计算模型的体系结构及其构件规范,即OMG组织推出的CORBA;用Java语言开发的分布式对象模型RMI;COM;Web服务。对4种分布式计算模型的比较有助于读者更好的理解各种分布式计算模型的体系结构。

关键词:分布式计算;ORBA;RMI;COM;Web服务

中图分类号:TP393文献标识码:A文章编号:1009-3044(2011)24-5938-03

随着计算机硬件技术与网络通信技术的迅速发展,计算机软件的规模和复杂度已经成为制约应用需求增长的重要方面。同时,由于硬件性能得到了大幅提升,对软件系统的体系结构进行研究远远重要于对算法与数据结构的研究。目前分布对象技术已经成为建立应用框架和软件构件的核心技术,在开发大型分布式应用系统中表现出强大的生命力,并形成了三项具有代表性的主流技术,即OMG的CORBA、Sun公司的J2EE、微软的DNA。CORBA、J2EE、DNA皆是在网络环境中从系统底层角度看待软件的体系结构。此外,随着Web的广泛应用,用于在Web上通过标准协议提供分布式软件服务的Web Service也提供了一种跨Internet的分布式计算体系结构。

1 4种典型的分布式计算模型及其体系结构

1.1 公共对象请求代理结构CORBA

对象管理组织OMG(Object Management Group)是计算机工业界的一个非赢利性组织。OMG在1990年提出了对象管理体系结构OMA(Object Management Architecture),并在后来进行了修订。OMA包括对象模型和参考模型两部分,其在参考模型中定义了CORBA(Common Object Request Broker Architecture),即公共对象请求代理结构。CORBA的4各主要部分为:应用对象、对象服务、公共设施和对象请求代理。其中对象请求代理简称ORB是OMA的核心,它定义了CORBA的对象总线,负责在对象间建立联系、进行通信,使对象在分布式环境中透明地收发请求和响应。

CORBA体系结构以对象管理体系结构OMA为基础,如图1所示。

图1中对象请求代理ORB是关系模型的核心。它提供创建和接收调用的基本机制。ORB与对象服务相结合,确保符合CORBA规范的应用组件间的有效通信。OMA为构建分布式应用定义了非常广泛的服务,划分为3层,分别称为CORBA服务(Services), CORBA设施(Facilities)和应用程序对象(Application Objects)。当应用程序需要访问这些服务时,就需要ORB通信框架。

作为OMA参考模型的核心,对象请求代理ORB是建立基于分布式对象的应用程序的基础。它使得分布式对象之间能够透明地发送请求或接收响应。在CORBA中,所有的通信都通过ORB进行,因而无论一个对象是本地的还是远程的,对于与之进行通信的其他对象来说都是等价的。同时,它保证了在异构和同构环境中对象的可移植性和可操作性。

CORBA对象服务(Object Services)是对象管理体系结构OMA定义的一系列独立于应用领域的服务。CORBA服务是开发分布式应用所必需的模块,用来提供基本的ORB功能之上的更高系统级的服务。它主要处理核心系统级功能,如异步事件管理、持久性和事务、安全性、并发等。

CORBA对象设施(Facilities)是IDL定义的、向终端用户应用程序提供的一组服务接口的集合。CORBA对象设施可用于大多数应用领域,包括分布式文档设施、打印设施、数据库设施、电子邮件设施等。CORBA设施对于开发分布式应用不是必需的,但是在某些情况下是有用的。

应用程序对象(Application Objects)位于整个OMA参考模型的最高层。它们不是由OMA来标准化的,而是符合传统上对应用程序的认识。

1.2 基于Java平台的分布式计算

Java远程方法调用,即Java RMI(Remote Method Invocation)是JSDK的一部分,是一个支持分布式计算应用程序的远程方法调用和返回的API。在RMI中,任何一个可以被其他Java虚拟机调用其方法的对象被称为远程对象。远程对象是网络对象,调用它们的客户或其他远程对象的地理位置是透明的,既可能位于同一地址空间内,也可能是跨越了互联网的调用。RMI在处理本地调用和分布式对象的方法调用时,使用几乎相同的编程模型,并假设调用方法和被调用方法都是用Java语言。

RMI依赖于接口。在需要创建一个远程对象的时候,通过传递一个接口来隐藏基层的实施细节。所以客户得到远程对象的一个句柄时,它们真正得到的是接口句柄。这个句柄正好同一些本地的根代码连接,由根代码负责通过网络通信,客户不必关心这些事情,只需通过自己的接口句柄发送消息即可。RMI的宗旨就是尽可能简化远程对象的使用。在客户程序中要做的唯一一件额外的事情就是查找并从服务器取回远程接口。

在分布式Java应用程序中,RMI使用存根(stub)和框架(skeleton)的机制与远程对象通信,如图2所示。它实际调用一个称为存根的客户机对象,这个对象代表了被调用的服务器对象。该存根调用客户机上的RMI基础结构,并通过网络将数据传给服务器上的RMI基础结构,其中服务器的RMI基础结构接下来调用称为框架的服务器对象。然后,该框架对象调用实际的服务器对象方法。返回时,逆序调用同一机制,从而将返回参数传递给服务器框架对象,再用RMI基础结构通过网络传递,并调用客户机存根对象,最后返回至实际调用对象。

远程对象的存根的作用下相当于远程对象的客户的本地代理。远程对象的存根和该远程对象具有相同的远程接口集。调用程序将调用本地存根的方法,而本地存根完成对远程对象的方法调用。存根将参数的序列化和网络通信等细节评比起来,这样从调用程序的角度来看调用是简单的。

图3给出了一个典型的RMI应用程序的部署。其中,客户端对象包括:Example.class、ExampleClient.class、ExampleServer_Stub.class。服务器对象包括:ExampleServer.Class、Server.Class、Example.class、ExampleServer_Stub.class。

1.3 微软COM

COM(Compontent Object Model)定义了组件和它们的客户(可以是其他组件)之间相互作用的方式,它可以使组件对象和客户程序不需要经过任何中介组件就能以一种统一的方式相互通信。复杂的应用程序被设计成一些小的、功能单一的组件模块,这些组件模块可以运行在同一台机器上,也可以运行在不同的机器上。而且,微软把COM技术用在了Windows系统的各个层次上。从操作系统级的COM对象一直到应用级的COM对象。

COM组件在形式上是DLL文件或EXE文件形式发布的二进制可执行代码;在功能上,可以认为它是一组可由应用程序、操作系统以及其他COM组件动态调用的API函数。COM组件用一个矩形表示,其接口用“插孔”表示。如图4所示为COM接口在内存中的物理数据结构。右侧是一个函数指针数组,称作虚拟函数表(vtbl),其中的每个数组成员包含一个由组件实现的函数的地址;左侧是一个指向vtbl的指针,称作vtbl指针。指向接口的指针就是一个指向vtbl指针的指针。可以看出,vtbl指针是由接口指针到vtbl的中间环节,这给接口的实现带来了极大的灵活性。

COM通过严格隔离客户和组件,使得它独立于客户的组件更新、升级成为可能。一方面,进行组建的更新或升级后,只要保持其中老接口不变,无需重新编译和链接即可继续使用原客户程序,而新定制的客户程序可使用更新后组件中的新接口,从而获得新特性或功能;另一方面,如果更新或升级了客户程序,而组件并没有更新,这时只要新的客户程序仍旧支持老的接口,则依然可以运行,只是无法实现一些新的特性或功能。这样就易于实现组件和客户程序的更新、升级和替换。

包容和聚合提供了两种在开发中重用已有的COM组件的手段。在处理客户提出的对内部组件接口的请求时,包容方法采用的方式是由外部组件接收此请求再交由内部组件来处理,而聚合方法采用的方式是让内部组件直接处理该请求。这两种方法的共同点是:客户对内部组件的存在与否及存在方式是全然不知的。这也正达到了客户程序与组件的分离。

1.4 Web服务

Web服务是通过标准的Web协议(多数情况下是使用简单对象访问协议SOAP)提供的一种分布式软件服务,它使用Web服务描述语言文件进行说明,并按照统一描述、发现和集成(UDDI)规范进行注册。Web服务的一个重要思想,就是未来的应用程序将在一组网络服务的基础上组合而成。

Web服务包括3个层次上的内容:基本的通信格式、服务描述和服务的发现。

简单对象访问协议(SOAP)是XML的实施工具,它提供了一套公共规则集,该规则集说明了如何表示并扩展数据和命令。

Web服务描述语言(WSDL)是一种XML语法,开发人员和开发工具可是用它来表述Web服务的具体功能。双方应用程序在得到了如何表示数据类型和命令的规则后,需要对所接收的特定数据和命令进行有效的描述。

Web服务体系结构是面向对象分析与设计的逻辑演化,同时也是组件化的电子商务解决方案逻辑演化。与面向对象系统一样,封装、消息传递、动态绑定、服务描述和查询也是Web服务的基本概念。此外,Web服务的另一个基本概念就是:一切都是服务。Web服务的体系结构中共有3种角色如图5所示。

图5中Web服务提供者主要负责发布自己的服务并且响应对其服务发出的调用请求。服务中介则主要负责注册已经发布的服务提供者,对其分类,并提供搜索服务。服务请求者利用服务中介查找所需的服务,然后使用该务。

2 4种分布式计算模型体系结构的对比

Java RMI、CORBA和COM作为3种主流的远程过程调用技术,它们是类似的,而且各自之间也有一定的联系,但它们的区别也是很大的。Java RMI对程序语言有特定的要求,即只能使用Java语言,COM只能使用Windows操作系统平台,而CORBA则需要支持它的特定运行环境和平台。

尽管Java RMI和CORBA是类似的,但Java RMI为基于Java语言的分布对象计算所提供的模型要简单得多。另外,Java RMI在安全性和兼容性等方面也都优于CORBA。Java RMI使用Java内置的安全机制保证下载执行程序时用户系统的安全。RMI使用专门为保护系统免遭恶意程序侵害而设计的安全管理程序,可保护系统和网络免遭潜在的恶意下载程序的破坏。Java RMI可通过Java的本机方法接口与现有系统进行交互,这样就能用Java语言编写客户端程序,还能使用现有的服务器端程序,体现了良好的兼容性。

CORBA与Java RMI相比最大的优势在于它能够解决分布式系统在硬件平台、操作系统等多个层次上存在的异构问题。另外,CORBA也有利于软件构件的服用。

COM分布式应用可以将计算分布到整个网络上,但COM组件需要注册或发布才能使用,并且COM是平台相关的,只能基于Windows操作系统。

与Web服务相比,CORBA、Java RMI和COM有一个共同的缺陷,即难以扩展到互联网上:它们要求服务的客户与服务本身之间必须紧密耦合。Web服务是松散耦合的,它通过诸如HTTP、SMTP以及发挥了核心作用的XML等在Web上广泛应用的标准协议来实现统一的连接,使人们转向使用基于消息的异步技术来实现具有高可靠性的系统。

3 总结

本文主要分析比较了4分布式计算模型的体系结构,重点在于从体系结构的观点来考察这些技术。CORBA以对象管理体系结构OMA为基础。其中,对象请求代理ORB是关系模型的核心。Java RMI是以同构的Java虚拟机环境为基础的一种进程间通信、远程执行代码解决方案。COM是微软基于组件的软件解决方案的基础。Web服务是通过标准协议跨Internet提供软件服务的分布式计算体系结构。

参考文献:

[1] 冯冲,江贺,冯静芳.软件体系结构理论与实践[M].北京:人民邮电出版社,2004.

[2] 邓传军, 马志民.分布式计算模型探讨[J].江西科技师范学院学报,2005(4).

[3] 覃征,邢剑宽,郑翔.Software Architecture[M].杭州:浙江大学出版社,2008.

[4] 骆志刚.分布式计算[M].北京:电子工业出版社,2008.

[5] 汪维华,汪维富,基于Web服务的分布式计算模型研究[J].计算机工程与设计,2008(17).

[6] 甘娜,郑强,潘山.基于J2EE的分布式计算模型设计[J].计算机与现代化,2009(7).

注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文

推荐访问:几种 分布式 模型 计算 分析