当前位置首页 > 百科> 正文

ICE(面向对象中间件)

2019-10-07 05:54:45 百科
ICE(面向对象中间件)

ICE(面向对象中间件)

网路通信引擎ICE(Internet Communications Engine)是Zero C公司的分散式系统开发专家实现的一种新的高性能的面向对象中间件平台。从根本上说, ICE 为构建面向对象的客户-伺服器套用提供了工具、 API( Application Program Interface)和库支持。基于ICE可以实现电信级的解决方案。

基本介绍

  • 软体名称:ICE
  • 开发商:ZeroC
  • 软体语言:C++,Java,c#等
  • 中文名:网路通信引擎

技术简介

中间件(middleware)是基础软体的一大类,属于可复用软体的範畴。顾名思义,中间件处于作业系统软体与用户的套用软体的中间。中间件在作业系统、网路和资料库之上,套用软体的下层,总的作用是为处于自己上层的套用软体提供运行与开发的环境,帮助用户灵活、高效地开发和集成複杂的套用软体。
在设计网站架构的时候可以使用ICE实现对网站套用的基础对象操作,将基础对象操作和资料库操作封装在这一层,在业务逻辑层以及表现层(java,php,.net,python)进行更丰富的表现与操作,从而实现比较好的架构。基于ICE的数据层可以在未来方便的进行扩展。ICE支持分散式的部署管理,讯息中间件,以及格线计算等等。
ICE 作为一种新型的面向对象中间件,目前并未得到广泛地套用。然而它在架构上为套用开发提供的种种好处,如面向对象的语义、支持同步和异步的讯息传递、支持多个接口、机器、语言、作业系统无关性、执行绪支持、位置和伺服器的透明性、高度的安全性、内建的恆久机制以及开放的源码等等,它有着非常强大的技术优势。在构建三层分散式系统方面, ICE 中间件技术有着良好的发展前景。

实现原理

客户与伺服器

按照常规的理解,客户与伺服器的划分在于两者承担的角色不同:客户是发出请求的一方,伺服器是回响请求、提供服务的一方。然而在实际套用中,很多伺服器并不是纯粹的伺服器,它们常常充当某些客户的伺服器,但为了完成它们的客户的请求,它们又会充当其他的伺服器的客户。
同理,很多客户机也不是纯粹的客户。例如,客户可以在伺服器上启动一个长时间运行的操作,在启动该操作时,客户可以向伺服器提供回调对象( callback object),供伺服器用于在操作完成时向客户发出通知。在这种情况下,客户在启动操作时充当客户,而在接收操作完成通知时充当伺服器。
ICE

ICE对象

Ice 对象是本地或远地的地址空间中、能回响客户请求的实体。一个Ice对象可在一个或多个伺服器中实例化。每个Ice对象都有一个或多个接口。一个接口是一个对象所支持的一系列有名称的操作,客户通过调用操作来发出请求。一个操作有零个或更多参数,以及一个返回值。每个Ice 对象都有一个唯一的对象标识。对象标识是用于把一个对象与其他所有对象区别开来的标识值。 Ice 对象模型假定对象标识是全局唯一的,也就是说,在一个Ice 通信域中,不会有两个对象具有相同的对象标识。对象标识既可以通过调用GenerateUUID()全局唯一产生,也可以根据自己的喜好随意创建一个,只要没与其他对象标识重複即可。对象标识的定义如下:
module Ice {
struct Identity {
string name;
string category;
};
};

代理

要想与某个Ice对象联繫,客户必须持有这个对象的代理。对客户而言,代理就是Ice对象的本地代表(该对象可能在远地)。代理所封装的信息有:定址信息:用于让客户端run time 联繫正确的伺服器对象标识:用于确定伺服器中的哪一个对象是请求的目标可选的facet 标识符:用于确定代理所引用的是对象的哪一个facet。

Servants

Ice 对象是一种具有类型、标识,以及定址信息,在本地或远地的地址空间中、能回响客户请求的实体的概念性实体。而Servants是伺服器端用具体的程式语言实现的实体,并且在伺服器的地址空间中进行实例化。 Servants 为“客户传送的操作调用”提供伺服器端行为。

动态映射表

动态映射表( Active servant map),简称ASM。之所以称为动态映射表,是因为它可以动态维护servant的数量,可以添加,也可以删除。它是一个查找表,用于把对象标识映射到servant;要激活一个servant,就将它添加进动态映射表。这个过程可以看作是在“Ice 对象的标识”与“对应的用程式语言编写的、负责为该ICE对象处理请求的servant”之间创建连结。这个连结创建好之后,一旦客户端的请求到来时, Ice run time 就可以将该请求分派给正确的servant来执行。动态servant映射表的几种操作行为如下:
add
add 操作把一个具有指定标识的servant 增加到ASM中。一旦add 被调用,请求就会分派给这个servant。返回值是这个servant 所体现的Ice对象的代理。你不能用同一标识多次调用add:如果你试图在ASM 中增加一个已经存在的标识,就会引发AlreadyRegisteredException
addWithUUID
addWithUUID 操作的行为和add 操作一样,但你不需要为servant 提供标识。addWithUUID 会生成一个UUID,作为对应的Ice 对象的标识。
remove
remove 操作中断对象标识与其servant 之间的关联,从ASM 中移除对应的条目。一旦servant 解除了激活,新到来的针对已移除的对象标识的请求会引发ObjectNotExistException

具体实现过程

Ice 对象的实现过程如下:

伺服器端

1) 创建 servant 类,并在伺服器端 Ice run time 上注册。
ICE(面向对象中间件)
2) 实例化 servant 类,创建具体的 servant。
3) 为这个 servant 所体现的 Ice 对象创建标识。
4) 激活 servant(即将 servant 添加进动态 servant 映射表)。

客户端

1) 当客户端要调用某一操作时, 客户端 run time 会将对象标识以及请求一起发给伺服器。
2) 伺服器端的对象适配器接收到了请求和对象标识, 对象适配器继而根据这个对象标识,在它所维护管理的active servant map中查找其相对应的正确的servant。
3) 若找到了与对象标识对应的正确的servant,就把调用分派给它。若查找不到,就会引发Object Not Exist Exception。最后客户端接收到来自伺服器端的返回值或异常信息。

设计目标

ICE主要设计目标是:
  1. ·成为适用于异种环境的面向对象中间件平台。
  2. 具有一组完整的特性,支持广泛领域中的实际的分散式套用的开发。
  3. ·去掉不必要的複杂性,使平台更易于学习和使用。
  4. 是一种在网路频宽、记忆体使用和CPU 开销方面都很高效的实现。
  5. 是一种具有内建安全性的实现,使它适用于不安全的公共网路。

优点

(一) 面向对象的语义
支持面向对象的分散式计算技术。
(二) 适合在异种环境中使用
客户和伺服器可以用不同的程式语言编写,可以运行在不同的作业系统和机器架构上,并且可以使用多种网路技术进行通信。无论套用环境如何,这些源码是可以移植的。
(三) IceStorm 的发布/订阅机制
IceStorm 是一种发布-订阅服务, 能够解除客户与伺服器的耦合。 在本质上, IceStorm充当的是事件分发交换机。发布者把事件发给这个服务,由它发给订阅者。这样,发布者发布的单个事件就可以传送给多个订阅者。 IceStorm适用于构建高效的事件转发机制。
(四) 利用 Glacier 机制,可以方便地实现穿越防火墙
Glacier 是Ice 防火墙服务:它能让客户与伺服器通过防火墙安全地进行通信,且不牺牲安全性。
(五) 採用了 TCP/UDP 协定
ICE 提供了一种 RPC 协定,既可以把 TCP/IP、也可以把 UDP 用作底层传输机制。(可以通过配置一个参数来选择需要的传输机制)。另外, ICE 还允许採用 SSL 作为传输机制,让客户和伺服器间所有通信都进行加密。
(六) 可靠的安全机制
ICE 採用了 SSL 加密技术,使得客户机和伺服器哪怕是在不安全的网路中,也可以安全地进行通信。
声明:此文信息来源于网络,登载此文只为提供信息参考,并不用于任何商业目的。如有侵权,请及时联系我们:baisebaisebaise@yeah.net