ICE(Internet Communications Engine)是ZeroC提供的一款高性能的中间件,基于ICE可以实现电信级的解决方案。在设计网站架构的时候可以使用ICE实现对网站应用的基础对象操作,将基础对象操作和数据库操作封装在这一层,在业务逻辑层以及表现层(java,php,.net,python)进行更丰富的表现与操作,从而实现比较好的架构。基于ICE的数据层可以在未来方便的进行扩展。ICE支持分布式的部署管理,消息中间件,以及网格计算等等。 ICE和ACE在性能与开发简便上深化了CORBA这是一个老牌的分布式中间件平台,并且以其标准实现困难,开发者使用困难而著称。 ICE采用的许多思想也能在CORBA 及以前的一些分布式计算平台中找到。在有些方面, ICE与CORBA 非常接近,而在另外一些方面,它们的差异则意义深远,并且在架构上有着广泛的影响。如果你曾经使用过CORBA,了解这些差异十分重要。尽管从表面看来,ICE对象模型与CORBA 对象模型是一样的,但它们在一些重要方面却有所不同。类型系统ICE对象和CORBA 对象一样,都只有一个派生层次最深的(most derived)主接口。但ICE对象可以提供其他接口作为facets。重要的是要注意到,一个ICE对象的所有facets 都具有相同的对象标识,也就是说,客户看到的是具有多个接口的单个对象,而不是看到多个对象、每个对象有不同的接口。facets 提供了极大的架构灵活性。特别地,它们为版本管理问题提供了一种解决途径:你可以简单地给已经存在的对象增加新的facet,轻松地扩展某个服务器的功能,而不会破坏已有的、已经部署的客户。代理语义ICE代理(CORBA 对象引用的等价物)不是不透明的。客户只要知道对象的类型和标识,无需其他系统组件的支持,就可以创建出代理(在使用间接绑定时,不必了解对象的传输地址)。
ICE是一种面向对象的中间件平台。从根本上说,这意味着ICE为构建面向对象的客户-服务器应用提供了工具、API 和库支持。ICE应适合在异种环境中使用:客户和服务器可以用不同的编程语言编写,可以运行在不同的操作系统和机器架构上,并且可以使用多种网络技术进行通信。无论部署环境如何,这些应用的源码都是可移植的。
(1)客户无需询问外部的查找服务,比如命名服务,就能够创建代理。实际上,对象标识和对象的名字被认为是同一事物。这样能够消除命名服务的内容与实际情况失去同步所可能带来的问题;同时,为了让客户和服务器正常工作、必须正常运转的系统组件的数目也会减少。
(2)通过创建所需的初始对象的代理,客户可以轻松地进行自引导(bootstrap)。这样就无需使用单独的引导服务了。
(3)不需要对串化代理进行不同的编码。一种统一的表示就足够了,而这种表示是人可以阅读的。这样就避免了CORBA 的三种不同的对象引用编码(IOR、corbaloc,以及corbaname)所带来的各种复杂问题。开发者多年使用CORBA 的经验表明,对象引用的不透明性很成问题:它不仅需要更加复杂的API 和运行时支,还会妨碍我们构建现实的系统。为此, CORBA 增加了像corbaloc和corbaname这样的机制,以及用于进行引用比较的is_equivalent和hash 操作(这些操作的定义有问题)。所有这些机制都降低了对象引用的不透明性,但CORBA 平台的其他部分仍试图维持引用是不透明的这样一个错觉。结果,开发者在两方面所得的东西都是最糟的:引用既不是完全不透明的,也不是完全透明的——这样所带来的混乱和复杂性相当大。对象标识ICE对象模型假定对象标识在任何地方都是唯一的(但并没有把这个要求强加给应用开发者)。这种对象标识的主要好处是,你可以迁移服务器,也可以把多个不同服务器中的对象合并进一个服务器,而不用考虑名字冲突的问题:如果每个ICE对象都具有唯一的标识,它就不可能与另外的域中的对象的标识发生冲突。ICE对象模型还使用了强对象标识:使用本地的客户端操作,你就能确定两个代理表示的是否是同一个对象(在CORBA 中,要进行可靠的标识比较,你必须调用远程对象上的操作)。本地标识比较要高效得多,而且对于有些应用领域而言(比如分布式事务服务),这样的比较也至关紧要。
(1)面向对象的语义:ICE “在线路上”完全保留了面向对象范型。所有的操作调用都使用迟后绑定,所以操作的实现的选定,是根据对象在运行时的(而不是静态的)实际类型决定的。
(2)支持同步和异步的消息传递:ICE提供了同步和异步的操作调用和分派,并且通过IceStorm提供了发布-订阅消息传递机制。这样,你可以根据你的应用的需要来选择通信模型,而不必把你的应用硬塞进某种模型里。
(3)支持多个接口:通过facets,对象可以提供多个不相关的接口,同时又跨越这些接口、保持单一的对象标识。这提供了极大的灵活性,特别是在这样的情况下:应用在发生演化,但又需要与更老的、已经部署的客户保持兼容。
(4)机器无关性:客户及服务器与底层的机器架构屏蔽开来。对于应用代码而言,像字节序和填充这样的问题都隐藏了起来。
(5)语言无关性:客户和服务器可以分别部署,所用语言也可以不同(目前支持C++、Java,以及PHP (客户端))。客户和服务器所用的Slice 定义建立两者之间的接口合约,这样的定义也是它们唯一需要达成一致的东西。
(6)操作系统无关性:ICE API 完全是可移植的,所以同样的源码能够在Windows 和UNIX上编译和运行。
(7)线程支持:Ice run time 完全是线程化的,其API是线程安全的。作为应用开发者,(除了在访问共享数据时进行同步)你无需为开发线程化的高性能客户和服务器付出额外努力。
(8)传输机制无关性:ICE目前采用了TCP/IP和UDP作为传输协议。客户和服务器代码都不需要了解底层的传输机制(你可以通过一个配置参数选择所需的传输机制)。
(9)位置和服务器透明性:Ice run time 会负责定位对象,并管理底层的传输机制,比如打开和关闭连接。客户与服务器之间的交互显得像是无连接的。如果在客户调用操作时,服务器没有运行,你可以通过IcePack让它们随需启动。服务器可以迁移到不同的物理地址,而不会使客户持有的代理失效,而客户完全不知道对象实现是怎样分布在多个服务器进程上的。
(10)安全性:通过SSL 强加密,可以使客户和服务器完全安全地进行通信,这样,应用可以使用不安全的网络安全地进行通信。你可以使用Glacier穿过防火墙,实现安全的请求转发,并且完全支持回调。
(11)内建的持久机制:使用Freeze,创建持久的对象实现变成了一件微不足道的事情。ICE提供了对高性能数据库Berkeley DB[18] 的内建支持。
ICE的源码是开放的。尽管要使用ICE平台,并不一定要阅读源码,通过源码你可以了解各种事情是怎样实现的,或把这些代码移植到新的操作系统上。
总而言之,ICE和ACE 提供了一流的分布式计算开发和部署环境,比我们所知道的其他任何平台都更完整。提供适用于异种环境的面向对象中间件平台,提供一组完整的特性,支持广泛的领域中的实际的分布式应用的开发,避免不必要的复杂性,使平台更易于学习和使用。提供一种在网络带宽、内存使用和CPU 开销方面都很高效的实现,提供一种具有内建安全性的实现,使它适用于不安全的公共网络。
ICE的全称是Internet Communications Engine,即因特网通信引擎。
ICE是由ZeroC, Inc.公司开发的。
官网:http://doc.wendoc.com/