CORBA是什么?

The beginning of wisdom in human as well as international affairs was knowing when to stop.

Paul Kennedy, The Rise and Fall of the Great Powers

引言

我在ACM Queue上看到一篇文章《The rise and fall of CORBA》,很有启发,后面抽点时间把对应的文章翻译出来。

在这里,我想抽一点点时间,来简单说一说我了解到的CORBA技术。

众所周知,CORBA技术陡峭的学习曲线、复杂的技术栈而令人生畏。不过在电信行业,OSS和网管软件之间的通信、以及BOSS系统都是通过CORBA接口来完成信令下发和告警上报的。

也是因为这个原因,不管是运营商还是华为,都是CORBA技术做了大量的投资,投入了大量的资源开发相应的系统。

其中,我在2010年到15年几年的时间在华为核心产品线从事的北向接口,就接触到了网管产品中的CORBA技术。所谓北向接口,就是将核心网收集到的关于网络的状态数据,正常的、异常的、告警的、日志类型的、统计类型的所有相关的数据通过电信定义的接口报送到更上层的系统中。同时,也提供对不同类型的设备、网络、协议栈等根据电信协议提供一套抽象的接口,用于上层系统的业务定义、业务发放动作、甚至于设备的控制等等。

下面我简单介绍一下什么是CORBA。

CORBA简介

CORBA,Common ObjectRequest Broker Architecture,翻译为“公共对象请求代理体系结构”,简单说,是一个由OMG组织定义的规范,用于软件模块/分布式对象之间跨语言、跨机器、跨网络软件之间进行通信,类似于RPC。
CORBA有2个比较知名的实现,一个是ACE,一个是JacORB。ACE是C++实现的,非常的复杂。推荐大家看看文末的链接。而JacORB的实现我看到官网最后的更新时间是2017年。

其实华为和其他电信厂商之所以选择使用CORBA来管理网络,主要是因为有网络管理的标准。这些标准的指定都是通过CORBA的IDL来定义的。并且要求系统间的数据传递/调用都通过CORBA对象来操作。CORBA就成了一道绕不过去的门槛。任何一个想要进入电信网络管理领域的厂商都无法绕过这一套技术栈,不管是华为、中兴、浪潮还是其他。

电信网络管理的几个标准主要是用TM Forum来制定的。这里面有2个重要的协议,

  • 一个是MTNM,主要就是电信的核心网络管理,定义了一大堆基于CORBA技术的接口族。用于存量管理、资源发放、告警、性能管理等等。注意,这里的T,Technology,专指的是电信的传输层技术,比如SONET/SDH, PDH, DWDM, Ethernet, DSL, ATM, Frame Relay, and Control Plane management。
  • 一个是MTOSI,基于XML技术的,System to System的通信接口定义。相对的,MTNM,是Sytem to Element的通信接口定义。这里的System指的是上层的OSS系统,Element指的是网元(一个独立的网络设备、节点、虚拟节点等等)。

不过读者不用关注和继续阅读这里的提到的协议细节。因为我自己也不确定当前最新的EMS、NMS、OSS之间的传递是否还遵循着这些标准。

注定的没落

CORBA技术毫无疑问已经过时了,但是为什么我想写一点东西呢?一方面我是想借着这个机会吐槽一些以前使用CORBA技术时槽点。另一方面呢,也是想写一些我自己的思考。我们不能简单粗暴的说,这个技术很复杂,所以它会失败。同时,对于我们在做软件系统的时候,如何选择一个合适的技术也是一种提示。

CORBA协议的分布式对象是用IDL(Interface Definition Language)定义的,而IDL是和具体的程序语言无关的。通过编译器将IDL自动生成对应的stub和client代码。这在当时是一种进步。现在thrift,grpc都是采用了IDL的设计。这在当时,无疑是很先进的。只不过通过编译器生成出来的接口比较复杂而已。这个锅应该是CORBA来背还是ACE来背还是C++语言来背呢?

第二个是CORBA对象之间的通信协议。并不符合任何一种现有的标准协议,虽然也是基于TCP/IP协议族,但是确实独立定义的IIOP协议,这一块的整体由具体的ORB框架来实现。这个设计是一个累赘。为什么这么说呢?协议的定义、规范无疑是一个漫长而耗时的工作。没有利用现成的协议来通信,就意味着需要框架和具体的厂商来实现所有的细节。

第三个是CORBA提供了名字服务。名字服务就是用于发现具体的CORBA对象的。这一点也是创新。但是也存在一个问题,就是没有利用现有的技术。也没有统一的官方机构来统一解析IIOP协议的调用。基本上,所有使用名字服务和CORBA的系统都是部署在企业内部的。如果说真正的跨全球网络调用,名字解析的效率、数据的安全传输都将会是一个问题。如果利用了DNS域名解析的话,无疑将会便捷很多。可惜,设计者当时并没有考虑到这么多。

还有不少想说的,不过囿于篇幅和时间,不再展开了。后面我会抽时间把《The rise and fall of CORBA》这篇文章翻译出来。如果感兴趣的话,请关注我的公众号。

参考:

[1]:学之者生,用之者死——ACE的历史与简评,https://www.iteye.com/blog/fly-hyp-746611

[2]: ACE的陷阱,https://blog.csdn.net/fullsail/article/details/2915685

[3]: CORBA, https://www.pcmag.com/encyclopedia/term/corba

[4]: JacORB,https://www.jacorb.org/

[5]: MTNM,https://www.tmforum.org/mtnm/

[6]: MTOSI,https://www.tmforum.org/mtosi/

[7]: The rise and fall of CORBA: https://queue.acm.org/detail.cfm?id=1142044