ice服务:
IcePack我们在第 12 页提到过, IcePack 是 Ice 的定位服务,用于在使用间接绑定时把符号性的 (symbolic)适配器名解析为协议-地址对。 除了这样的定位服务, IcePack 还提供了其他特性:• IcePack 允许你注册服务器,进行自动启动:当客户发出请求时,服务器无需在运行, IcePack 会在第一个客户请求到达时,随需启动服务器。• IcePack 支持部署描述符 (deployment descriptors),能让你轻松地配置含有若干服务器的复杂应用。• IcePack 提供了一种简单的对象查找服务,客户可用来获取它们感兴趣的对象的代理。IceBoxIceBox 是一种简单的应用服务器,可用于协调许多应用组件的启动和停止。应用组件可以作为动态库、而不是进程进行部署。可以理解为IceBox就是用于加载自己写的库的应用程序IceStormIceStorm 是一种发布-订阅服务,能够解除客户与服务器的耦合。在本质上, IceStorm 充当的是事件分发交换机。发布者把事件发给这个服务,由它发给订阅者。这样,发布者发布的单个事件就可以发送给多个订阅者。只有那些与订阅者感兴趣的主题相吻合的主题才会发给这个订阅者。 这个服务允许 你指定服务质量标准, 让应用在可靠性和性能之间进行适当的折衷 。发布订阅者可以理解为生产消费者的一种表现形式。适合场景:1 把信息分发给大量应用组件2 IceStorm还可以作为联盟(federated)服务运行,也就是说,服务的多个实例可以在不同的机器上运行,使处理负载分摊到许多 CPU 上。IcePatchIcePatch 是一种软件修补服务。 你可以用它来轻松地把软件更新分发给客户。客户可以简单地连接到 IcePatch,请求获得特定应用的更新。这个服务会自动检查客户的软件的版本,并以一种压缩形式下载任何更新过的应用组件,从而节省带宽。GlacierGlacier 是 Ice 防火墙服务:它能让客户与服务器通过防火墙安全地进行通信,且又不牺牲安全性。 客户-服务器之间的通信数据使用公钥证书进行了完全的加密,并且是双向的。 Glacier 支持相互认证,以及安全的会话管理。
ICE的好处:
• 面向对象的语义
Ice “在线路上”完全保留了 面向对象范型。所有的操作调用都使用迟后绑定,所以操作的实现的选定,是根据对象在运行时的 (而不是静态的)实际类型决定的。
• 支持同步和异步的消息传递Ice 提供了同步和异步的操作调用和分派,并且通过 IceStorm 提供了发布-订阅消息传递机制。这样,你可以根据你的应用的需要来选择通信模型,而不必把你的应用硬塞进某种模型里。
• 支持多个接口通过 facets,对象可以提供多个不相关的接口,同时又跨越这些接口、保持单一的对象标识。这提供了极大的灵活性,特别是在这样的情况下:应用在发生演化,但又需要与更老的、已经部署的客户保持兼容。
• 机器无关性客户及服务器与底层的机器架构屏蔽开来。对于应用代码而言,像字节序和填充这样的问题都隐藏了起来。
Ice 综述
• 语言无关性
客户和服务器可以分别部署,所用语言也可以不同 (目前支持C++、 Java,以及 PHP (客户端))。 客户和服务器所用的 Slice 定义建立两者之间的接口合约,这样的定义也是它们唯一需要达成一致的东西。
• 实现无关性
客户不知道服务器是怎样实现其对象的。这意味着,在客户部署之后,服务器的实现可以改变,例如,它可以使用不同的持久机制,甚至不同的程序设计语言。
• 操作系统无关性
Ice API 完全是可移植的,所以同样的源码能够在 Windows 和 UNIX上编译和运行。
• 线程支持
Ice run time 完全是线程化的,其 API 是线程安全的。 作为应用开发者,(除了在访问共享数据时进行同步)你无需为开发线程化的高性能客户和服务器付出额外努力。
• 传输机制无关性
Ice 目前采用了 TCP/IP 和 UDP 作为传输协议。客户和服务器代码都不需要了解底层的传输机制 (你可以通过一个配置参数选择所需的传输机制)。
• 位置和服务器透明性
Ice run time 会负责定位对象,并管理底层的传输机制,比如打开和关闭连接。客户与服务器之间的交互显得像是无连接的。如果在客户调用操作时,服务器没有运行,你可以通过 IcePack 让它们随需启动。服务器可以迁移到不同的物理地址,而不会使客户持有的代理失效,而客户完全不知道对象实现是怎样分布在多个服务器进程上的。
• 安全性
通过 SSL 强加密,可以使客户和服务器完全安全地进行通信,这样,应用可以使用不安全的网络安全地进行通信。你可以使用 Glacier穿过防火墙,实现安全的请求转发,并且完全支持回调。
• 内建的持久机制
使用 Freeze,创建持久的对象实现变成了一件微不足道的事情。 Ice提供了对高性能数据库 Berkeley DB[18] 的内建支持。
总结:
也就是说,ICE是跨语言,跨平台,面向对象的通信中间件。在此基础上,我们能很方便地进行应用程序间的事件效果。相比wcf而言,它具有一套更全面的通信和管理机制,对象持久化,跨平台均是wcf不具备的。