什么是 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.itemstruct 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


http://www.taodudu.cc/news/show-2766478.html

相关文章:

  • Paper reading (七十九):A subset of the core rumen microbiome dictates cow productivity and emissions
  • 极简生活牙膏,让你的口腔清新一整天!
  • 故乡的山茶花
  • hdu3911 Black And White (线段树/区间合并)
  • 悲伤时唱首歌:《暗恋桃花源》剧评
  • OSChina 周四乱弹 ——因为女同事衣服穿的薄 所以老板发现我没上班?
  • 用vue简单写一个音乐播放器
  • Truffle框架的初使用
  • Vue指令 v-for遍历、下拉列表、单选框、复选框
  • 凋谢了的山茶花
  • javascript,H5,jQuery,css“实现音乐歌词解析,歌词同步滚动,进度条拖拽、进度条同步,音量控制,歌词同步高亮的功能齐全的简易音乐播放器
  • 线段树维护(最大区间和,最大子段和,最长连续上升子序列)
  • Java类与面向对象(创建对象 成员方法 形参实参 递归 重载 可变参数 作用域 构造方法 this)
  • 《30而已》烂尾,如果这样卖空山茶,顾佳会逆袭
  • 山茶花扦插快繁技术
  • 信阳毛尖大山茶、高山茶、小山茶的辨别
  • 山茶油的功效与食用方法
  • 11.判断一个人出生了多少天
  • 1.js基础01-计算机基础
  • 牵丝戏计算机谱,急求牵丝戏计算器谱完整版!!!
  • 吉首大学校赛 K 白山茶与红玫瑰 (线段树区间操作)
  • K、白山茶与红玫瑰
  • 如何用计算机弹白山茶,白山茶-陈雪凝-和弦谱-《弹吧》官网tan8.com-和弦谱大全,学吉他,秀吉他...
  • elementUI Drawer 抽屉打开时表单自动聚焦问题解决
  • sql中的联合查询
  • ObjectMapper实现将Java对象转为json字符串
  • RT-Thread系统 STM32 DAC设备改进,直接调用系统DAC驱动函数设置输出电压
  • RT-Thread学习笔记【ADC与DAC设备】
  • 电脑常用快捷键大全
  • 玩树莓派(raspberry pi) 2/3 raspbian的遇到的一些问题

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

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

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

  2. 【Android 逆向】ARM CPU 架构体系 ( ARM 处理器工作模式 | ARM 架构模型 )

    文章目录 一.ARM 处理器工作模式 二.ARM 架构模型 一.ARM 处理器工作模式 参考 [嵌入式开发]ARM 处理器工作模式 及 修改方法 ( 处理器模式 | 设置处理器模式 | 程序状态字寄存 ...

  3. 优雅应对故障:QQ音乐怎么做高可用架构体系?

    导语 | 故障是开发者高频关注的问题.在分布式系统建设的过程中,我们思考的重点不是避免故障,而是拥抱故障,通过构建高可用架构体系来获得优雅应对故障的能力.本文作者冯煦亮从架构.工具链.可观测三个维度, ...

  4. DAMA数据管理知识体系指南之数据架构和建模

    全网最全大数据面试提升手册! 一.数据架构语境关系图 企业架构包括多种不同类型,如包括业务架构.数据架构.应用架构和技术架构等.其中数据架构的主要目标是有效地管理数据,以及有效地管理存储和使用数据的系 ...

  5. 转:一套大而全的系统架构体系与具体落地方案

    原文地址: https://new.qq.com/omn/20171229/20171229B02VYY.html 本文根据DBAplus社群第131期线上分享整理而成,文末还有好书送哦~ 讲师介绍 ...

  6. 一套大而全的系统架构体系与具体落地方案

    欢迎关注原创公众号: 你们公司的IT系统架构是怎样的?又如何具体落地?采用了哪些开源或是商业的技术? 其实之前也写过或是做过一些关于系统架构的分享,或多或少的个人或其它限制,总觉得未能尽兴,留有遗憾. ...

  7. 云栖大会|小米大数据运维管理体系的建设与实践

    前言 前段时间,很荣幸能参加云栖大会,并和大家分享一个议题,接下来我们来回顾一下 介绍 这次给大家带来的题目是<小米大数据运维管理体系的建设和实践> 今天整个分享分两部分,第一部分我们先来 ...

  8. 《DAMA数据管理知识体系指南》读书笔记-第十二章(元数据管理)

    目录 一.前言 二.内容结构 三.主要内容 1.引言 2.活动 3.工具 4.方法 5.实施指南 6.元数据治理 四.思考与总结 一.前言 本文是<DAMA数据管理知识体系指南>第12章的 ...

  9. 写给交互设计新手的信息架构全方位指南

    目录 什么是信息架构? 通用方法 日常工作 可以关注的大神 常用工具 相关书籍 什么是信息架构? 信息架构是一个比众多其他领域更难定义的领域.内容策划由内容策划师来完成,交互设计由设计师来完成,而信息 ...

最新文章

  1. Assets.car 桌面解压工具
  2. 什么是ATL? (与COM的关系,及MFC与COM的关系)
  3. python画折线图代码-用Python画论文折线图、曲线图?几个代码模板轻松搞定!
  4. AT5160-[AGC037C]Numbers on a Circle【贪心,堆】
  5. linux socket通信组件,Linux下socket简单通信
  6. AI「抄」代码无罪?GitHub Copilot拿用户的开源代码改一改就去挣钱!
  7. Aescrpts Text Chain for Mac - AE动态文本链排列脚本插件
  8. HTML5 Geolocation(地理定位)
  9. 8年php薪資,8年PHP求稳定远程团队带走
  10. 设计自己的基于Selenium 的自动化测试框架-Java版(1) - 为什么selenium还需要测试框架?...
  11. 剑指 只出现一次的数字
  12. IAR教程之IAR安装
  13. 什么是身份证ocr识别?身份证ocr识别接口API能干什么?
  14. python 中文字符串 编码转换_Python合集之Python字符串编码转换
  15. php打开文件fopen函数
  16. unity粒子编辑器详解
  17. 【起航计划ObjC 002】印第安老斑鸠ObjC的幻想 ---- Ubuntu下安装并使用MAC虚拟机
  18. Python数据存取详解
  19. 冬天OS(八):加入调度
  20. 一连上网就弹出广告窗,记录删除一些顽固文件

热门文章

  1. 免费idc公益接口_数据科学促进社会公益免费开放数据的最佳来源
  2. 关于谷歌浏览器请求action两次
  3. snpslmd: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No su
  4. uniapp接入人身核验小程序
  5. Java-AQI计算
  6. python数据处理与分析(汇总)
  7. 数据处理常用方法(python)
  8. 千江有水千江月 万里无云万里天
  9. nrf51822+rfx2401c系统板(开源原理图、PCB)
  10. 计算机学渣和你说说从毕业到工作