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

看完了 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完全是在认为它能够解决我对中间件的一般需求的情况下完成的。现在我感觉它实现不了所有中间件的目标,或者说要以它实现目标,需要花费的代价高过用其它系统实现目标的代价。

你可能感兴趣的:(关于 ZeroC ICE 的不成熟思考(续))