作者:
出处:1.分布式对传统面向对象特性的影响:
a.封装性的影响:
在分布式对象系统中,对象不仅要屏蔽有关的算法和数据结构,还需要屏蔽“系统是分布的”这一特性,提供 分布透明性。
- 位置透明性:用户不必关心对象位于何处
- 访问透明性:可用一致的方式访问不同类型的机器上的对象
- 持久透明性:对象所处的状态既可以是活动的,也可以是静止的
- 重定位透明性:对象的位置可以变化而不影响对它的调用
- 迁移透明性:系统内部可以迁移对象的位置
- 失败透明性:屏蔽被访问对象的失败及恢复过程 (容错)
- 事务处理透明性:与事务处理相关的调度、监控和恢复
- 复制透明性:用户不知道有多少个对象副本存在
b.继承性的影响:
分布对象计算系统中都不支持跨站点的继承性,因为实现代价太大。在实际中,把对象分为接口和对象实现。接口由接口定义语言IDL来描述,对象实现的方式则根据具体的编程语言而定。从接口继承出发,系统首先根据接口的继承关系生成接口的继承关系图,当客户请求某一个接口中所描述的某个服务时,如果系统检查到与该服务所对应的对象实现不存在时,根据接口的继承关系图,向客户返回一个能够提供该服务,并且相应的对象实现又存在的对象的访问信息。
c.对象引用的影响:
分布式系统中,对象引用需要由一个较复杂的数据结构来表示。需要充分考虑到由系统的分布所带来的一些问题,如网络协议、网络地址和对象的迁移等。
2.开放式分布处理ODP(Open Distributed Processing)
a.基本目标和要点:试图解决分布环境下的软件接口问题,达到 可移植性、互操作性和分布透明性。
b.基本策略:开放 ——必须使分布式计算的所有相关机制都具有开放性, 包括通信协议, 应用编程接口(API), 人机接口(MMI)等.除了通信机制以外,还需要信息共享机制和对象控制机制的支持,也就是说开放式系统 = 通信机制 + 信息共享机制 + 对象控制机制。
c.ISO和ITU-T 的开放式分布处理模型Reference Model of Open Distributed Processing(RM-ODP)
ISO的一个标准,是一种 “元标准 (Meta- Standard)”——RM-ODP能够协调和指导不同应用领域的ODP标准的开发。 即它是一种框架, 在其上可实现不同的”分布计算环境”。目的就是为软件架构师提供一个参考模型.以应对日益复杂的分布式应用.
其实ODP主要包含三部分:
- 视点:为清晰地描述复杂的系统,把对ODP系统的说明细化为五个视点(即从五个不同的角度来观察),以及用于表达这五个视点的语言。
RM-ODP是基于面向对象技术的,它定义了信息系统体系结构的含义,作为一种使我们了解软件体系结构的方法,它代表了当今成熟的软件体系结构实践.RM-ODP定义了5个基本视点并将他们用于系统建模,每一个视点代表了对原始系统的不同抽象, “分而治之”:
企业视点(Enterprise view point) :分析系统目的、商业需求、策略和系统范围的视点。 RM-ODP处理与企业层面有关的信息,例如组织结构和政策等
信息视点(Information view point) :指信息的结构,当中包括信息的变化、流程、及不同功能上的逻辑分割。
计算视点(Computational view point): 从系统设计者和编程者的角度将系统的功能分解成功能对象(计算对象),描述对象内部的活动及对象间的交互过程。着重于把系统的分解(decomposition)成相对的实体(entities)及接口(interfaces)。
工程视点(Engineering view point):定义了一个网络计算基础设施,支持计算视点中所说明的系统结构,提供所需的分布式透明服务。 处理有关分布式系统对象间的交互 (interaction),及描述如何支持有关的互换(interaction)。
技术视点(Technology view point):定义有关系统的软件及硬件组件(components)
这5个视点为单独的信息系统提供了一个综合性的模型
- 透明性:开放式分布处理系统应该提供的八个透明性。
访问透明性:客户对象在和服务器对象交互时,不用了解和实现相关的特定调用的方式和数据表示方法,使得对象可以屏蔽异质计算机系统(如Windows和Unix环境)和编程语言(如C++、Ada、Java)带来的差异。例如:NFS、Web环境中的航行、SQL查询。实现方式为通过客户端和服务器端的存根对象(Stub)封装访问的细节。
位置透明性:意味着客户对象在和服务器对象交互时,不用了解服务器对象的实际位置。对对象接口的访问是和对象实际的物理位置无关的。在应用实现时,应用组件是否分布,或者如何分布都不用关心。构造出来的系统可以在不同的分布模式下运行。例如:NFS、Web中的页面、分布式数据库中的表。实现方式为:位置透明性通过核心和通道内的联编对象(binder)实现。在ODP工程模型中对象接口通过其接口引用(interface reference)来标识。当客户对象要调用服务器对象某接口上的操作时,它只需获得该接口的引用即可,接口引用由核心产生,并能被联编对象解释,其结构对应用来说是透明的。
重置透明性:在联编时可以屏蔽掉参与联编的接口是否发生重置(位置改变)。保证对象接口在联编的过程中发生位置改变时也能对应用透明。例如:呼叫遇忙前转。实现机制是重置透明性通过通道内的联编对象(binder)和通道外的重置对象(relocator) 来实现。本地的联编对象可以将它所支持的接口引用通知重置对象,也能从重置对象中获得迁移了的接口的新的引用标识。当对象接口的位置发生改变时,使用旧的接口引用会发生错误,这种错误被联编对象截获,并通过访问重置对象获得该接口新的引用标识,然后将信息自动发送到新的位置。整个过程对应用来说是透明的。
迁移透明性:系统对对象位置的改变对该对象是透明的。当系统有附加的移动需求时,可以通过迁移透明性来满足该要求。 类似的概念:移动终端。
持久透明性:意味着客户对象在和服务器对象交互时,不用了解服务器对象激活或者去激活的过程。可以将当前不在活动中的对象簇从执行环境中转换到存储环境中,在有对象需要和其交互时,将其重新从存储环境转换到执行环境中。类似的概念为OS的页面管理技术。
复制透明性:用一组相互间行为兼容的对象支持同一个接口,且对该接口的使用者是透明的(屏蔽了如何在这些对象间分配操作以及如何保持状态的一致性等)。使得系统的容错性能更好,或者提高服务的处理能力,而和其它分布透明性一样,其实现机制在应用语义中都不用考虑。类似的概念:Web页面镜像、Web-caching。
故障透明性:对一个对象屏蔽掉其它对象可能的故障故障恢复情况,使得系统具有更强的容错能力。
事务透明性:为了实现的一致性,屏蔽对一组相关对象活动的内部协调机制(满足事务的基本特征)。使得应用只需对事务方案进行定义,而屏蔽掉复杂的事务处理机制。
- 功能:定义开放式分布处理平台应该具有的功能。RM-ODP定义了用来支持RM-ODP平台的4组24种通用功能。灵活地利用这些功能可以近于无缝地实现ODP系统的目标。
管理功能:对工程模型中分布式平台基本组成要素的管理。例:对进程、线程的管理、时间的访问和管理、通道的建立以及工程对象接口引用的创建等;
协调功能:协调多个对象之间的交互以满足某种特定需要的功能。例:时间通知功能实现分布式系统下的异步事件分发机制;事件通知功能将实时到来的事件发送到对其感兴趣的所有事件消费者。
仓库功能:提供了分布式系统所需要的动态和静态信息的存储和检索功能。例:类型仓库功能帮助实现对ODP系统中类型和类型之间的关系的存储和检索功能,引用可以动态访问该功能获得相关的类型信息。
安全功能:提供了分布式系统所需要的动态和静态信息的存储和检索功能。例:类型仓库功能帮助实现对ODP系统中类型和类型之间的关系的存储和检索功能,引用可以动态访问该功能获得相关的类型信息。
总述:RM- ODP是个ISO标准,和这个组织制定的7层网络参考模型一样,有一些地方过于复杂了,它采用了CORBA的接口定义语言作为特定的计算体系结构的描述语言,对于现在流行的.NET和java分布式处理技术来说其复杂性有可能增加了.而后两者是现在实际上的技术标准,也许RM-ODP又会重走ISO7层模型的覆辙.但是作为一个软件体系结构的参考模型,RM-ODP是可以不依赖于具体技术的.将.net和java的分布式处理技术应用于RM-ODP将是一个有趣的实践.
3.CORBA技术
a.基本概念:CORBA(Common Object Request Broker Architecture,公共对象请求代理体系结构,通用对象请求代理体系结构)是由OMG组织制订的一种标准的面向对象应用程 序体系规范,是开放式分布处理思想的一个实现。或者说 CORBA体系结构是对象管理组织(OMG)为解决分布式处理环境(DCE)中,硬件和软件系统的互连而提出的一种解决方案;结合了计算机工业中的两个重要趋势:面向对象软件开发和客户机/服务器计算。CORBA是在面向对象标准化和互操作性道路上的一个信号。通过CORBA,用户不必要知道软硬件的平台和他们处在企业网的什么地方就可以操作。
b.对象管理体系结构OMA:
该模型描述了OMG规范所遵循的概念化的基础结构。OMA由对象请求代理ORB、对象服务、公共设施、域接口和应用接口这几个部分组成,其核心部分是对象请求代理ORB(Object Request Broker)。对象服务是为使用和实现对象而提供的基本服务集合;公共设施是向终端用户应用程序提供的一组共享服务接口;域接口是为应用领域服务而提供的接口;应用接口是由开发商提供的产品,用于它们的接口,不属于OMG标准的内容。ORB提供了一种机制,通过这种机制,对象可以透明的发出请求和接收响应。分布的、可以互操作的对象可以利用ORB构造可以互操作的应用。
在传统的客户/服务器程序中,开发者使用他们自己设计的或者公认的标准定义设备之间的协议。协议的定义依赖于实现的语言,网络的传输和其他许许多多因素。ORB 将这个过程简单化。使用ORB,协议定义是通过应用接口,而该接口是接口定义语言(IDL)的一个实现,他和使用的编程语言无关的。并且ORB提供了很大的灵活性。ORB是负责屏蔽底层网络通信细节的协议 。 他让程序员选择最适当的操作系统,运行环境和设计语言来建设系统中每个组件。更重要的是,他允许集成已经存在的组件。
CORBA不只定义了面向对象的远程调用机制,它还定义了不同抽象层次的框架。
c.IDL语言:
IDL(Interface Definition Language)即接口定义语言,是CORBA规范的一部分,是跨平台开发的基础。本质上讲,OMG IDL接口定义语言不是作为程序设计语言体现在CORBA体系结构中的,而是用来描述产生对象调用请求的客户对象和服务对象之间的接口的语言。OMG IDL文件描述数据类型和方法框架,而服务对象则为一个指定的对象实现提供上述数据和方法。IDL文件描述了服务器提供的服务功能,客户机可以根据该接口文件描述的方法向服务器提出业务请求。IDL分隔“对象作什麽 (WHAT)”与“如何做 (HOW)”,强类型、面向对象、语言中立的说明(描述)型语言,是ANSI C++ 的子集,它支持多继承,支持到多种语言的映射。
OMG IDL文件编译过程如下图:
IDL语言的位置和作用:
模块(module):含有许多功能进行分组的接口,形成附加的分层结构,因此,模块定义了一个命名空间。
接口(interface):定义了数据和操作(方法),共客户调用。接口中可以包括类型、常量、属性和异常的声明。
操作(method):定义了客户可以调用的、处于对象中的服务。操作特性(signature)指操作的参数和返回的结果类型。
属性(attribute):接口中定义的数据。
数据类型:用于描述参数、属性、返回值以及异常等的允许值。
IDL与Java 及C++的对应关系:
IDL的使用:
d.对象请求代理ORB及相关组件
ORB是一个中间件,定义异构环境下对象透明地发送请求和接收响应的基本机制。它在对象间建立客户-服务器的关系。
当客户程序要调用远程对象上的方法时,首先要得到这个远程对象的引用,之后就可以像调用本地方法一样调用远程对象的方法。当发出一个调用时,实际上ORB会截取这个调用(通过客户Stub完成),因为客户和服务器可能在不同的网络、不同的操作系统上甚至用不同的语言实现,ORB还要负责将调用的名字、参数等编码成标准的方式 (称Marshaling)通过网络传输到服务器方(有时在同一台机器上也如此),并通过将参数Unmarshaling的过程,传到正确的对象上(这整个过程叫重定向,Redirecting),服务器对象完成处理后,ORB通过同样的Marshaling/Unmarshaling方式将结果返回给客户。客户不用知道对象在哪里,是什么语言实现的,他的操作系统以及其他和对象接口无关的东西。
几个概念:
- 接口:客户程序与对象实现之间的界面,描述了客户可访问的对象操作的一个集合;完全独立于对象所处的位置、实现对象的程序设计语言以及对象接口中未反映的其他特性;客户程序只能通过对象的接口定义掌握对象的逻辑结构,并通过发送请求来影响对象的行为与状态。对象接口采用接口定义语言IDL定义;
- 对象引用:临时的不透明的句柄,标识ORB中的一个对象实例。它用于定位响应请求的对象实现。
- 客户(Client):客户访问对象的对象引用,并且调用对象上的操作,客户只知道对象的接口,通过调用感受对象的行为。
- 接口库(IFR,InterFace Repository):ORB的一个组件,提供服务,用于接口定义的存储、查找和管理;CORBA对其接口进行了定义;
- 实现库(IR,Implemetation Repository):ORB的一个组件,用于存储对象实现的相关信息,如;如何定位对象实现,如何激活对象实现,以及其它的与ORB和操作系统相关的信息;OMG没有对其进行详细规范,与具体实现相关;
- 对象实现(Object Implementation):通过为对象实例定义数据和为对象方法定义代码提供对象的语义;对象可以具有不同的实现方式;对象实现不依赖于ORB或者客户调用对象的方式;一个对象的实现可以是其它对象的客户;
- 服务器:是一个(或一组)组件,能为其它组件提供某种服务。即,如果某个组件创建了一个对象,并能被其它组件通过对象引用来访问,则拥有对象的组件就是该对象的服务器,其它组件对这个对象的请求操作都将由创建该组件的服务器来执行。
- 静态IDL存根 (IDL stubs):编译时确定的的静态接口,位于客户对象本地, 对客户来说相当于远程的执行对象。由存根向ORB提交请求。负责对请求参数的封装和发送,以及对返回结果的接收和解封装,并以适当的格式进行通信传输。
- 静态IDL骨架 ( IDL skeletons ):在本地调用执行对象服务,并与ORB通信。针对执行对象来说,代表了远程客户。骨架接收经ORB来的请求,将请求参数解封装,识别客户所请求的服务,(向上)调用服务器中的对象实现,把执行结果封装,并将结果返回给客户程序。
- 动态调用接口(DII) :由ORB直接提供,不依赖于所调用对象的接口。支持客户方的动态请求调用,使客户方应用可以在运行时向任何对象发出请求,动态地选择对象的实现接口和操作。
- 动态骨架接口(DSI):由ORB直接提供,不依赖于所调用对象的接口。DII在Server方的对应。DSI允许用户在没有静态骨架信息的条件下来获得对象实现。一个由DII发起的请求可能由静态骨架来接受,也可以由DSI来接受。一个静态存根发起的请求可以由DSI来接受,也可以由静态骨架来接受。
- 动态调用的大致过程:
对比:
静态调用:优点——更易编程,提供了更强的类型校验,速度快,自编文档。缺点:不灵活,客户编译时需要存根
动态调用:优点——灵活、可扩展。客户可在调用时发现接口的相关信息,不需在编译时了解。允许服务器端增加新的类而无需在客户代码上进行修改。缺点——要对数据进行类型校验、速度慢。
选择:
使用范例 推荐的调用技术 客户频繁使用服务器对象,服务器对象无变化。
使用静态预编译存根 客户很少调用服务器对象 可使用DII 客户在运行时发现服务器对象 使用DII 客户在浏览器内运行,发现新对象 使用Applet和静态存根
- 对象适配器(Object Adaptor):一个重要的ORB组件,它负责将抽象的CORBA对象映射到具体的伺服对象(Servant,指具体程序设计语言的对象实例或实体,通常存在于一个服务程序进程之中)。它是管理服务端伺服对象、对象标识、对象引用及它们之间关联的主要工具。它负责决定在收到客户请求时应调用哪个伺服对象,然后调用该伺服对象上的合适操作。
不同类型:
BOA:Basic Object Adapter 伺服对象的注册和激活是进程级的; POA: Portable Object Adapter 伺服对象的注册和激活是对象级的;
动态绑定(dynamic binding) 出现在程序执行过程中的绑定(将程序中的符号地址转换成与存储相关的地址)。此术语经常是指运行期间确定哪些软件例程要求特定数据对象的面向对象的应用程序。也称为后期绑定 。 对象适配器必须提供必需的接口,使我们能执行这种绑定。问题在于,是什么触发了真正的绑定:是某种标准应用程序逻辑还是来到的请求?
1. 早期绑定 早期绑定通常描述的是某种标准应用程序逻辑通过对象适配器来执行绑定的情况。例如,一工厂对象可为创建新对象提供操作。这个操作的实现可创建一新的CORBA对象,并在返回新创建对象的引用之前激活一个伺服对象。因为CORBA对象现在是激活的-即存在对伺服对象的绑定-客户机现在可使用引用和激发新创建的CORBA对象。 2. 后期绑定 后期绑定意指绑定只能通过命令创建,即是在对象故障发生的情况下。如果在目标 的ORB运行时模块中所请求的目标对象和伺服对象之间不存在绑定,就会发生对象故障,即ORB不能为目标对象找出实现。 在对象故障的情况下, ORB可以要求应用程序提供一个伺服对象,以把这个伺服对象和目标对象绑定。如果应用程序不能完成这个请求, ORB就会引发异常以通知客户机被请求对象不存在。 创建后期绑定有两个选择:绑定只在请求期间被创建,或是绑定可以比请求生存得更久。在第一种情况中,下一个相同对象的请求会导致另一个对象故障,而第二种情况中绑定仍然存在(同时不需要任何动作来冻结伺服对象)。 下图显示了早期绑定和后期绑定的关系:基本上,早期绑定意味着应用程序采取主动。后期绑定意味着对象适配器请求应用程序提供一个伺服对象,以使绑定可以创建。这通常是通过伺服对象管理器来完成。伺服对象管理器是一个本地回调对象,由应用程序实现并注册到ORB,这样ORB在对象故障的情况下就可以激发它。
e.CORBA服务:代表了一组预先实现的,软件开发商通常需要的分布式对象。
- 命名服务(Naming Service):为客户程序通过名字查找对象实现提供支持。
- 事件服务(Event Service):使对象间的通信能够以松耦合的方式进行。
- 生命周期服务(Life Cycle Service):为对象的创建、删除、拷贝和移动提供支持。
- 持久状态服务(Persistent State Service):为对象持久状态的维护和管理提供支持。
- 事务服务(Transaction Service):为事务处理提供支持。
- 并发服务(Concurrency Service):为多个客户协调一致地同时访问共享资源提供支持。
- 关系服务(Relationship Service):为实体和它们之间地关系的外在表示提供支持。
- 外部服务(Externalization Service):为对象的外部化(externalizing)和 内在化(internalizing)提供支持.
- 查询服务(Query Service)::为客户在对象集合中查找满足某种查询标准的对象提供支持。
- 许可证服务(Licensing Service):为软件许可证的管理提供支持。
- 属性服务(Property Service):为对象属性的定义和操纵提供支持。
- 时间服务(Time Service):为客户获取当前时间以及可能的误差提供支持。
- 安全服务(Security Service):为基于CORBA的整个系统的安全提供支持。
- 交易对象服务(Trading Object Service): 为提供和查找具有特定属性的对象提供支持。
- 集合服务(Collections Service): 为创建以及操纵各种常用集合类型提供支持。
- 通知服务(Notification Service):对事件服务的扩展,支持事件的类型定义、过滤条件的设定、服务质量的设定等。
- 增强的时间视图服务(Enhanced View of Time Service ):为一致地使用具有各种自身特点的时钟提供支持。
f.CORBA应用
与Web技术的结合
采用先进的软件总线和面向对象技术,容易实现遗留系统的集成,符合标准的处理流程。易于与UML、MDA等设计工具集成;有大量熟悉它的人才;被许多业界的标准组织采用:3GPP、Parlay/OSA、NGOSS、OSSJ。电信领域超强的分布处理需求是CORBA的优势所在。
Parlay/OSA:首先使用IDL进行接口定义,并推荐采用CORBA技术。目前已实现的Parlay网关均支持CORBA
4.RM-ODP与CORBA对比
a.层面对比:
- RM-ODP是分布式计算领域内容最广泛的一个国际标准,是功能最强的分布计算“元标准”。
- CORBA是开放式分布处理思想的一个实现,是一个广泛应用的面向对象的中间件规范。
b.包含内容对比:
- RM-ODP包括五个视点以及相应的语言、分布透明性和RM-ODP通用功能。
- OMG的CORBA包括ORB核心、OMG接口定义语言、接口仓库和实现仓库、语言映射、存根和骨架、动态调用、对象适配器和ORB之间的互操作。
c.语言对比:
CORBA没有企业语言、信息语言和技术语言。
- 计算语言 RM-ODP的每个对象都可以调用其它对象在接口上所提供的操作。系统分布的特性对系统设计者应该是透明的。CORBA支持RM-ODP计算语言中的接口类型概念,由OMG IDL表示。 RM-ODP主要支持两种类型的操作:询问型和公告型。CORBA支持三种类型的调用:同步调用、单向调用和延迟调用.前两种方式分别对应于RM-ODP的询问型和公告型。
- 工程语言 ODP的工程语言通过透明对象和透明支持对象提供分布式透明性。CORBA的存根可视为透明对象,其命名服务可视为透明支持对象。 ODP中,通道提供了支持BEO之间通信的基础设施。包括存根、联编对象和协议对象。CORBA中,通道包括存根和ORB核心、对象适配器等。 ODP定义了接口引用,用来作为BEO的接口的标识符。CORBA中,与接口引用等价的概念是对象引用,其中包含在ORB中定义对象所需的信息。
d.分布透明性对比:
- RM-ODP支持八种透明性
- CORBA支持访问透明性、位置透明性、事务处理透明性和持久透明性。
通过客户方的存根和服务方的骨架(也有人称之为服务方存根)提供访问透明性。 通过命名服务和交易服务提供位置透明性。命名服务允许通过名字确定目标对象;交易服务允许通过类型确定目标对象。 通过事务处理服务提供事务处理透明性。 通过持久性服务提供持久透明性。CORBA的持久性服务提供了一个接口,用于在各种存储服务器上存储系统中的对象。
作者:
出处: