CORBA 架构体系指南(通用对象请求代理体系架构)

Posted 禅与计算机程序设计艺术

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CORBA 架构体系指南(通用对象请求代理体系架构)相关的知识,希望对你有一定的参考价值。

什么是 CORBA 架构?

概述

通用对象请求代理体系架构 (CORBA) 是由对象管理组 (OMG) 定义的标准,它使以多种计算机语言编写并在多台计算机上运行的软件组件能够协同工作。

CORBA 是一种跨网络分发对象的标准,以便可以远程调用对这些对象的操作。CORBA 与特定的编程语言无关,任何具有 CORBA 绑定的语言都可以用来调用和实现 CORBA 对象。对象以称为接口定义语言 (IDL) 的语法进行描述。

公共对象请求代理体系结构(CORBA,Common Object Request Broker Architecture)是由 OMG(Object Management Group)定义的标准,旨在促进部署在不同平台上的系统的通信。

CORBA支持不同操作系统、编程语言和计算硬件上的系统之间的协作。

CORBA使用面向对象的模型(object-oriented model),尽管使用CORBA的系统不必是面向对象的。CORBA是分布式对象范式的一个例子(CORBA is an example of the distributed object paradigm)。

CORBA 实现了以不同语言编写并在不同计算机上运行的软件之间的通信。来自特定操作系统、编程语言和硬件平台的实现细节都不再由使用 CORBA 的开发人员负责。CORBA 规范了位于同一地址空间(应用程序)或远程地址空间(同一主机或网络上的远程主机)中的应用程序对象之间的方法调用语义。

CORBA 的主要特点有:

  1. 把中间件作为事务代理,完成请求与响应。服务请求映射、服务器的自动搜寻以及路由的自动设定等均由事务代理完成;

  2. 实现了客户端与服务器的完全分离。

  3. 提供软件总线机制,以使无论在何种环境下、采用何种语言开发软件,只要符口规范定义, 均能集成到分布式系统中;

  4. 实现了对象内部细节的完整封装,提供了对象方法的标准接口定义。一个能被客户程序使用,又能为服务器程序使用,修改对象的实现亦不会影响双方的序,因此软件重用率很高。

核心结构

CORBA 包括四个组件:

1.对象请求代理 (ORB,Object Request Broker )

对象请求代理 (ORB) 处理参数的通信、编组和解组(communication, marshaling, and unmarshaling),以便参数处理对于 CORBA 服务器和客户端应用程序是透明的。
The Object Request Broker (ORB) handles the communication, marshaling, and unmarshaling of parameters so that the parameter handling is transparent for a CORBA server and client applications.

2.CORBA 服务器(CORBA server)

CORBA 服务器创建 CORBA 对象并用 ORB 初始化它们。服务器将对 CORBA 对象的引用放置在命名服务中,以便客户端可以访问它们。
The CORBA server creates CORBA objects and initializes them with an ORB. The server places references to the CORBA objects inside a naming service so that clients can access them.

3.命名服务(Naming service)

命名服务保存对 CORBA 对象的引用。
The naming service holds references to CORBA objects.

4.CORBA请求节点(CORBARequest node)

CORBARequest节点充当CORBA 客户端。
The CORBARequest node acts as a CORBA client.

公共设施

公共设施分为两类:

  1. 横向设施(horizontal facilities)是指在通用领域内定义的对象。信息管理、网络管理、系统管理、任务管理和用户接口等都属于通用领域。

  2. 纵向设施(verticalfacilities)是指在专用领域内定义的对象。电信、财政、商务、卫生保健等都属于专用领域。

对象服务

对象服务是为公共设施和各种应用对象提供的基本服务,如命名服务、事件服务、事务处理服务、通知服务、交易服务、生命周期服务和安全服务等等。

  1. 命名服务(naming service)。CORBA对象登记在命名服务中,它可根据对象的名字找出对应的服务器中的对象引用。

  2. 事件服务(event service)。事件服务由一个或多个供应者(supplier)、消费者(consumer)以及事件通道(event channel)组成。后者是供应者和消费者之间传送事件(消息)的媒介。供应者把要送给消费者的消息放到事件通道中,根据事件通道的工作方式———推模式(push)和拉模式(pull),这些消息或者被推至消费者,或者由消费者主动将它们从通道拉出。

  3. 事务处理服务(transaction service)。它确保一个事务所包含的操作,要么全部成功执行,要么在失败的情况下一个也不执行并恢复到初始状态,以维持执行事务前后数据的一致性。

  4. 交易服务(trader service)。交易服务由出口者(exporter)、进口者(importer)和交易者(trader)组成。出口者向交易者给出服务的描述和通告,进口者向交易者查询符合有关条件的服务信息,然后从出口者获得所需要的服务。

  5. 生命周期服务(life cycle service)。通过直接面向对象的服务,如对象的建立、删除、转移和复制等来控制对象的生存期。

  6. 安全服务(security service)。CORBA一级安全服务提供鉴权、限权、授权、审计、加密以及登记注册等服务,全面解决分布系统中的安全性问题。

  7. 通知服务(notification service)。它是事件服务功能上的扩充,增加了结构化事件,事件的过滤机制以及服务质量控制等功能。

应用对象

这是未经OMG标准化的、由各个应用开发者自行开发的实体,应用对象使用CORBA提供的各种对象服务。

接口定义语言

接口定义语言(Interface Definition Language,IDL)用来定义CORBA对象使用的、应用组件之间的接口。它不是过程语言,它只能定义接口,而不是去实现某个接口。IDL独立于任何编程语言,用IDL编译器可以将它映射为其他常用的语言,如C++,C,COBOL,Java等 。

IDL的框架主要包括四种元素:

  • 模块(module)。它含有许多按功能进行分组的接口,形成附加的分层结构。因此,模块定义了一个命名空间。

  • 接口(interface)。它定义了数据和操作(或称为方法),供客户调用。接口中可以包括类型、常量、属性和异常的声明。实际上,IDL接口定义了CORBA中的类。

  • 操作(operation)。它表示客户可以调用的、处于对象中的服务。操作特性(signature)指的是操作的参数和返回的结果类型。一个操作还可以包括可供选择的异常事件和一组描述客户语言环境的属性。这样,操作就定义了CORBA中的方法。

  • 数据类型。它用来描述参数、属性、返回值以及异常等的允许值。类型是一种可标识的实体,具有一个与其值相同的谓词,如果它作用于某个实体得到的结果为真,那么,这个实体就满足这种类型,称为该类型的成员。CORBA所支持的数据类型可以是基本类型、模板类型、构造类型、复杂类型以及本地类型。

ORB:对象请求代理

对象请求代理(ORB: Object Request Broker),它是CORBA的基础,是在分布环境下,CORBA应用所使用的、基于对象模型的软件总线。它的基本职责是解决对象引用的请求和建立应用对象之间的联结,通过标准接口,使这种联结独立于所使用的硬件和软件的平台,从而保证了对平台的透明性以及对操作系统、网络协议和编程语言的透明性。

应用程序通过 ORB 与其他对象进行交互。这是它在实践中的实现方式:
The CORBA specification dictates there shall be an ORB through which an application would interact with other objects. This is how it is implemented in practice:

  1. 应用程序初始化 ORB,并访问一个内部对象适配器(Object Adapter),该适配器维护诸如引用计数、对象(和引用)实例化策略(instantiation policies)和对象生命周期策略(object lifecycle policies)之类的内容。
    The application initializes the ORB, and accesses an internal Object Adapter, which maintains things like reference counting, object (and reference) instantiation policies, and object lifecycle policies.

  2. 对象适配器用于注册生成的代码类的实例。生成的代码类是编译用户 IDL 代码的结果,它将高级接口定义转换为操作系统和语言特定的类库,供用户应用程序使用。为了强制执行 CORBA 语义并为与 CORBA 基础结构的接口提供干净的用户进程,此步骤是必要的。
    The Object Adapter is used to register instances of the generated code classes. Generated code classes are the result of compiling the user IDL code, which translates the high-level interface definition into an OS- and language-specific class base for use by the user application. This step is necessary in order to enforce CORBA semantics and provide a clean user process for interfacing with the CORBA infrastructure.

IDL:接口定义语言

CORBA 使用接口定义语言(IDL,interface definition language) 来指定对象呈现给外部世界的接口。然后指定从 IDL 到特定实现语言(如C++或Java )的映射。例如,Ada、C、C++、C++11、COBOL、Java、Lisp、PL/I、Object Pascal、Python、Ruby和Smalltalk都是标准映射。

例如,一个 thrift idl 代码如下:

include "base.thrift"

namespace go kitex.example.item

struct Item 
    1: required i64 id,
    2: required string title,
    3: required string content,

    10: optional map<string, string> extra,


struct GetItemRequest 
    1: required i64 id,

    255: optional base.Base Base, // for compatibility with non-kitex framework


struct GetItemResponse 
    1: required Item item,

    255: optional base.BaseResp BaseResp, // for compatibility with non-kitex framework


struct GetSpringDemoRequest 



struct GetSpringDemoResponse 



service ItemService 
    GetItemResponse GetItem (1: GetItemRequest req),
    GetSpringDemoResponse GetSpringDemo (2: GetSpringDemoRequest req)
    GetSpringDemoResponse GetSpringDemo2 (2: GetSpringDemoRequest req)

IDL 编译器

为了构建一个使用或实现基于 CORBA 的分布式对象接口(CORBA-based distributed object interface)的系统,开发人员必须获取或编写 IDL 代码来定义接口。

In order to build a system that uses or implements a CORBA-based distributed object interface, a developer must either obtain or write the IDL code that defines the object-oriented interface to the logic, the system will use or implement.

通常,ORB 实现包括一个称为 IDL 编译器(IDL compiler)的工具,它将 IDL 接口翻译成目标语言(target language),以便在系统的该部分中使用。

Typically, an ORB implementation includes a tool called an IDL compiler ,that translates the IDL interface into the target language ,for use in that part of the system.

然后,传统编译器编译生成代码,创建可链接对象文件(linkable-object files),然后在应用程序中使用。此图说明了如何在 CORBA 基础结构( CORBA infrastructure )中使用生成的代码:

A traditional compiler then compiles the generated code, create the linkable-object files for use in the application. This diagram illustrates how the generated code is used within the CORBA infrastructure:

此图说明了使用 CORBA 进行远程进程间通信的高级范例。
This figure illustrates the high-level paradigm for remote interprocess communications using CORBA.

CORBA 规范进一步解决了:数据类型、异常、网络协议、通信超时等问题。

The CORBA specification further addresses data typing, exceptions, network protocols, communication timeouts, etc.

例如:服务器端的可移植对象适配器 (POA,Portable Object Adapter),将调用重定向到本地服务或(以平衡负载)到其他服务器。

For example: Normally the server side has the Portable Object Adapter (POA) that redirects calls either to the local servants or (to balance the load) to the other servers.

CORBA 规范将分布式系统(distributed system)的各个方面留给应用程序来定义,包括对象生命周期、冗余/故障转移、内存管理、动态负载平衡和应用程序-面向模型,例如显示/数据/控制语义之间的分离的 MVC (模型-视图-控制器)模式等。

The CORBA specification leaves various aspects of distributed system to the application to define including object lifetimes, redundancy/fail-over, memory management, dynamic load balancing, and application-oriented models such as the separation between display/data/control semantics (e.g. see Model–view–controller), etc.

除了为用户提供语言和平台中立的远程过程调用(RPC) 规范之外,CORBA 还定义了常用的服务,例如事务和安全、事件、时间和其他特定于域的接口模型。

In addition to providing users with a language and a platform-neutral remote procedure call (RPC) specification, CORBA defines commonly needed services such as transactions and security, events, time, and other domain-specific interface models.

桩(stub)和骨架(skeleton)代码

桩和骨架代码文件,这些代 码文件使得应用程序可以和ORB相连接。

通过代理模式来完成远程调用功能,遵循接口组件的规则,前者完整实现接口,后者部分实现。

①客户桩stub,是在编译时确定的静态接口。它位于客户对象的本地,接受客户的请求,对于客户来说相当于远程的执行对象;
②骨架Skeleton,分动态骨架与静态骨架。它针对执行对象来说代表了远程客户的作用,可以在本地执行调用对象。

开发过程大致如下:
1) 编写IDL接口定义文件;
2) 将接口定义文件编译为相应高级语言源代码,产生服务父框架与客户端存根;
3) 基于服务器骨架(skeleton,server stub),编写服务对象实现程序;
4) 给予客户端存根(client stub),编写客户对象调用程序;
5) 分别编译客户对象和服务对象程序;
6) 运行服务对象程序。

From CORBA technology To Thrift technology

技术在变,需求不变,把复杂的事情搞简单,而不是相反。

无论CORBA还是Thrift,目标只有一个:一处定义,多处使用,解决的问题只有一个:规范和简化客户端与服务器的通信的开发工作。

参考资料

https://en.wikipedia.org/wiki/Common_Object_Request_Broker_Architecture

https://baike.baidu.com/item/%E5%85%AC%E5%85%B1%E5%AF%B9%E8%B1%A1%E8%AF%B7%E6%B1%82%E4%BB%A3%E7%90%86%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/5926153?fromtitle=CORBA&fromid=2776997&fr=aladdin

https://www.ibm.com/docs/en/integration-bus/9.0.0?topic=corba-common-object-request-broker-architecture

以上是关于CORBA 架构体系指南(通用对象请求代理体系架构)的主要内容,如果未能解决你的问题,请参考以下文章

公共对象请求代理体系结构CORBA体系

JAVA与CORBA通信接口开发

CORBA介绍

PRINCE2和PMP体系架构有何区别

Corba 与 Android Studio [关闭]

10种常见的软件架构模式