CORBA是一个在分布式系统发展史上具有里程碑意义的技术。

1. 什么是 CORBA?

CORBA 的全称是 Common Object Request Broker Architecture,即通用对象请求代理体系结构

它是由 OMG 组织制定的一种标准,旨在解决异构环境下的分布式对象计算问题。简单来说,它的目标是让用不同编程语言编写、运行在不同操作系统上的对象,能够像本地对象一样相互调用和通信。

2. 核心思想与 “软件总线” 概念

CORBA 的核心思想是引入一个中间件——ORB,它就像一个软件总线

  • 想象一个计算机主板:CPU、内存、显卡这些不同厂商、不同功能的组件,都插在标准化的总线上,通过总线进行通信。
  • CORBA 的软件总线:各种用 C++、Java、Python 等语言编写的分布式对象,都“插”在 ORB 这条软件总线上。一个客户端对象无需知道服务端对象的位置、编程语言或操作系统,它只需通过 ORB 发出请求,ORB 会负责找到目标对象、激活它、传递参数、调用方法并返回结果。

3. 核心组成部分

一个典型的 CORBA 体系结构包含以下关键部分:

  1. ORB

    • 这是 CORBA 的心脏。它负责处理客户端和服务器对象之间的所有通信细节,包括查找对象、编组参数、传输请求等。对于应用程序开发者来说,ORB 是透明的,它提供了通信的基础设施。
  2. IDL

    • 这是 CORBA 的基石合约。IDL 的全称是 Interface Definition Language
    • 它是一种中立的、与编程语言无关的语言,专门用于定义对象对外提供的接口(即哪些方法可以被远程调用)。
    • 关键点:开发者用 IDL 定义接口,然后使用 IDL 编译器 将其映射到具体的编程语言(如 C++、Java),生成客户端存根服务器端骨架
    • 作用:IDL 实现了接口与实现的分离,是保证跨语言互操作性的关键。
  3. GIOP & IIOP

    • GIOP:是 CORBA 定义的通用 ORB 间协议,规定了通信的消息格式和数据结构。它是一个抽象协议。
    • IIOP:是 GIOP over TCP/IP 的实现。它是 CORBA 在互联网上通信的实际标准协议,确保了不同厂商 ORB 实现之间的互操作性。
  4. 对象适配器

    • 最主要的是 POA。它负责将 ORB 的核心功能与具体的对象实现连接起来,管理服务对象的生命周期(创建、激活、去活)、分配对象引用等。

4. CORBA 的工作原理与流程

假设客户端要调用一个远程的 Calculator 对象的 add 方法。

  1. 定义接口:首先,用 IDL 定义 Calculator 接口。

    // Calculator.idl
    interface Calculator {
        long add(in long a, in long b);
    };
    
  2. 编译 IDL:使用 IDL 编译器编译 Calculator.idl

    • 生成 客户端存根:这是一个本地代理,它让客户端感觉像是在调用本地对象一样。存根负责将调用请求“打包”并通过 ORB 发送出去。
    • 生成 服务器端骨架:这是一个框架,负责“解包”客户端的请求,并调用真正的服务器端对象实现。
  3. 实现服务器:开发者编写 Calculator 接口的具体实现(例如用 C++ 或 Java)。

  4. 客户端调用

    • 客户端通过某种方式(如命名服务)获取到一个 Calculator 对象的引用。
    • 客户端代码调用 calc.add(5, 3),这实际上是在调用本地的存根
    • 存根 执行 参数编组:将参数 53 序列化成标准的、与平台无关的格式(通常使用 CDR 编码)。
    • ORB 通过 IIOP 协议将请求发送到服务器端。
  5. 服务器端处理

    • 服务器 ORB 接收到请求,交给 骨架
    • 骨架 执行 参数解组:将字节流还原成服务器端编程语言能理解的数据。
    • 骨架 调用真正的 CalculatorImpl 对象的 add 方法。
    • 方法执行完毕,返回结果 8
  6. 返回结果

    • 过程反向进行:骨架编组结果 8,通过 ORB 和 IIOP 传回客户端。
    • 客户端存根解组结果,将 8 返回给客户端程序。
    • 客户端感觉就像进行了一次本地调用。

5. 核心服务

除了基本的远程调用,CORBA 还定义了一系列公共服务,类似于分布式操作系统的基础设施:

  • 命名服务:允许对象通过一个易读的名字进行发布和查找。
  • 交易服务:允许对象根据其提供的服务类型和属性进行发布和发现。
  • 事件服务:支持异步的、基于事件的通信。
  • 安全服务:提供认证、授权、审计等安全功能。
  • 生命周期服务:管理对象的创建、复制、移动和删除。

6. 优缺点

优点(在当时)

  • 语言无关性:真正实现了跨语言调用。
  • 平台无关性:屏蔽了底层操作系统和硬件的差异。
  • 体系结构完整:提供了从通信到各种企业级服务的完整解决方案。
  • 标准化:由 OMG 推动,避免了厂商锁定。

缺点与衰落原因

  1. 复杂性:CORBA 的体系非常庞大和复杂,学习曲线陡峭,开发和部署难度大。
  2. “XML地狱”:虽然强大,但配置繁琐,容易出错。
  3. 互操作性陷阱:理论上 IIOP 保证了互操作,但实践中不同厂商的 ORB 实现之间仍会遇到各种兼容性问题。
  4. 防火墙不友好:IIOP 使用非标准端口,在企业防火墙配置中常常遇到障碍。
  5. 竞争技术的崛起
    • 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 对于理解分布式系统的发展历程和核心挑战具有重要意义。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐