撰文:马维达
Marc Laukien:Object-Oriented Concepts, Inc的创办人和总裁。开放源码的ORBacus (原名OmniBroker,完全遵从CORBA的ORBA)的主要作者。在2001年IONA(著名的CORBA技术公司)收购OOC之后,他出任IONA负责CORBA开发的副总裁……
Michi Henning:IONA公司前首席CORBA科学家。CORBA编程的经典书籍Advanced CORBA Programming with C++的作者之一。他参与制订了若干OMG规范,并曾是OMG的C++ Revision Task Force的主席……
Bernard Normier:1995年加入IONA公司,并成为Orbix 2000的领头工程师之一。他是OMG的Persistent State Service规范的作者,并且直到2003年2月,他仍是C++和Transaction Service Revision Task Force委员会的主席……
……
看到这样一些CORBA“老兵”,倘若不加以说明,你一定会以为这是一篇关于CORBA的文章。但正如文章名和上面的简介中的一些措辞(“前”、“曾是”、“直到……仍是”……)所暗示的,本文将要讲述的,并非CORBA,而是对CORBA的“反叛”——这支“叛军”名为ZeroC公司,名不见经传;这家公司的旗舰产品叫Internet Communications Engine(Ice);而创办这家公司的,正是上述这些大名鼎鼎的前CORBA阵营中的领军人物。
一、 概览
按照ZeroC的说法,Ice是“一种现代的面向对象中间件,可用于替代像CORBA或COM/DCOM/COM+这样的中间件。在易于学习的同时,它为各种有着苛刻的技术要求的应用提供了强大的网络基础设施。在像SOAP或XML-RPC这样的技术太慢、或是没有提供足够的可伸缩性或安全性之处,正是Ice开始闪耀之地。”而如果把Ice看作是“Millennium CORBA,扔掉了在其生命期里累积的包袱,但却保留了它的全部好特性,增加了一些特性,并以一种明晰而整洁的方式设计它们”,或许更能够让你把握到Ice的本质;甚至于,如果你十分了解CORBA,了解它的长处和弱点,你又深入了解了Ice,你或许也会像给出上述评语的Frank Pilhofer(又一个CORBA专家!)那样叫道:“Way to go!”。
那么,与CORBA相比,Ice到底有何优点?在回答这个问题之前,先让我们看一看Ice拥有哪些值得夸耀的特性:
面向对象的规范语言。
易于使用的C++和Java映射。在未来的版本中还将支持更多的映射(比如C#)。
非常高效的协议,还可以进行协议压缩。
异步方法调用(asynchronous method invocation)和异步方法分派(asynchronous method dispatch)。
动态的传输插件。
TCP/IP和UDP/IP支持,以及基于SSL的安全性。
Ice防火墙解决方案,支持回调。
使用XML的自动持续(persistence),包括对版本管理的支持。
类型化的消息传递服务,支持联盟(federation)。
软件修补和更新服务。
完善的部署工具。
详尽的文档。
GPL授权或商业授权(商业用途)。
支持Windows 2000/XP、Linux和Solaris操作系统。在未来的版本中还将支持更多的操作系统。
Ice由以下一些软件包组成:
IceUtil
一组实用函数,比如像Unicode处理和线程编程(只是C++版本)
Slice
Ice规范语言(Specification Language for Ice)。Slice在客户和服务器之间建立合约,另外也被用于描述持续数据。
Slice编译器
用于把Slice编译为目标语言(比如C++、Java、XML)或是根据Slice文件自动生成文档。
Ice
Ice核心库。它使用非常高效的协议(包含了协议压缩和对TCP和UDP的支持)管理所有的通信任务,为多线程服务器提供灵活的线程池,并且还有支持极端的可伸缩性的额外功能——可能达到数百万个Ice对象。除此而外,Ice核心库还有其他一些功能。
IceBox
专用于Ice应用的应用服务器。IceBox可以轻松地运行和管理Ice服务,这些服务可作为DLL、共享库或Java类动态加载。
IcePack
完善的服务器激活和部署工具。通过IcePack,在异种计算机网络中部署应用的复杂任务得到了极大的简化。你只需要提供行业标准XML格式的部署描述信息,IcePack就能替你处理余下的工作。
Freeze
Freeze为Ice servant提供自动持续。只需少许代码,应用就能与高效管理持续对象的“逐出者”(evictor)结合在一起。Freeze提供二进制数据格式,以获取最大限度的速度;同时还提供XML数据格式,以获取极度的灵活性。当持续数据的Slice描述变化时,你可以轻松地迁移使用XML数据格式的Freeze数据库——对于大型软件项目中的版本管理,这是必不可少的。
IceSSL
Ice核心的动态SSL传输插件。它使用行业标准SSL协议,提供了认证、加密和消息完整性检查。
Glacier
对对象中间件系统的一个极大挑战是安全性和防火墙。Ice的防火墙解决方案Glacier,极大地简化了安全应用的部署。Glacier认证并过滤客户请求,并允许以安全的方式对客户进行回调。与IceSSL结合,Glacier提供了既非侵入式、又易于配置的强大安全解决方案。
IceStorm
一种支持联盟的消息服务。与大多数其他的消息或事件服务相反,IceStorm提供类型化的事件,这意味着在联盟上广播消息就和调用某个接口上的方法一样容易。
IcePatch
用于软件发布的修补服务。让软件保持最新常常是一件单调乏味的任务。IcePatch使各个文件、以及完整目录层次的更新得以自动化。只有变更过的文件才被下载到客户机器中,而且会使用高效的压缩算法。
二、 与CORBA的对比
尽管ZeroC声称自己无意“贬低”CORBA,并称“CORBA相对于其时代而言是一项了不起的成就”,而且Ice还从CORBA那里借取了许多好思想,但如果这些专家们仍能在CORBA内部进行变革,仍认为CORBA还有前途,他们大概也无需成立新的公司,开发新的产品,“公然”进行“反叛”了。看完下面的译自ZeroC网站的“Ice vs. CORBA”的对比,你不仅能够明白,Ice相对于CORBA究竟有何优势,你或许也将明白,“叛军”之所以要成为“叛军”的原因。
完备性
当我们说完备性时,我们意指的是现实世界产品的完备性,而不是那些从未被实现的规范的完备性。我们相信Ice比市场上任何一种CORBA产品都要完备。你自己检查一下:哪一种CORBA产品真的提供了可与Ice相比的特性?
没有“Design by Committee”
Ice是由一小群热诚的、富有高度经验的人设计的。它并不试图成为适用于所有人的万用药。而另一方面,在CORBA规范中则充斥着各种“华而不实的东西”;这些东西由一些即得利益集团强行注入规范之中,它们并没有真的弄清楚这些规范是否能被实际实现。
在CORBA规范的提交过程中,达成一致的途径常常是把所有已经存在的私有实现的五花八门特性的集合全数接受下来。结果,规范的大小和复杂度远远超出了必需,而且平台也更大、更慢,并使得所得到的复杂API变得更难以使用。Ice提供的API要小得多、更为高效,比等价的CORBA API更易于学习,而且也没有牺牲功能。
Slice
Slice比CORBA IDL更小、更干净、更强大。它的语言成分更少,在整体上却更为灵活。例如,内建的字典(dictionary)类型提供了对快速访问(fast-access)数据结构的直接支持,异常继承提供了更为干净的到“具有内建的异常处理功能的语言”的映射。同时,Slice消除了CORBA IDL的许多不必要的复杂性,比如属性(attribute)、inout参数、context,以及Objects-by-Value(OBV)的复杂性。
持续
Slice不只是一种接口定义语言,它还可被用于描述持续的Ice对象的状态,从而使我们更易于编写在数据库中自动地存储对象状态的服务器。
元数据(Metadata)
Slice支持一种可扩展的元数据设施,允许我们为应用特定目的标记Slice成分。例如,元数据可被用于定义Java语言映射,满足特定应用的需求。
没有Any类型
Ice没有CORBA Any类型的等价物。CORBA用户也许会对此感到很意外,因为在CORBA规范中大量使用了Any类型。但是,Any类型是多余的:像Java和C++这样的程序设计语言不需要Any类型,设计良好的分布式系统也不需要。Any类型通常被用于两种情况下:或是系统需要一种不透明的类型,中介方可进行接收和传递,而无需了解该类型的细节(比如CORBA Event Service);或是被用作联合(union)的等价物。
Ice可以发送和接收如“blob”这样的请求来处理第一种情况,Slice类继承可以处理第二种情况。无论是哪种情况,所得到的应用都更为高效、更为安全,也更易于设计和实现,而且不会遭受与CORBA Any类型相关联的复杂性的折磨。
Ice核心
CORBA核心随着时间的过去已经变得极其复杂。一个最好的例证是Portable Object Adapter,尽管需要支持经常出现的实现技术很少,它仍要求开发者具有专门的知识才能对其进行正确的使用。而另一方面,Ice对象适配器,更简单,更直接,并且比POA更强大:使用POA,有些工作会变成长期的编程项目,而使用Ice对象适配器,使用一些设计良好的API可以很快完成这些工作。
Ice协议
IIOP是CORBA最为薄弱的地方之一,其设计缺陷太多,很难把它们一一列出。仅举几个例子:没有请求封装,这使得转发服务(比如Event Service)在不了解所涉及的所有类型的细节的情况下,无法进行工作;低效的对齐规则迫使系统进行不必要的数据复制;数据编码规则很复杂,却又没有带来性能上的提高;对象引用编码非常复杂,妨碍了高效的整编和内存共享实现;代码集磋商还未定义,并且遭受到竞争状态的折磨;所有这些复杂性意味着IIOP难以实现,并会带来互操作性和性能问题。Ice协议简单、更高效,并且提供了像数据压缩和批请求这样的特性(IIOP无法支持这些特性)。
安全性
安全性总是CORBA最大的问题之一。OMG反复以书面形式制定了一些规范,却仍未有广泛可用的实现支持这些规范,CORBA用户也仍然无法得到可用和安全的ORB。与此相反,在设计Ice时,我们始终把安全性放在首要位置。这也是Ice为何要创造性地提供SSL,并提供确实能工作的、灵活而没有侵入性的防火墙解决方案的原因。
C++映射
与CORBA和C++“共事”非常困难,即使对于有经验的C++开发者来说也是如此。有无数涉及内存管理和异常安全性的陷阱和缺陷。与此相反,Ice C++映射非常简单和直接。开发者实际上不可能由于犯错而造成内存泄漏。要记住的规则的数量无限地小于CORBA C++映射的规则数量,而且,Ice C++映射基于STL行业标准。
可伸缩性
CORBA技术的可伸缩性非常好,但前提是你是一个专家。而使用Ice,谁都可以编写可高度伸缩的应用。例如,Ice为你实现了一种持续的“逐出者”模式,让你能够很容易地处理数百万对象。你所需做的就是用Slice定义持续对象数据,并让Ice来完成余下工作:Ice run-time会使用高速数据库自动地加载和存储对象。
版本管理
CORBA没有任何用于支持对象状态的版本管理的机制。Ice可以将数据存储为XML格式,当持续数据的Slice描述变化时,可以很容易地将数据库移植到新的格式。
软件更新
IcePatch工具可以用来保持客户软件的及时更新,它使用了压缩来进行高效的数据传输,使用了校验和来保证一致性。CORBA没有提供在分布式系统中分发软件更新的机制。
类型化事件服务
在CORBA中有类型化事件服务规范,但其实现(如果有的话)却很少。它的类型化事件服务还存在着许多已知问题,使其在现实世界的部署中实际上是无用的。Ice的设计从最开始就支持类型化事件服务。IceStorm是高效的类型化事件服务实现,同时还支持联盟。
Facets(面)
CORBA支持继承、DCOM支持聚合。在过去,有许多关于何者更好的辩论。Ice两者都支持:接口继承加上聚合,以facets的形式。facets允许你使用动态聚合,而不是静态继承,来在运行时扩展类型。
异步消息
CORBA支持Asynchonous Message Invocation (AMI),但几乎没有CORBA产品实现AMI。以一种简单而高效的方式,Ice从最开始就支持AMI。Ice还支持Asynchronous Message Dispatch (AMD),在CORBA中没有对应的等价物。AMD是用于客户的AMI的服务器端等价物。通过AMI,你可以将分派线程返还给Ice,并在将结果递送给客户时进行回调。可将AMI和AMD串联在一起,从而创建非常高效的、资源消耗很少的路由器。
AMI和AMD对客户和服务器来说都是透明的。也就是说,服务器不知道请求是通过AMI到达的,还是同步发送的,而客户也不知道操作调用是通过AMD处理的,还是同步处理的。要支持AMI和AMD,无需改动Slice定义。
三、 应用实例
2003年3月17日,一家名为Mutable Realms的公司在E3游戏展上公布了一款名为“Wish”的新游戏。该公司宣称,通过这个游戏,他们定义了一种新的游戏范畴:Ultra Massive Multiplayer Online Role Playing Games。与传统的Massively Multiplayer Online Role Playing Games (MMORPG)不同的是,Wish不会将游戏者限制在某个只有数百游戏者的服务器上,而是允许数万游戏者出现在同一个3D幻想世界里。
Wish所用的通信平台正是Ice。正如Michi Henning所说,这样的游戏对可伸缩性、速度和可靠性的要求,只有大型的电信项目才能超出——难以想象,不是吗?实际上,ZeroC和Mutable Realms两家公司进行了紧密的合作,以确保Ice能够提供开发Wish这样的游戏所需的全部特性(这样的“定制”没有什么坏处,你大概不会嫌自己的应用跑得太快;如果你真这么觉得的话,有一个解决问题的好办法:::sleep(100))。
或许我们已没有必要再贬抑CORBA,但来自Mutable Realms的开发者Benoit,仍然“借用”了CORBA来表达对Ice的欣赏:“I have no doubt that our productivity wouldn‘t be as good if we were using CORBA as our middleware technology”。
四、 结语
“Basically, Ice is what we always wished CORBA would have been.”当Michi Henning这样说的时候,他想到了自己作为世界顶尖的CORBA专家,在每天使用CORBA、达8年之久之后,仍然要靠查对自己撰写的书来编写CORBA代码——因为他还是记不清那些细节;他也想到了OMG内部那些“令人恐惧”的磨擦和这一领域中创新的“令人恐惧”的衰减……遇到这样的局面,不生出“异心”,大概根本称不上是真正的技术专家;而当领军人物开始另起炉灶,CORBA的末日或许就真的不远了。
但另一方面,技术也许从来都不是IT行业真正的决定性因素。商业才是。至少就目前看来,Ice还未受到广泛的关注,而像OMG这样的“豪门俱乐部”,以及各大CORBA技术公司,也不会轻易就放弃自己的地盘。Ice的前途究竟如何,还有待时日来观察。如果在国内有更多的公司或个人采用Ice来开发软件,无疑将有助于Ice的发展和进步。
反叛,才刚刚开始。
联系客服