全部博文(322)
分类: Java
2010-11-04 18:09:28
一、分布式计算与组件模型标准
全球性网络使联机的所有设备和软件成为全球共享的浩翰的资源,计算机环境也从集中式发展到分布式。开放式系统的发展使用户能够透明地应用由不同厂商制造的不同机型、不同平台所组成的异构型计算资源,因此,分布式处理和应用集成自然而然地成为人们共同的要求。
而在这种开放式分布系统中,如果再用传统的集中管理的固化接口方式根本无法适应其灵活多变的要求。进而希望能够提供一种方式,使客户在要求其他系统提供服务时,能够不必知道所有的服务是由谁及用什么方式来提供。而提供服务的软件或部件可以用不同语言实现,运行在不同的机器、平台上。这将极大方便处理网络计算时代应用软件所要求的那种复杂性。
我们用“互操作性”一词 来描述两个或多个软件组件合作的能力(即使其实现的编程语言、接口及运行平台是在完全不同的情况下)。
考虑一个家电产品(如电冰箱),要利用发电设备的服务(如供电)时,人们是通过接插件来完成二者的联结的。如果想达到二者能够正常地一起工作,要求插头与插口间满足表态相容性(插头、插口形状相配)和动态相容性(电压、频率、功能方面符合要求)。若不相容可再加上适配器和变换器。接插件的标准化给各种产品组合成更大系统提供了极大的方便。
对软件组件来说,处理互操作性的方案之一就是可以采用类似于这种独立于产品的插头和插口的接口技术。这里所谓静态相容,是指调用与被调用的过程能够满足类型检查的要求,动态相容则要求所提供的服务能够满足客户的要求。
当适当加入正确的针对组件间互操作和便携性的标准后,组件的集成得到一个一致的能运行的系统。
目前有两类处理软件组件互操作性要求的组件接口技术。一类称为标准化接口(interface standardigation),一类称为接口桥(interface bridging)。前者要求客户组件与服务组件的接口都变换成共同的标准形式。这种技术总的说来工作量较小,如n个组件间交互协作,只要作n种变换。但这是一种封闭的机制,灵活性差一些。如果产生新的组件要求,已制定的标准也许无法适应新需要。而用接口桥来处理n个组件间协同工作所需的交互,则需要数量级为n(n-1)种的映射。当然,这是一种开放式的机制,如果要加入任意一种新的部件来与原来n种组件交互,只要再增加n种映射即可。这是一种极为灵活、但实现工作量极大的方案。
当然,对于组件来说,除了互操作性外,支持分布式的网络计算还有更多的需求。国际上将兼容异种成分的分布式处理,称为开放分布式处理。概括地讲,开放分布式处理要达到以下几个方面的透明性:
1) 存取透明:隐藏数据表示和调用机制的异同,使用同样的方式存取数据;
2) 失败透明:将出错和恢复事件隐藏在对象内部,以达到容错的目的;
3) 位置透明:隐藏接口的空间位置,用户不需关心接口是哪里提供的;
4) 迁移透明:外界不需要知道系统为使用资源均衡而改变对象的位置;
5) 持久性透明:对象里隐藏着所有资源的变化,如处理器资源、存储资源的冻结与解;
6) 重定位透明:改变一个接口的位置不影响与之关联的其他接口;
7) 复制透明:为提高性能,能同时有多个行为相同的对象支持某一个接口,而用户不需要知道有多个对象存在;
8) 提交透明:一组对象发生作用的次序不影响结果的一致性。
为了达到以上几个方面的要求,就不能任意地构造软件组件,必须研究组件软件的特点,或组件软件的体系结构和组件间的接口方式。相应的软件组件系统的体系结构和组件接口标准等有关的概念应运而生。微软、IBM等公司都注意到这一点,并且各自提出了软件部件的接口标准,其中最有代表性的有以下几种:
1) Microsoft提出的COM/DCOM,现在已演变成为.NET;
2) OMG标准组织提出的CORBA;
3) Sun提出的EJB,现已朝着Sun One演变;
二、CORBA简介
CORBA是common object request broker architecture,公共对象请求代理体系结构的缩写,它是由IBM、HP等多家公司联合开发的组件软件的体系结构和组件接口标准。1997年8月出版的CORBA 2.1的版本页上已有21个公司和组织了。而支持CORBA的对象管理集团OMG已达750家公司。
整个CORBA平台的组成结构如下图所示:
图1 CORBA结构示意图
在CORBA体系结构的中心部分是对象请求代理程序(Object Request Broker,ORB),它作为一个“软件总线”来连接网络上的不同对象。在客户端,ORB提供一个发送操作调用的接口;而在服务器端,ORB提供一个将操作调用传输到服务器的API。ORB的任务是定位一个合适的服务器,并且通过一个对象适配器(Object Adapter,OA)将操作调用传送给服务器。OA的目的是:给框架发送方法,调用并且支持服务器对象的生命周期(例如,对象的建立和删除)。老版本的CORBA规范包含一个基本对象适配器(Basic Object Adapter,BOA),就像它的名字一样,BOA是十分简单的。它定制的也不是很好,它禁止CORBA应用程序的可移植性。作为CORBA标准的版本2.2,BOA被可对象适配器(Portable Object Adapter,POA)所取代。MICO支持BOA和POA。
在客户端,ORB提供一个一般的API,它是一个动态调用接口(Dynamic Invocation Interface,DII)来发送操作调用。在服务器端,OA通过动态框架接口(Dynamic Skeleton Interface,DSI)来传输一个操作调用,它为服务器端镜像DII的行为。一个在客户和服务器之间的静态接口通过一种接口定义语言(Interface Definition Language,IDL)来定义。虽然DII和DSI代表到ORB的一般接口,并且通常被用于桥,但一个IDL规范可以用于产生到ORB的类型安全的、应用特定的接口。
在客户端,客户与ORB之间的静态接口被称为静态调用接口(Static Invocation Interface,SII),在服务器端,这个接口被称为静态框架接口(Static Skeleton Interface,SSI)。一个IDL编译器从一个IDL规范来生成一个存根stub和一个框架skeketon。存根的功能类似于一个客户代理,而框架负责发送一个操作调作给一个真正的此操作的实现程序。 以上文章内容均为网络转载或者本站会员原创,不对文章内容做任何保证。
CORBA也定义了两个运行时的数据库。接口存储库(Interface Repository,IR)包含运行时所需要的IDL规范。IR可以查询用户定义的IDL类型的详细情况,从而提供一个基本类型映射机制。第二个数据库被称为实现存储库(Implementation Repository,IMR),并且它包含服务器的详细信息(即,哪一个执行程序需要被放置到哪一个服务器上)。OA需要这个信息来自动激活服务器。
CORBA标准也包含一个ORB之间的协议,它被称为互联网ORB之间的协议(Internet Inter-ORB Protocol,IIOP),它描述了基本的和结构化的IDL类型的在线表示,以及协议所需的协议数据单元。设计IIOP的目的是使它保持简单、可升级并且通作。IIOP使用TCP/IP来在不同的ORB之间传输操作调作和它们的参数。
最后,需要说明一点,CORBA是一个规范而不是一个程序实现。CORBA提供了一个允许在分布式和异构型环境中的应用程序之间进行互操作的框架,但是关于如何实现CORBA标准的特定技术,它并没有给出任何规定。因此,目前在市场上有许许多的CORBA程序实现,如Iona的Orbix,Inprise的VisiBroker,不过它们十分昂贵,因此对于想学习CORBA的同仁来说,很难找到一个实验环境,而今天我们就要解决这一问题。
三、MICO简介
MICO,是MICO is corba的缩写(BTW,这是一个十分GNU的名称,GUN就是GNU is not UNIX)。正如我们前面说的,CORBA的商业化的实现环境十分昂贵,爱好者很难搭建CORBA环境进行学习、练习。所以这个时候MICO出现了,由于MICO是一个开源软件,你可以自由获得,并且可以得到它的源代码,最关键的是MICO是一个完全符合CORBA标准的实现。
MICO自从1997年4月第一次发布以来,现在已广泛用于各种目的,并被OMG认证为符合CORBA标准。这一切都需要感谢MICO的作者Arno Puder(在Kaiserslautern大学的计算机科学系取得学士学位,并在Frankfurt大学取得博士学位。现在Deutsche Telecom AG工作,致力于与CORBA相关的开发项目。他的专长领域包括分布式系统和普通计算环境)和Kay Romer(在Frankfurt/Main大学计算机科学系取得学士学位,现在,他是一名ETH Zurich的在读博士。他尤其专长于分布式系统和操作系统。除了他的学业之外,他还从事于操作系统、分布式系统、图形视窗系统、计算机图形方面的开发项目)。让我们一起向他们的无私奉献致于真挚的感谢。
MICO已日趋完整,以下是当前最新版本的主要特性表:
1) IDL到C++映射;
2) 对动态编程的全面支持:动态调用接口DII、动态框架接口DSI、接口存储库IR、动态Any;
3) 可移植的对象适配器POA;
4) 值类型语义(Value Type Semantics);
5) 互联网ORB之间的协议IIOP;
6) 在SSL之上的IIOP;
7) 模块化的ORB设计:即使在运行时使用加载的模块,新的传输协议和对象适配器也可以很容易地链接到ORB;
8) 支持嵌套调用;
9) 监听;
10)Any提供接口来插入和取出在编译时程序不认识的构造类型;
11)Any和TypeCode支持RM-ODP中定义的递归子类型;
12)完全的BOA实现,包括所有的激活模式,支持对象转、对象持久性,以及存储库的实现;
13)在运行时,BOA可以使用加载模块在客户端加载对象实现;
14)支持使用X11应用程序(Xt、Gtk、Tcl和Qt)内部的MICO;
15)符合公用对象服务规范的可互操作的命名、事件、属性、关系、时间和交易服务;
16)图形界面的接口存储库IR浏览器允许你在任意接口调用任意方法。
现在MICO可以运行在以下平台:
1) Sun SPARC上r的Solaris;
2) IBM RS/6000上的AIX;
3) Intel x86上的Linux;
4) DEC上的Digital Unix;
5) PA-RISC上的HP-UX
6) Windows NT .0和Windows 95