ICE 分布式中间件开发VS 分布式开发之ACE

ICE(Internet Communications Engine)是ZeroC 提供的一款高性能的中间件,基于ICE 可以实现电信级的解决方案。前面我们提到过在设计网站架构的时候可以使用ICE 实现对网站应用的基础对象操作,将基础对象操作和数据库操作封装在这一层,在业务逻辑层以及表现层(java,php,.net,python)进行更丰富的表现与操作,从而实现比较好的架构。基于ICE 的数据
层可以在未来方便的进行扩展。ICE 支持分布式的部署管理,消息中间件,以及网格计算等等。

大道理讲完,言归正传,最近育儿网新增了不少新服务,服务间经常会需要相互调用数据,例如用户中心要取博客系统里的文章啊,论坛里发文后要在积分系统里增加用户积分啊。由于设计时这些服务仅仅基于统一的用户中心,服务间基本是独立的,所以要实现这些调用只能在每个服务上新增为其它服务提供服务的服务 -_-!。这个时候有几个可选方案,我们开始选择了xml-rpc,基于http 和xml 的远程调用,用了一段时间,发现维护成本和访问性能都存在问题。

由于这些中间服务部署的时候是和各自所属的服务部署在一起的,对这些服务做整体的改动就非常困难,要维护起来就比较麻烦。另外由于是什么http 和 xml 作为通信协议,由php实现业务逻辑,性能问题也很明显,而且这些http 请求都会在http 日志留下足迹,导致我们的日志分析很不精确。这个问题不是太大,但很郁闷,所以我们考虑使用ICE 来解决这个问题,至于SOAP 什么的就不考虑了,同样效率低下。

实现的过程还是比较顺利,花了三天的时间用c++实现了大部分常用的接口,服务端采用deamon 的方式运行,错误日志记在syslog 里 (/var/log/messages),客户端PHP,编译进去了IcePHP,调用的方法很简单。现在还存在一些问题,运行的时候会异常退出,还需要一段时间来解决,暂时加了只狗看着,一旦进程里没了就重新启动。

既然要跨平台通讯,就涉及对象描述,ICE 使用Slice 来对结构,类,方法等进行定义。完了以后服务器端,客户端都按这个来调用和实现。ICE 内置的Linux 下后台Deamon 实现方案非常简单,只需要从Ice::Service 里派生出一个类来,实现run 方法,在这个方法里创建adapter 对象,并在 adapter 对象里添加Servants,然后激活这个adapter 就可以了,网络层的通信都由ICE 接管了。由于是基于tcp/ip 的直接通信,比更高层的 http 通信效率要高很多。

在客户端实现时,我们也碰到了一些小麻烦。一个是内置的$ICE 对象用的时候有时需要用global 声明,否则可能会出错,另外由于默认情况下 Slice 中struct 对应到php 的类型是一个类的实例,而不是一个数组,所以在赋值给页面的时候,smarttemplate 以及其它模板系统中可能都会存在问题,可以通过修改模板系统的数据赋值显示代码解决。我们做了一些性能的测试,同样运行 1 千次请求,使用xml-rpc 实现需要28 秒左右,使用ICE 实现,只需要3 秒多,性能的差距还是很大的,同时在这个过程中没发现有内存泄露的情况,效果还比较理想。
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
ACE 发布了5.5,ICE-E 发布了1.1
ACE 5.5 于2006 年3 月7 日发布。Doug Schmidt 说5.5 比5.4“大大的好” 。我down 了一个下来,编译了一看,内容果然增加不少。子项目数增加了几十个,光文档压缩包的体积就从原来的54MB 增加到83MB,可见内容大大丰富了。对于我来说,
增加的那些内容恐怕没有什么意义。ACE 的核心思想1994 年就基本确定下来,后面的发展大多数属于非结构性的扩充和应用。今天的普通开发者,真能够弄懂ACE 核心和那几个基本框架的人就已经算是高手了。特别是当出了问题以后,能不能有条不紊地解决,这个可不是容易的事情。这不,今天在 MSN 上跟一个老朋友讨论了5.4.1 中一个例子的错误,他最后只能是通过比较5.5 和5.4.1 版本源码,发现不同,从而判断错误位置,要不就没辙。 ACE已经太庞大,不投入相当的精力很难真正掌握。相比之下,ICE 显得年轻有活力。ICE-E 1.1 今天刚刚发布,这表明他们正在坚定地迈向DRE领域。在前不久的一次访谈中,Doug Schmidt 还坚持说在DRE 领域,RT-CORBA 是唯一的玩家,似乎在故意回避ICE-E。我虽然热爱Doug Schmidt,但是也不得不说,他对于老朋友Michi Henning 一帮人搞出来的ICE 态度确实不太友善。前年两派人在comp.soft-sys.ace 和
comp.object.corba 中曾经爆发口水战,Doug Schmidt 对Michi Henning 恶语相向,有失大师风度,这事让我印象深刻。
DRE[Dynamic Reasoning Engine(DRE),缺陷排除效率?]领域里有两个东西在互相竞争,而且都是开源的,这是多好的事情!这个技术本身的军用背景非常深厚,不知道我们的政府军队有没有组织力量研究掌握消化之?迈向信息化别光停留在口头上,还得实干一点。回过来说 ICE,虽然我很欣赏他,但是前几天一个在大型分布式开发领域很有经验的前辈说,跟ACE 相比,这个东西太高层了,真正开发超大规模、超高性能应用的时候,还是得ACE上。再不然就直接用C。可还是那句话,C 的抽象能力太有限,程序维护超过几年,经过几个人的手,就没人说得清里面是怎么回事了。说来说去,ACE 还是不错的选择。
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@22
Distributed Programming with Ice by Michi Henning and Mark Spruiell
《Ice 分布式程序设计1.3.0 版》
"The Internet Communications Engine (Ice) is a modern alternative to object middleware such
as CORBA™ or COM/DCOM/COM+. Ice is easy to learn, yet provides a powerful network
infrastructure for demanding technical applications. Ice shines where technologies such as SOAP
or XML-RPC are too slow, or do not provide sufficient scalability or security. For a comparison
between Ice and CORBA, please see this page."
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
ICE是远程对象的封装
ACE是通讯(如SOCKET)的封装
也就是说,ACE比ICE更底层,怎么比较?


ICE侧重于远程RPC解决方案,而ACE是通用网络编程框架。
在应用层面上,ACE所处位置比ICE要低。
基于ACE的CORBAR实现TAO和ICE倒是可以比较比较。

ICE是与CORBA,.NET Remoting,Web Service同层次的东西,ACE是个网络编程库,准确的说是个C++对Socket网络操作的封装。而ICE是个RPC与DO(分布式对象)的协定, 与语言没有关系,这一点和CORBA,Web Service,.NET Remoting相同,但ICE更简单。需要注意的是,.NET Remoting只能由.NET支持的语言实现,也是非常棒的RPC解决方案。
第 1 章引言 1 1.1 引言 1 1.2 Internet Communications Engine (Ice) 3 1.3 本书的篇章结 4 1.4 排字约定 4 1.5 源码示例 5 1.6 联系作者 5 1.7 Ice 支持 5 第 Ice 综述 7 第 2 章 Ice 综述 9 2.1 本章综 9 2.2 Ice 架构 9 2.3 Ice 服务 21 2.4 Ice 在架构上提供的好处 23 2.5 与 CORBA 的对比 25 第 3 章 Hello World 应用 33 3.1 本章综 33 3.2 编写 Slice 定义 33 3.3 编写使用 C++ 的 Ice应用 34 3.4 编写使用 Java的 Ice 应用 41 3.5 总结 48 第 Ice 核心概念 51 第 4 章 Slice 语言 53 4.1 本章综 53 4.2 引言 53 4.3 编译 54 4.4 源文件 57 4.5 词法规则 59 4.6 基本的 Slice 类型 62 4.7 用户定义的类型 63 4.8 接口、操作,以及异常 70 4.9 类 92 4.10 提前声明 106 4.11 模块 107 4.12 类型 ID 109 4.13 Object 上的操作 110 4.14 本地类 111 4.15 Ice 模块 112 4.16 名字与作用域 113 4.17 元数据 117 4.18 使用 Slice 编译器 118 4.19 Slice 与 CORBA IDL 的对比 119 4.20 总结 127 第 5 章 一个简单文件系统的 Slice 定义 137 5.1 本章综 137 5.2 文件系统应用 137 5.3 文件系统的 Slice 定义 138 5.4 完整的定义 140 第 6 章 客户端的 Slice-to-C++ 映射 143 6.1 本章综 143 6.2 引言 143 6.3 标识符的映射 144 6.4 模块的映射 144 6.5 Ice 名字空间 145 6.6 简单内建类型的映射 146 6.7 用户定义类型的映射 146 6.8 常量的映射 150 6.9 异常的映射 151 6.10 运行时异常的映射 154 6.11 接口的映射 154 6.12 操作的映射 161 6.13 异常处理 167 6.14 类的映射 169 6.15 slice2cpp 命令行选项 183 6.16 与 CORBA C++映射比较 184 第 7 章开发 C++ 文件系统客户 189 7.1 本章综 189 7.2 C++ 客户 189 7.3 总结 194 第 8 章 客户端的 Slice-to-Java 映射 197 8.1 本章综 197 8.2 引言 197 8.3 标识符的映射 198 8.4 模块的映射 198 8.5 Ice Package 199 8.6 简单内建类型的映射 200 8.7 用户定义类型的映射 200 8.8 常量的映射 204 8.9 异常的映射 205 8.10 运行时异常的映射 206 8.11 接口的映射 207 8.12 操作的映射 213 8.13 异常处理 219 8.14 类的映射 220 8.15 Package 224 8.16 slice2java 命令行选项 225 第 9 章开发 Java 文件系统客户 229 9.1 本章综 229 9.2 Java 客户 229 9.3 总结 233 第 10 章 服务器端的 Slice-to-C++ 映射 235 10.1 本章综 235 10.2 引言 235 10.3 服务器端 main函数 236 10.4 接口的映射 247 10.5 参数传递 249 10.6 引发异常 251 10.7 对象体现 252 10.8 总结 257 第 11 章开发 C++ 文件系统服务器 261 11.1 本章综 261 11.2 实现文件系统服务器 261 11.3 总结 276 第 12 章 服务器端的 Slice-to-Java 映射 279 12.1 Chapter Overview 279 12.2 引言 279 12.3 服务器端 main函数 280 12.4 接口的映射 285 12.5 参数传递 287 12.6 引发异常 288 12.7 Tie 类 289 12.8 对象体现 292 12.9 总结 296 第 13 章开发 Java 文件系统服务器 297 13.1 本章综 297 13.2 实现文件系统服务器 297 13.3 总结 306 第 14 章 Ice 属性与配置 307 14.1 本章综 307 14.2 属性 307 14.3 配置文件 309 14.4 在命令行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值