`

ICE-高效的中间件平台,牛刀小试

阅读更多
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秒多,性能的差距还是很大的,同时在这个过程中没发现有内存泄露的情况,效果还比较理想。

最后感慨一下,ICE是适合人类使用的中间件!

yudunde 发表于 July 6, 2006 03:39 PM | Example

以往文章
ICE-高效的中间件平台,牛刀小试

评论
ICE是个好东西,我们的项目中也用过这个。方便,入门也容易。就是更深入的使用,就要花大力气去掌握了。

我们曾经碰到过,一个服务,很长时间没有调用,就不响应了。一直调用,反而就没有问题了。此问题一直没有解决。

Posted by: 非狐外传 at July 6, 2006 09:05 PM

ICE是个好东西,真的很不错。入门也容易,就是深入使用的话,还是需要花很多的时间去掌握。

Posted by: 非狐外传 at July 6, 2006 09:08 PM

大量测试表明 ICE在效率等多方面不如ACE

Posted by: t at July 6, 2006 09:42 PM

ACE实现起来还是比较复杂,ICE的学习曲线比较好。要比起性能来虽然没做过测试,但可以想象应该还是ACE更强一些,如果花那么大的力气好不容易coding出来效率还不高就太没天理了。

Posted by: Donald at July 7, 2006 12:14 AM

ICE的效率问题估计会成为新版本最重要的改动吧。

Posted by: sunxiunan at July 7, 2006 08:08 AM

效率可能是一个考虑,但开发语言和lib的支持,又是底层平台容易推广的一个重要因素。

ICE官方就带了php,python的支持,除了c++,java这两个铁定的外,还有C#,VB。使用起来很方便。我倒是非常期待一个perl的支持。

Posted by: 非狐外传 at July 7, 2006 10:23 PM

对了,问一下t,效率的差别大概有多少?

Posted by: 非狐外传 at July 7, 2006 10:37 PM

偶也想知道ACE与ICE的性能差距的具体数据,可有人给一下下

Posted by: Anonymous at November 9, 2006 12:41 PM

ACE和ICE不好比较吧。

Posted by: cuiyanfeng at December 2, 2006 05:12 PM

请教LZ,有用过IceGrid么?
能不能写一个简单的文档阿
我一直搞不定
多谢了

Posted by: pb at December 30, 2006 10:46 AM

ICE是远程对象的封装
ACE是通讯(如SOCKET)的封装
也就是说,ACE比ICE更底层,怎么比较?
听说ICE考虑过用ACE作底层,不过因为ACE过于复杂而放弃

Posted by: 电视人 at January 7, 2007 02:50 PM

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

Posted by: Robinson at January 18, 2007 05:10 PM

ICE是与CORBA,.NET Remoting,Web Service同层次的东西,ACE是个网络编程库,准确的说是个C++对Socket网络操作的封装。而ICE是个RPC与DO(分布式对象)的协定,与语言没有关系,这一点和CORBA,Web Service,.NET Remoting相同,但ICE更简单。需要注意的是,.NET Remoting只能由.NET支持的语言实现,也是非常棒的RPC解决方案。

分享到:
评论

相关推荐

    Ice-3.5.1-el6-x86_64-rpm.tar.gz

    标题 "Ice-3.5.1-el6-x86_64-rpm.tar.gz" 提供的是一个软件分发包的名称,其中包含了 Ice 的3.5.1版本,适用于64位的EL6(Enterprise Linux 6)操作系统。这个压缩包采用tar.gz格式,这是一种在Linux和Unix系统中...

    Ice-3.5.1.zip

    总的来说,Ice-3.5.1作为一款成熟的分布式中间件,其源码提供了宝贵的教育资源。通过对源码的分析和学习,开发者不仅可以提升对分布式通信的理解,还能掌握到实际开发中的技巧和经验,从而在分布式系统的设计和实现...

    Ice-3.4.2安装包

    Ice-3.4.2安装包是Zeroc公司提供的最新版本的Ice中间件,它是一种高性能、跨平台的通信框架,专为构建分布式应用程序而设计。Ice支持多种编程语言,包括C++、Java、Python、C#等,使得开发者可以方便地在不同语言...

    Ice-3.5.1-4-ThirdParty.7z

    《Ice-3.5.1-4-ThirdParty:构建高效稳定的Windows开发环境》 Ice,全称为ZeroC Ice,是一款高性能、跨平台的中间件通信框架,它提供了丰富的语言支持,包括C++、Java、Python等,广泛应用于分布式系统中的服务间...

    关于ICE-BA的结构图

    ICE-BA(Incremental, Consistent and Efficient Bundle Adjustment)是一种增量式、一致性以及高效的捆绑调整算法。捆绑调整是计算机视觉中的一种基本问题,主要目标是通过调整场景中3D点和相机参数来最小化重投影...

    Ice-3.5.1-ThirdParty.msi

    windows版,ICE-3.5.1第三方库;ICE(Internet Communications Engine)是ZeroC提供的一款高性能的中间件,基于ICE可以实现电信级的解决方案。

    ICE-2.0.3-for-64-bit-Windows.msi

    ICE-2.0.3-for-64-bit-Windows, window10可用的图像拼接工具

    Ice-3.4.2-rhel5-i386-rpm.tar.gz

    标题中的"Ice-3.4.2-rhel5-i386-rpm.tar.gz"是一个软件包的标识,其中"Ice"是软件的名称,3.4.2是该版本的版本号,"rhel5"表明这个软件包是为Red Hat Enterprise Linux 5(RHEL 5)设计的,"i386"表示它适用于32位...

    Ice-3.6.4.msi

    Ice-3.6.4-msvc2015.msi zero-ice msvs2015 Ice-3.6.4-msvc2015.msi zero-ice msvs2015

    Ice-3.5.1-demos.tar.gz

    《Ice-3.5.1 Demos:探索高效面向对象中间件的魅力》 在IT行业中,中间件扮演着至关重要的角色,它连接着各种应用程序,使得数据能够在不同的系统间顺畅流动。今天我们要聚焦的是名为Ice的中间件,一个现代、面向...

    Ice-3.7.0 下载地址、安装及源码

    Ice Ice-3.7.0 linux windows mac os docker java js python ruby source Download Ice 3.7 Version: 3.7.0 - July 21, 2017 You are licensing Ice under GPLv2 unless you purchase a commercial license.

    Python库 | zeroc_ice-3.7.0-cp36-cp36m-win_amd64.whl

    标题中的“zeroc_ice-3.7.0-cp36-cp36m-win_amd64.whl”是指ZeroMQ ICE(Inter Process Communication)的一个Python绑定库的特定版本,适用于Python 3.6解释器,并且是为64位Windows系统编译的。ZeroMQ是一个开源的...

    ice-builder-eclipse

    使用ice-builder-eclipse插件,开发人员能够更高效地利用ICE进行分布式系统开发,尤其是在大型、复杂的跨平台项目中,它能够显著提高生产力。此外,由于Eclipse本身拥有丰富的插件生态系统,ice-builder-eclipse还能...

    Ice-3.5.1-third-party-solaris.tar.gz

    1. 解压文件:首先,你需要将"Ice-3.5.1-third-party-solaris.tar.gz"解压到合适的目录,这通常会生成一个名为"Ice-3.5.1-ThirdParty-Solaris"的目录结构。 2. 配置环境:接着,你需要配置环境变量,例如设置ICE_...

    Ice-3.7.4.msi for windows版

    ICE-3.7.4 最新安装文件msi文件,windows版 ICE常见报错 Exception in thread Ice.ConnectionRefusedException error = 0 at IceInternal.Network.doFinishConnect(Network.java:417) at IceInternal....

    ice-demos-3.6.4

    "ice-demos-3.6.4"这个压缩包文件很可能包含了zeroc ICE框架的3.6.4版本的一些示例和演示程序。这些演示通常是为了帮助开发者更好地理解ICE的工作原理,学习如何使用ICE进行通信和数据交换,以及如何利用其特性来...

    Ice-3.6.0 (tar.gz)

    Ice-3.6.0是ZeroC公司开发的一款高效、灵活的中间件,用于构建分布式系统。它提供了一种简单而强大的方式来连接跨平台的应用程序,支持多种编程语言,如C++、Java、Python等,使得开发人员可以在不同系统间进行无缝...

    N070ICE-G02液晶屏数据手册

    根据提供的文档信息,我们可以深入探讨"N070ICE-G02"液晶屏的相关知识点,包括其规格、电气特性以及机械特性等。 ### 一、总体描述 #### 1.1 概览 N070ICE-G02是群创光电(InnoLux)生产的一款液晶显示屏。该屏幕...

    ACE和ICE-高效的网络编程中间平台简介[参照].pdf

    ACE(Adaptive Communication Environment)和ICE(Internet Communications Engine)是两种高效、可移植的网络编程中间平台,常用于构建分布式计算系统。它们旨在解决传统中间件如DCOM(分布式组件对象模型)和...

Global site tag (gtag.js) - Google Analytics