分布式计算的里程碑:CORBA技术解析
CORBA是一个在分布式系统发展史上具有里程碑意义的技术。
1. 什么是 CORBA?
CORBA 的全称是 Common Object Request Broker Architecture,即通用对象请求代理体系结构。
它是由 OMG 组织制定的一种标准,旨在解决异构环境下的分布式对象计算问题。简单来说,它的目标是让用不同编程语言编写、运行在不同操作系统上的对象,能够像本地对象一样相互调用和通信。
2. 核心思想与 “软件总线” 概念
CORBA 的核心思想是引入一个中间件——ORB,它就像一个软件总线。
- 想象一个计算机主板:CPU、内存、显卡这些不同厂商、不同功能的组件,都插在标准化的总线上,通过总线进行通信。
- CORBA 的软件总线:各种用 C++、Java、Python 等语言编写的分布式对象,都“插”在 ORB 这条软件总线上。一个客户端对象无需知道服务端对象的位置、编程语言或操作系统,它只需通过 ORB 发出请求,ORB 会负责找到目标对象、激活它、传递参数、调用方法并返回结果。
3. 核心组成部分
一个典型的 CORBA 体系结构包含以下关键部分:
-
ORB:
- 这是 CORBA 的心脏。它负责处理客户端和服务器对象之间的所有通信细节,包括查找对象、编组参数、传输请求等。对于应用程序开发者来说,ORB 是透明的,它提供了通信的基础设施。
-
IDL:
- 这是 CORBA 的基石和合约。IDL 的全称是 Interface Definition Language。
- 它是一种中立的、与编程语言无关的语言,专门用于定义对象对外提供的接口(即哪些方法可以被远程调用)。
- 关键点:开发者用 IDL 定义接口,然后使用 IDL 编译器 将其映射到具体的编程语言(如 C++、Java),生成客户端存根和服务器端骨架。
- 作用:IDL 实现了接口与实现的分离,是保证跨语言互操作性的关键。
-
GIOP & IIOP:
- GIOP:是 CORBA 定义的通用 ORB 间协议,规定了通信的消息格式和数据结构。它是一个抽象协议。
- IIOP:是 GIOP over TCP/IP 的实现。它是 CORBA 在互联网上通信的实际标准协议,确保了不同厂商 ORB 实现之间的互操作性。
-
对象适配器:
- 最主要的是 POA。它负责将 ORB 的核心功能与具体的对象实现连接起来,管理服务对象的生命周期(创建、激活、去活)、分配对象引用等。
4. CORBA 的工作原理与流程
假设客户端要调用一个远程的 Calculator 对象的 add 方法。
-
定义接口:首先,用 IDL 定义
Calculator接口。// Calculator.idl interface Calculator { long add(in long a, in long b); }; -
编译 IDL:使用 IDL 编译器编译
Calculator.idl。- 生成 客户端存根:这是一个本地代理,它让客户端感觉像是在调用本地对象一样。存根负责将调用请求“打包”并通过 ORB 发送出去。
- 生成 服务器端骨架:这是一个框架,负责“解包”客户端的请求,并调用真正的服务器端对象实现。
-
实现服务器:开发者编写
Calculator接口的具体实现(例如用 C++ 或 Java)。 -
客户端调用:
- 客户端通过某种方式(如命名服务)获取到一个
Calculator对象的引用。 - 客户端代码调用
calc.add(5, 3),这实际上是在调用本地的存根。 - 存根 执行 参数编组:将参数
5和3序列化成标准的、与平台无关的格式(通常使用 CDR 编码)。 - ORB 通过 IIOP 协议将请求发送到服务器端。
- 客户端通过某种方式(如命名服务)获取到一个
-
服务器端处理:
- 服务器 ORB 接收到请求,交给 骨架。
- 骨架 执行 参数解组:将字节流还原成服务器端编程语言能理解的数据。
- 骨架 调用真正的
CalculatorImpl对象的add方法。 - 方法执行完毕,返回结果
8。
-
返回结果:
- 过程反向进行:骨架编组结果
8,通过 ORB 和 IIOP 传回客户端。 - 客户端存根解组结果,将
8返回给客户端程序。 - 客户端感觉就像进行了一次本地调用。
- 过程反向进行:骨架编组结果
5. 核心服务
除了基本的远程调用,CORBA 还定义了一系列公共服务,类似于分布式操作系统的基础设施:
- 命名服务:允许对象通过一个易读的名字进行发布和查找。
- 交易服务:允许对象根据其提供的服务类型和属性进行发布和发现。
- 事件服务:支持异步的、基于事件的通信。
- 安全服务:提供认证、授权、审计等安全功能。
- 生命周期服务:管理对象的创建、复制、移动和删除。
6. 优缺点
优点(在当时):
- 语言无关性:真正实现了跨语言调用。
- 平台无关性:屏蔽了底层操作系统和硬件的差异。
- 体系结构完整:提供了从通信到各种企业级服务的完整解决方案。
- 标准化:由 OMG 推动,避免了厂商锁定。
缺点与衰落原因:
- 复杂性:CORBA 的体系非常庞大和复杂,学习曲线陡峭,开发和部署难度大。
- “XML地狱”:虽然强大,但配置繁琐,容易出错。
- 互操作性陷阱:理论上 IIOP 保证了互操作,但实践中不同厂商的 ORB 实现之间仍会遇到各种兼容性问题。
- 防火墙不友好:IIOP 使用非标准端口,在企业防火墙配置中常常遇到障碍。
- 竞争技术的崛起:
- Java RMI:对于纯 Java 环境,RMI 更简单直接。
- SOAP/Web Services:基于 XML 和 HTTP,天生对防火墙友好,工具链丰富,虽然也复杂,但凭借其开放性和 Web 亲和性逐渐胜出。
- REST:以其轻量级、简单和与 HTTP 紧密集成的特点,最终成为构建 Web API 的主流选择,给了 CORBA 致命一击。
7. 现状与遗产
- 现状:如今,在新的企业级项目中已经很少会选择 CORBA。它主要存在于一些遗留系统中,特别是在电信、金融、航空航天等对可靠性和实时性要求极高的领域。
- 遗产:尽管 CORBA 本身衰落了,但其设计思想影响深远:
- IDL 的概念被后来的 SOAP、gRPC、Thrift 等广泛采用。
- 软件总线的思想是后来许多企业服务总线的基础。
- 它教育了一代架构师如何思考和构建大规模分布式系统。
总结
CORBA 是一个雄心勃勃的分布式对象计算框架,它试图通过 ORB 软件总线和与语言无关的 IDL,来解决异构环境下的互操作问题。它在技术上非常先进,但因其固有的复杂性和对更轻量级、更 Web 化的替代方案的出现而逐渐被边缘化。理解 CORBA 对于理解分布式系统的发展历程和核心挑战具有重要意义。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)