欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

关于 ZeroC ICE 的不成熟思考(续)  

程序员文章站 2024-03-22 21:08:52
...

看完了 Distributed Programming with Ice,阅读量相当大,只好粗看一遍,有好几种语言实现的地方只看C++,即使这样也有了3个月的时间,才看完,并练习了Ice部分的Demo。

Ice是优秀的通讯中间件,是用于建立高性能、高伸缩性通讯基础设施的平台框架。让我感到疑惑的是:现在企业信息化管理的基础和核心是大型关系数据库系统,如DB2,Oralce,SQL Server,甚至还有MySQL。缺乏这些数据库系统的访问手段,Ice能够成为一个广泛适用的中间件吗?我认为不能,Ice不能独立完成中间件的功能,它只能是中间件系统的一个组成部分,它不可能成为Spring+Hibernate那样的中间件组合。

Ice的重点是通讯,在数据持久化方面使用Berkeley DB,访问数据库方面做得太少了。如果访问关系数据库,需要开发员自己实现数据库访问层。因此它适用于持久化数据不复杂,关系比较少,而对通讯有很高要求的场合。所谓电信级中间件,也是指通讯来讲的。就数据库访问层来说,Ice几乎没有提供什么帮助。要在Ice中实现数据持久层开发必然要考虑到数据库适应性,SQL解析,缓存,各种锁以及多服务器间的同步等许多让人头疼的问题,相当于开发一个定制的Hibernate。

Ice的另一个重点是多语言编写的程序对象间的相互通讯,尤其是目前C/C++语言与Java系统按对象方式通讯的手段缺乏,Ice正好满足了这种需求。

IceGrid部分介绍了,网格由节点构成,节点向注册服务器注册适配器,才能被客户端访问。客户端通过注册服务器获得访问节点的地址,然后直接与节点交互。为防止注册服务器单点故障,将它设计成主从模式。主服务器down后,从服务器可以继续提供访问服务,只是不能加入新注册;从服务器必须重启才能成为主服务器。

多个节点可以组成一个复制组,进行适配器复制,实现负载均衡,文章讨论了负载均衡的各种方法:顺序,适应,轮循等……但是没有讨论session复制问题,也就是如果服务器是有状态的情况下,如何实现多个服务器的状态同步——session复制?文章没有明确说明。session复制是多服务器同步必须考虑的问题,不知道IceGrid是如何实现的。

我认为Ice不能做为完整的中间件,刚接触Ice时,中文网上充满了对Ice的赞美,没有对Ice的缺点和适用范围的介绍。英文网只有官方网站介绍的比较详细,也是充斥着Ice性能如何如何,比CORBA怎么怎么好。没有对Ice使用范围的中肯建议或评价。因此学习Ice完全是在认为它能够解决我对中间件的一般需求的情况下完成的。现在我感觉它实现不了所有中间件的目标,或者说要以它实现目标,需要花费的代价高过用其它系统实现目标的代价。