ICE学习总结资料.docx

上传人:b****7 文档编号:9189467 上传时间:2023-02-03 格式:DOCX 页数:37 大小:709.03KB
下载 相关 举报
ICE学习总结资料.docx_第1页
第1页 / 共37页
ICE学习总结资料.docx_第2页
第2页 / 共37页
ICE学习总结资料.docx_第3页
第3页 / 共37页
ICE学习总结资料.docx_第4页
第4页 / 共37页
ICE学习总结资料.docx_第5页
第5页 / 共37页
点击查看更多>>
下载资源
资源描述

ICE学习总结资料.docx

《ICE学习总结资料.docx》由会员分享,可在线阅读,更多相关《ICE学习总结资料.docx(37页珍藏版)》请在冰豆网上搜索。

ICE学习总结资料.docx

ICE学习总结资料

目录1

1.准备知识3

1.1中间件3

2.ICE定义4

2.1什么是ICE4

2.2ICE的优点5

2.3与WebService的对比5

3.ICE基础概念和模型6

3.1ICE的基础调用模型6

3.2ICE调用模式7

3.3ICE的版本控制(Facet)8

3.4持久化(Feeze)8

3.5服务装箱管理(ICEBox)8

3.6文件分发(ICEPatch2)9

3.7发布/订阅服务(ICEStorm)9

3.8网络拓扑负载解决方案(ICEGrid)--终极武器9

4.ICE关键术语9

4.1Ice对象(IceObjects)9

4.2代理(Proxies)10

4.3Servants13

4.4.IceRunTime概述13

4.5对象适配器15

5.Slice语言介绍17

5.1语法规范17

5.2基本类型19

5.3接口、异常21

6.ICE架构21

6.1分布式应用程序架构21

5.2ICE的整体架构23

7.ICEGrid介绍24

7.1IceGrid功能24

7.2IceGrid架构25

8.ICEGrid配置部署27

8.1环境27

9.ICE的C#简单示例31

10.ICE的实际应用31

1.准备知识

1.1中间件

简单来说,中间件就是一种独立的系统软件或者某种服务应用程序。

中间件处在客户端与服务器端的操作系统之上,主要负责网络资源管理和网络通信。

中间件是一类软件,而非一种软件;中间件不仅仅实现互连,还要实现应用之间的互操作;中间件是基于分布式处理的软件,最突出的特点是其网络通信功能。

中间件的特性

        1)运行在异种环境中,也就是说可以运行在多种硬件和操作系统中;

        2)支持分布式应用,提供跨网络,或者操作系统平台的应用或者服务的交互功能;

        3)同样也支持一些标准的网络协议和标准的接口;

中间件的分类

         1)远程过程调用:

server和client可以位于同一台计算机,也可以位于不同的计算机,甚至运行在不同的操作系统之上。

         2)面向消息的中间件:

MOM指的是利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。

程序将消息放入消息队列或从消息队列中取出消息来进行通讯,与此关联的全部活动,比如维护消息队列、维护程序和队列之间的关系、处理网络的重新启动和在网络中移动消息等是MOM的任务,程序不直接与其它程序通话,并且它们不涉及网络通讯的复杂性。

         3)对象请求代理(ORB)是对象总线,它在CORBA规范中处于核心地位,定义异构环境下对象透明地发送请求和接收响应的基本机制,是建立对象之间client/server关系的中间件。

         4)事务处理监控界于client和server之间,进行事务管理与协调、负载平衡、失败恢复等,以提高系统的整体性能。

它可以被看作是事务处理应用程序的“操作系统”。

2.ICE定义

2.1什么是ICE

ICE(InternetCommunicationsEngine)呢,它是由Zeroc公司开发的一套开源中间件系统,是一种面向对象的中间件平台。

与DCOM,CORBA,WEBSERVICEDcom类似,支持RPC(RemoteProcedureCall远程过程调用)协议,但是在效率上却高于前面所述几种技术方案,是一种适用于各种环境的面向对象的中间件平台:

客户和服务器可以用不同的编程语言来编写,可以运行在不同的操作系统和系统架构上,并且可以使用多种网络技术经行通信(例如TCP、UDP、SSL等),这给我们的应用和部署带来很大的便捷性。

2.2ICE的优点

1、跨平台,支持多种语言

2、面向对象编程

3、为分布式应用方面提供了一整套强大的特性和功能支持(例如负载平衡、软件分发、数据同步等)。

4、在网络带宽、内存使用和CPU开销方面已经内置了高效的实现。

5、内置了安全特征的实现,可跨越不安全的网络(广域网)使用。

6、降低了复杂性,易于学习和使用。

2.3与WebService的对比

说到远程调用,我们最熟悉的莫过于WebService了,那么就对他们做一下简单的对比,其中星的颗数有待商榷,表达的也仅是一种意思,不过从我个人的角度上来看,他们已经没有可比性了,因为你拿的是一台机器和一群机器在比。

ICE的强大在于它推出了ICEGrid,在后续的文章中将会重点介绍它。

3.ICE基础概念和模型

3.1ICE的基础调用模型

首先我们来看看ICE的基础调用模型(如下图所示),值得一提的是在单项调用和数据报业务中,4、5、6几步是没有的,这里面的几个概念和关键词特别重要,也是我们后面学习的基础

 Client(客户端):

估计这个大家都非常清楚,通俗的讲就是一个请求的发起方。

Proxy(代理):

代理实际上就是远程服务驻在本地的一个代表,创建它时首先会和远程服务经行握手和状态确认等操作,Client所有的操作都是从过Proxy来办理的。

代理又分为直接代理(已经知道服务端的位置及其他信息)和间接代理(不知道服务器在哪里,由Registry注册器告诉它地址等信息)。

Adapter(适配器):

是配置相当于服务单位(Servant)的管理者,它管理着每个请求该分配给哪一个服务单位。

Servant(服务单元):

它是服务的最小单位,一般是具体到某个接口的实现。

刚才我们提到了接口的实现,但是这个接口是谁定义的,这个时候我们不免要提到Slice(SpecificationLanguageforIce),也就是ICE所使用的“语言”,正是有了这个“中间语言”,我们才可以做到支持各种编程语言,因为你所使用的语言只要跟Slice打交道就可以了

3.2ICE调用模式

ICE采用的网络协议有TCP、UDP以及SSL三种,不同于WebService,ICE在调用模式上有好几种选择方案,并且每种方案正对不同的网络协议的特性做了相应的选择。

1.Oneway(单向调用):

客户端只需将调用注册到本地传输缓冲区(LocalTransportBuffers)后就立即返回,并不对调用结果负责。

2.Twoway(双向调用):

最通用的模式,同步方法调用模式,只能用TCP或SSL协议。

3.Datagram(数据报):

类似于Oneway调用,不同的是Datagram调用只能采用UDP协议而且只能调用无返回值和无输出参数的方法。

4.BatchOneway(批量单向调用):

先将调用存在调用缓冲区里面,到达一定限额后自动批量发送所有请求(也可手动刷除缓冲区)。

5.BatchDatagram(批量数据报):

与上类似。

不同的调用模式其实对应着不动的业务,对于大部分的有返回值的或需要实时响应的方法,我们可能都采用Twoway方式调用,对于一些无需返回值或者不依赖返回值的业务,我们可以用Oneway或者BatchOneway方式,例如消息通知;剩下的Datagram和BatchDatagram方式一般用在无返回值且不做可靠性检查的业务上,例如日志。

3.3ICE的版本控制(Facet)

ICE内部集成非常好的版本控制功能(Facet),在每一个服务单元(Servant)其实都有一个Facet与之并存,如果你没有认为指定,那么这个默认Facet的值就为空(String.Empty)。

在我们业务的实际应用过程中,经常要碰到服务升级的情况,但是升级服务就意味着增大了原有业务调用的稳定性,从而增大了风险,这个Facet就刚好解决我们遇到的这个难题,我们每次升级都是“新增服务”,而非改变原有业务,新来的业务调用新版本服务,原有业务调用原有版本服务。

当检测一些很“老”的服务确认无人调用的时候我们就可以关掉了。

Facet的实现其实也非常简单,服务端(Adapter)在挂载服务(Servant)的时候就制订了相应版本号。

这时候客户端要调用此方法就必须提供正确的版本号(而非默认版本号)。

3.4持久化(Feeze)

一款对Servant服务进行管理和持久化的工具,Adapter可以注册多个Servant在内存中,当Adapter接收到一个新的请求(request)后便去管理列表里面查找是否存在已有的Servant,如果存在则返回该Servant,如果不存在则实例化一个新的Servant实例。

当不停的实现新Servant之后势必会造成内存的激增已经CPU资源的浪费,而且一些很少被调用的Servant也一直驻存在服务中。

为此我们设定服务的Servant的上限,到达该上限后自动将“最少调用”的Servant状态保存在数据库(或文件等持久化设备)中,然后关闭这些Servant,一旦有新的请求此Servant时再次获取原状态来激活Servant……

3.5服务装箱管理(ICEBox)

从名字就可以看出来,它是一款装箱托管方案,类似于IIS,可以托管多个应用服务,并且每个服务是支持插拔式管理的,相互之间不受影响,对ICE的应用做了接口设计,每个服务只是实现了Ice.Services接口就可以了,这样一样让我们可以更专注的关于于我们的业务而非运行的平台。

它为我们提供了统一的托管平台,是一个很不错的工具。

3.6文件分发(ICEPatch2)

ICE最重要的功能就是多节点部署,以达到负载平衡或者容灾的目的,大多数时候每个节点(一般而言是一台服务器)配置的应用程序都是一样的,当每次有更新或者新增应用的时候,便需要手工同步每个节点的文件,这样的手工操作显得十分繁琐而且完全依赖操作人的行为。

而ICEPatch2解决了这一难题,只要有一台以为的ICEPatch2服务在运行当中,就可以通过分发的方式同步其他各个节点的文件,也就是说运维人员只需要维护一台机器的应用程序文件就可以了。

3.7发布/订阅服务(ICEStorm)

未完待续……

3.8网络拓扑负载解决方案(ICEGrid)--终极武器

ICEGrid实际上是一系列组件的组合,形成了一套强大的文件分发、负载均衡、快捷部署等解决方案。

这也是ICE功能中最为强大的一套,至于细节,有待后文慢慢道来。

4.ICE关键术语

4.1Ice对象(IceObjects)

 Ice对象是一种概念性的实体(或称抽象)。

Ice对象具有以下特征:

• Ice对象是本地或远地的地址空间中、能响应客户请求的实体。

•一个Ice对象可在单个或多个服务器中实例化(后者是冗余方式)。

如果某个对象同时有多个实例,它仍是一个Ice对象。

•每个Ice对象都有一个或多个接口。

一个接口是一个对象所支持的一系列有名称的操作。

客户通过调用操作来发出请求。

•一个操作有0个或更多参数,以及一个返回值。

参数和返回值具有明确的类型。

参数是有名称的,并且有方向:

in参数由客户初始化,并传给服务器;out参数由服务器初始化,并传给客户(返回值只是一种特殊的out参数)。

• 一个Ice对象具有一个特殊的接口,称为它的主接口。

此外,Ice对象还可以提供零个或更多其他接口,称为facets(面)。

客户可以在某个对象的各个facets之间进行挑选,选出它们想要使用的接口。

•每个Ice对象都有一个唯一的对象标识(objectidentity)。

对象标识是用于把一个对象与其他所有对象区别开来的标识值。

Ice对象模型假定对象标识是全局唯一的,也就是说,在一个Ice通信域中,不会有两个对象具有相同的对象标识。

4.2代理(Proxies)

        要想与某个Ice对象联系,客户必须持有这个对象的代理1。

 代理是客户的地址空间中的一种制品(artifact);对客户而言,代理就是Ice对象的代表(该对象可能在远地)。

一个代理充当的是一个Ice对象的本地大使:

当客户调用代理上的操作时,Iceruntime会:

1.定位Ice对象

2.如果Ice对象的服务器没有运行,就激活它

3.在服务器中激活Ice对象

4.把所有in参数传送给Ice对象

5.等待操作完成

6.把所有out参数及返回值返回给客户(或在发生错误的情况下抛出异常)

    代理封装了完成这一系列步骤所必需的全部信息。

特别地,代理包含有:

•寻址信息:

用于让客户端runtime联系正确的服务器

•对象标识:

用于确定服务器中的哪一个对象是请求的目标

•可选的facet标识符:

用于确定代理所引用的是对象的哪一个facet

串化代理(StringifiedProxies)

        代理中的信息可以用串的形式表示。

例如:

SimplePrinter:

default-p10000

        这个字符串表示的是一个代理,我们可以阅读这种表示方式。

Iceruntime提供了一些API调用,允许你把代理转换成它的串化形式,或是进行相反的转换。

例如,如果你要把代理存储在数据库表或文本文件中,这种功能会很有用。

        倘若客户知道某个Ice对象的标识及其寻址信息,使用这些信息,它可以“凭空”创建代理。

换句话说,代理内部的所有信息都被认为是透明的;要与某个对象联系,客户只需要知道这个对象的标识、寻址信息,以及对象的类型(为了能调用操作),就可以了。

直接代理(DirectProxies)

        直接代理是这样一种代理:

其内部保存有某个对象的标识,以及它的服务器的运行地址。

该地址由以下两项内容完全确定:

•协议标识符(比如TCP/IP或UDP)

•针对具体协议的地址(比如主机名和端口号)

        为了联系直接代理所代表的对象,Iceruntime使用代理内部的寻址信息来联系服务器;每当客户向服务器发出请求时,也会把对象的标识发送过去。

间接代理(IndirectProxies)

        间接代理是这样一种代理:

其内部保存有某个对象的标识,以及对象适配器名(objectadaptername)。

要注意,间接代理没有包含寻址信息。

为了正确地定位服务器,客户端runtime会使用代理内部的对象适配器名,将其传给某个定位器服务Locator,比如ICEGrid服务。

然后,定位器会把适配器名当作关键字,在含有服务器地址的表中进行查找,把当前的服务器地址返回给客户。

客户端runtime现在知道了怎样联系服务器,就会像平常一样

分派(dispatch)客户请求。

        这整个过程与DomainNameService(DNS)所进行的映射类似,DNS会把Internet域名映射到IP地址:

当我们使用域名(比如)来查找某个网页时,主机名首先在幕后被解析成IP地址,一旦得到了正确的IP地址,这个地址就会用于连接服务器。

在Ice中,对象适配器名会映射到协议-地址对(protocol-addresspair),但其他方面则非常类似。

客户端runtime会通过配置了解怎样去和IceGrid服务联系(就像web浏览器

会通过配置了解要使用哪一个DNS)。

直接绑定vs.间接绑定(DirectVersusIndirectBinding)

        把代理里面的信息解析为协议-地址对的过程称为绑定。

不奇怪,直接绑定用于直接代理,而间接绑定用于间接代理.

        间接绑定的主要好处是,它允许我们移动服务器(也就是说,改变它们的地址),同时又不会使客户所持有的已有代理失效。

换句话说,使用直接代理,你不用为了定位服务器而进行额外的查找,但如果服务器被移到其他机器上,它就不再能工作。

而另一方面,即使我们移动(或迁移,migrate)服务器,间接代理也能够继续工作.

4.3Servants

    Ice对象是一种具有类型、标识,以及寻址信息的概念性实体。

但客户请求最终必须到达具体的服务器端的处理实体,由这样的实体提供操作调用(operationinvocation)的行为。

换句话说,客户请求最后必须到达服务器,在其内部执行代码,而这些代码用特定的编程语言编写,并在特定的处理器上执行。

    在服务器端提供操作调用的行为的制品叫servant。

一个servant提供一个或多个Ice对象的实质内容(或体现这些对象)。

实际上,servant就是服务器开发者编写的类的实例,这些类作为一个或多个Ice对象的servant、向服务器端runtime进行注册。

类的方法对应于Ice对象的接口上的操作,并且提供这些操作的行为。

    一个servant可以只体现一个Ice对象,也可以同时体现若干Ice对象。

    如果是前一种情况,servant所体现的Ice对象的标识在这个servant中是隐含的。

如果是后一种情况,在每次收到请求时,servant也会收到Ice对象的标识,这样,servant可以决定在处理该请求期间,体现哪一个对象。

反过来,一个Ice对象也可以拥有多个servant。

例如,我们可以为某个Ice对象创建一个代理,这个对象有两个不同的地址,分别在两台机器上。

在这种情况下,我们将拥有两个服务器,每个服务器都有一个servant,但两个servant体现的是同一个Ice对象。

当客户调用这样的Ice对象上的操作时,客户端runtime只把请求发给一个服务器。

换句话说,使用体现同一个Ice对象的多个servant,你可以构建冗余的系统:

客户端runtime试着把请求发给一个服务器,如果失败,就把请求发给第二个服务器。

只有在第二次尝试也失败的情况下,错误才会报告给客户端应用代码。

4.4.IceRunTime概述

  按照个人暂时的理解,IcerunTime具体是指Ice封装好了大部分的API,通过这些API实现分布式应用程序运行时的各种功能。

  首先,其中一个重要的部分是通信器,它是Iceruntime的主句柄,也是Iceruntime的主进入点。

另外Ice一个重要的机制是servant定位器,用于控制性能和内存消耗之间的平衡。

其他一些同样不可缺少的组成部分接下来将会进行介绍。

通信器

 Iceruntime的主进入点由本地接口Ice:

:

Communicator 表示。

Ice:

:

Communicator的一个实例与一些运行时资源是关联在一起的:

1) 客户端线程池:

确保客户端至少有一个线程可用于接受对未完成请求的答复处理。

同时它可用于异步方法调用(AMI)。

2) 服务端线程池:

负责接收到来的连接,并处理来自客户的请求。

可用于异步分派(AMD)。

3) 配置属性:

配置Iceruntime的各方面属性。

每个通信器有各自的属性集。

4) 对象工厂:

实例化从已知基类继承而来的servant类。

5) 一个日志记录器对象:

确定日志消息的处理方式。

实现了Ice:

Logger接口。

6) 一个统计对象:

打印一些通信流量消息等。

实现了Ice:

:

Stats接口。

7) 一个缺省路由器:

实现了Ice:

Router接口。

Glacier使用它实现了Ice的防火墙功能。

8) 一个缺省定位器:

用于把对象标识解析为代理的对象。

IcePack用于构建定位服务。

9) 一个插件管理器:

用于给通信器增加特性的对象。

ICESSL被实现为插件。

10)对象适配器:

负责分配到来的请求,并把请求分配给相应的servant处理。

下一小节将会具体介绍。

通信器的接口是用Slice定义的。

下面是其部分接口:

 moduleIce{

localinterfaceCommunicator{

stringproxyToString(Object*obj);

Object*stringToProxy(stringstr);

ObjectAdaptercreateObjectAdapter(stringname);

ObjectAdaptercreateObjectAdapterWithEndpoints(

stringname,

stringendpoints);

voidshutdown();

voidwaitForShutdown();

voiddestroy();

//...

};

//...

};

通信器提供了一些操作:

1)      proxyToString,stringToProxy:

这两个操作将代理串化,或者相反。

2)      createObjectAdapter,createObjectAdapterWithEndpoints:

创建新的对象适配器。

3)      shutdown:

关闭服务端的Iceruntime

4)      waitForShutdown:

挂起发出调用的线程,直到通信器关闭为止。

5)      destroy:

销毁通信器及相关资源,例如线程,通信端点以及内存资源。

 

4.5对象适配器

  一个通信器含有一个或者多个对象适配器。

对象适配器处在Iceruntime和服务器之间的界线上,负责;

1)      把ice对象映射到到来请求的servant,并把请求分配给相应servant对象来处理。

2)      协助进行生命周期操作,避免出现Ice对象和servan的建立与销毁时出现冲突。

3)      提供一个或者多个传输端点。

每个适配器有一个或多个servant。

        每个对象适配器都有一个或更多servant,对Ice对象进行体现;同时还有一个或更多传输端点。

如果对象适配器拥有的传输端点不止一个,所有向该适配器作了注册的servant可以在任何一个端点上响应到来的请求。

换句话说,如果对象适配器有多个传输端点,这些端点代表的是通往同一组对象的不同通信路径。

        每个对象适配器都只属于一个通信器(但一个通信器可以有多个对象适配器)。

活动Servant映射表

     每个对象适配器都维护有一个叫做活动servant映射表(ASM:

ActiveServantMap)。

活动表的作用可以用一下这图表示:

因此它的功能可以描述为:

把请求绑定到相应的正确的servant。

图中示例用了直接代理,它将传输端点嵌在了代理中。

 这个表的数据结构有点像路由表,网络的路由表就是这种结构每个对象适配器都维护有一个叫作活动servant映射表,就是asm用于把对象标识映射到servant,

 

        当客户把操作调用发给服务器时,请求的目标是特定的传输端点。

传输端点隐含地标识了请求所针对的对象适配器(因为同一个端点只能绑定到一个对象适配器)。

客户藉以发送请求的代理含有对应的对象的标识,客户端runtime会在线路上随调用一起发送这个对象标识。

对象适配器继而使用这个对象标识、在它的ASM中查找正确的servant,把调用分派给它。

5.Slice语言介绍

学习ICE,我们要从ICE的“语言”学起,简称SLICE(SimpleLanguageOfICE)。

SLICE有自己独立的语法体系和结构,我们必须熟悉和遵守这些语法体系才能到达我们想要的效果。

按照官方的说明文档,结合自己的使用,我们可以以下几块来讲解:

语法

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 成人教育 > 成考

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1