ICE系列培训(一).ppt
《ICE系列培训(一).ppt》由会员分享,可在线阅读,更多相关《ICE系列培训(一).ppt(81页珍藏版)》请在三一办公上搜索。
1、ICE系列培训(一),钟潘统一网管平台专项,培训内容,Ice概述Slice语言,1.Ice概述,1.1 Ice简介1.2 Ice术语1.3 Ice架构1.4 示例,1.1 Ice简介,(1)Ice是什么首先,Ice(Internet Communications Engine)是一个面向对象的中间件平台。基本上,这是指Ice提供一系列工具、APIs和库,支持构建面向对象的C/S结构应用程序。其次,Ice应用程序可运行于异构环境:客户端和服务端可使用不同编程语言编写,可以运行在不同操作系统和机器架构上,可以使用多种多样的网络通信技术。同时,这些应用程序的源代码是可移植的而不管部署环境是什么。,1
2、.1 Ice简介,(2)Ice支持哪些环境支持语言:客户端和服务端:C+、Java、C#、Python、Objective-C;客户端:PHP、Ruby支持网络协议:TCP、UDP、SSL支持操作系统及编译器:完整列表见http:/,1.1 Ice简介,(2)Ice支持哪些环境,1.1 Ice简介,(3)Ice包含哪些内容Ice Core:远程通信的运行时支持Ice Util:实用工具库,包含智能指针、线程、Unicode处理等Slice及编译器:定义服务器和客户端交互的契约,并生成语言相关代码Ice ServicesFreeze&FreezeScript:对象持久化IceGrid(Ice3.
3、0前叫IcePack):分布式计算IceBox:服务宿主IceStorm:消息发布订阅IceSSL:SSL支持Glacier2:软件防火墙IcePatch2:软件补丁,1.1 Ice简介,(4)Ice和同类技术比较Ice是和DCOM/COM+、CORBA、WebService同属一类的技术。但是DCOM/COM+只能用于Windows平台,CORBA作为一种规范已经包含过多无用的复杂而变得华而不实、难以使用,WebSerivce以XML-RPC/SOAP为基础导致其效率和安全性是一大软肋,相比之下,Ice更加开放、简洁、高效和安全。参考资料(注意以下内容所用Ice版本比较老):反叛之冰:Int
4、ernet Communications Engine:http:/,1.1 Ice简介,(5)Ice实现目标提供一个适于异构环境使用的面向对象的中间件平台提供一整套的特性,支持广泛领域下现实分布式应用的开发避免不必要的复杂性,使平台易于学习和使用提供一个在网络带宽、内存使用、CPU负载上高效的实现提供一个具有内建安全性,使其适用于不安全的公众网络的实现,1.2 Ice术语,(1)Client and ServerClient和Server是相对的概念,指请求过程中应用程序所充当的角色,Client指请求的发起方,而Server指请求的响应方,因此常常Client和Server的角色是可以互换
5、的,例如有时需要Server回调客户端的方法,此时Server就是充当的Client角色。,1.2 Ice术语,(2)InterfaceInterface是客户端和服务端交互的契约,中立于具体实现语言,采用Slice语言定义。Interface包含0或多个Operation,每个Operation有0或多个参数和一个返回值,参数具有方向性:输入参数由客户端初始化然后传给服务端,而输出参数由服务端初始化然后传给客户端。客户端通过调用Operation发出请求。,1.2 Ice术语,(3)Ice ObjectIce Object是一种概念上或抽象上的实体,具有如下特征:一个Ice Object是本
6、地或远程地址空间中的实体,能响应客户端请求;一个单一的Ice Object可以在一个服务器或多个服务器(冗余的)实例化,如果一个Ice object同时有多个实例,仍然是一个单一Ice Object;每个Ice Object有一个或多个Interface,其中必须有一个为main interface,其他的称为facet,客户端在调用时可以决定使用哪个Interface;每个Ice object有一个唯一的object identity,这个标识符最低要求是在一个adapter内是唯一的,但是为了架构上的好处(34),推荐使用全局唯一标识符,如UUID。,1.2 Ice术语,(4)Endpoi
7、nt表明服务端所使用的协议、地址、端口等,例如default-h 10.78.100.100-p 10000-t 1000,表示协议为default,default的值可通过Ice.Default.Protocol设置,默认为tcp,协议还可以为tcp、udp、ssl;-h 10.78.100.100表示地址;-p 10000表示端口;-t 1000表示超时时间为1秒。多个endpoint用“:”分隔。完整语法见E.2 p1963。,1.2 Ice术语,(5)Object Adapter一个Adapter包含一个或多个endpoint,每个endpoint可使用不同的协议、地址、端口;一个Ad
8、apter包含一个或多个Ice Object的具体化servant。客户端可以通过这些endpoint访问这些servant,Adapter负责将客户请求分派到servant中的应用代码以及协助servant的生命周期管理。,1.2 Ice术语,(6)ServantServant是Ice Object在服务端的具体化,使用具体语言(如C+)实现Interface,然后new一个对象,这样一个Servant就创建了,但是要使Servant成为Ice Object的具体化,这还不够,还需要将Servant加入adapter,并为其具体化的Ice Object起一个标识名,最后激活adapter,这
9、时Ice Object才存在了。一个Servant可以一次具体化一个或多个Ice Object,例如new一个Servant后,可以以不同的名字加入同一个或不同adapter,这时一个Servant就是同时具体化多个Ice Object,客户端在请求过程中可以决定具体化哪一个Ice Object。相反的,一个Ice Object可以有多个Servant,例如在不同地址空间或不同机器上创建不同Servant具体化同一个Ice Object,这样就构成一个冗余系统,提高系统可靠性。,1.2 Ice术语,(7)Proxy和Servant相对,Proxy是Ice Object在客户端的具体化。Prox
10、y扮演着Ice Object的本地代表,客户端要和Ice Object联系,必须持有一个Ice Object的Proxy。当客户端调用Proxy的一个Operation时,Ice运行时会:定位Ice Object;激活Ice Object所在的Server如果它没有运行;激活Ice Object;传输任何输入参数到Ice Object;等待Operation完成;返回任何输出参数和返回值给客户端(或抛出异常)。,1.2 Ice术语,(8)Stringified ProxyProxy中的信息可以表达为一个字符串,例如:SimplePrinter:default-p 10000,其中SimpleP
11、rinter为对象标识;default p 10000为endpoint,表示使用默认tcp协议,端口10000(完整语法见E.1 p1961)。Ice运行时提供API在Proxy和字符串表达之间进行转换。字符串化的好处是可以将Proxy存储在数据库或文本文件。,1.2 Ice术语,(9)Direct Proxy直接Proxy是指Proxy中包含的endpoint就是要访问的服务器地址。(10)Indirect Proxy间接Proxy不包含endpoint,有两种形式:一种只有对象标识,一种包含对象标识和object adapter标识。类似DNS,要确定正确的server,客户端需要将Pr
12、oxy传给location service(32.17),后者查找合适的server地址并返回给客户端。,1.2 Ice术语,(11)Direct Vs.Indirect Binding将Proxy解析为协议-地址对的过程称为绑定,direct binding用于direct proxy,indirect binding用于indirect proxy。Indirect binding的主要好处是允许我们移动服务器而不会使客户端持有的Proxy变为无效。(12)Fixed ProxyFixed Proxy和特定连接关联,包含一个连接句柄,一旦连接关闭,Proxy不再工作。Fixed Proxy
13、不能整编,也就是不能作为参数传递给方法调用。Fixed Proxy用于实现双向连接,允许服务端回掉客户端而不开启新的连接(36.7)。,1.2 Ice术语,(13)Routed ProxyRouted Proxy将所有请求转发到特定目标对象。它用于实现类似于Glacier2这样的服务,允许客户端和位于防火墙后的服务通信(42)。(14)Replication在Ice中,Replication包括使object adapter在多个地址上可用。Replication的目标通常是通过在多台计算机上运行同一个服务来提供冗余性。如果一台计算机失效了,其他还可用。,1.2 Ice术语,要使用replic
14、ation意味着应用程序必须为此而专门设计。这表示,当客户端能通过一个地址访问一个对象时,从其他地址也能获得相同结果。Ice支持一种有限形式的replication,通过在Proxy中指定多个地址,Ice运行时初始连接时随机选择一个地址,如果失败则会尝试其他地址,例如:SimplePrinter:tcp-h server1 p 10001:tcp-h server2-p 10002,1.2 Ice术语,(15)Replica Groups除了基于Proxy的Replication,Ice还支持一种称为Replica Groups的更有用的Replication形式,这种形式需要使用locati
15、on service。Replica Groups有一个唯一的标识,一旦一个Replica Groups建立后,可以通过indirect proxy的第二种形式(adapter标识替换为Replica Groups标识)进行访问。Replica Groups的好处是引入间接性,通过作为中间人的location service添加更多智能绑定过程。,1.2 Ice术语,(16)At-Most-Once SemanticsIce保证At-Most-Once Semantics语义,即请求要么发送出去,如果不能发送,会以合适的异常通知客户端。任何情况都不会出现请求被发送两次,重试的尝试只会出现在确切
16、的知道发送失败时(UDP例外)。虽然无At-Most-Once Semantics可构建更健壮的分布式应用程序,但现实情况是存在有副作用的方法,这些方法不能武断执行多次。如果方法无副作用,在Slice中可定义为idempotent,这样Ice就能做更多有益的错误恢复。,1.2 Ice术语,(17)Synchronous Method Invocation默认情况下,Ice使用的请求分派模型是同步远程过程调用,在调用过程中,客户线程会被阻塞,直到调用完成。(18)Asynchronous Method Invocation(AMI)Ice也支持异步方法调用:和同步调用不同的是,客户端传入额外的回
17、调对象,调用立即返回,当操作完成时,客户端运行时会调用回调对象以便返回操作结果。服务端是无法区分客户端是采用同步还是异步调用的。,1.2 Ice术语,(19)Asynchronous Method Dispatch(AMD)AMD是AMI在服务端的等价物。服务端默认情况下使用同步分派,分派线程同时负责应用代码的执行,一个操作执行完后,此线程才能处理其他请求。使用AMD,服务端可以控制分派的过程,当有请求到达时,服务端会收到通知,应用代码可以选择将请求放入用户队列然后释放分派线程,然后由用户线程对请求进行处理,并通过回调对象将结果返回给客户端。同样,客户端也无法区分服务端是同步分派还是异步分派。
18、,1.2 Ice术语,(20)Oneway Method Invocation 对于oneway invocation,客户端运行时将调用交给本地传输机制,一旦本机传输机制缓冲了请求,客户请求就完成了,实际请求随后由操作系统异步发送。服务端不会回应oneway invocation,也就是只有从客户端到服务端的数据流,相反方向则没有。Oneway invocation是不可靠的,但可以获得更高的效率。Oneway invocation只可用于没有返回值,没有输出参数,不会抛出用户异常的方法。对服务端而言,无法区分客户调用是oneway还是twoway的。Oneway只有在目标对象提供面向流的传
19、输机制,例如TCP/IP或SSL时才可用。尽管如此,Oneway invocation无法保证到达服务端的顺序和调用顺序一致,这取决于线程调度。,1.2 Ice术语,(21)Batched Oneway Mehtod InvocationBatched oneway invocation允许你以一条单一消息发送一系列oneway请求,从而提高效率,也能保证请求的顺序。(22)Datagram Invocation和Oneway invocation类似,不同的是:要求目标对象提供UDP传输机制;个别调用可能简单的丢失,例如依次进行3次调用,中间的调用可能丢失,但在oneway invocati
20、on中是不会发生的;个别调用可能无序到达,和oneway的失序不同,oneway是由于多线程引起,而datagram即使在单线程情况也会失序。,1.2 Ice术语,(23)Batched Datagram Invocation和Batched Oneway Invocation类似,需要注意的是批量消息的总大小不要超过PDU限制。(24)Run-Time ExecptionsIce运行时预定义的异常。(25)User Exceptions 用户自定义异常。(26)属性大多数Ice运行时行为可通过属性进行配置。属性以名-值对的形式出现,例如Ice.Default.Protocol=tcp。,1.
21、3 Ice架构,(1)客户端/服务器结构,1.3 Ice架构,(1)客户端/服务器结构Ice Core and API:远程通信的运行时支持Proxy Code:由Slice定义生成,负责将本地调用转化为RPC,同时负责序列化和反序列化。Skeleton:由Slice定义生成,是Proxy Code服务端的对应物;Object Adapter:Ice运行时的一部分,只有服务器会用到Adapter。,1.4 示例,(1)编写Slice定义并编译module Demo interface Printer void printString(string s);保存为Printer.ice,使用sli
22、ce2cpp进行编译后得到Printer.h和Printer.cpp,它们是服务端和客户端共用的。,1.4 示例,(2)编写服务端#include#include using namespace std;using namespace Demo;class PrinterI:public Printer public:virtual void printString(const string,1.4 示例,(2)编写服务端intmain(int argc,char*argv)int status=0;Ice:CommunicatorPtr ic;try ic=Ice:initialize(ar
23、gc,argv);Ice:ObjectAdapterPtr adapter=ic-createObjectAdapterWithEndpoints(SimplePrinterAdapter,default-p 10000);Ice:ObjectPtr object=new PrinterI;adapter-add(object,ic-stringToIdentity(SimplePrinter);,adapter-activate();ic-waitForShutdown();catch(const Ice:Exception,1.4 示例,(3)编写客户端#include#include u
24、sing namespace std;using namespace Demo;intmain(int argc,char*argv)int status=0;Ice:CommunicatorPtr ic;try ic=Ice:initialize(argc,argv);Ice:ObjectPrx base=ic-stringToProxy(SimplePrinter:default-p 10000);PrinterPrx printer=PrinterPrx:checkedCast(base);if(!printer)throw Invalid proxy;,printer-printStr
25、ing(Hello World!);catch(const Ice:Exception,2.Slice语言,2.1 Slice介绍2.2 Slice源文件2.3 词法规则2.4 Modules2.5 Slice基本类型2.6 User-Defined Types2.7 Interfaces,Operations,and Exceptions2.8 Classes2.9 Forward Declarations2.10 Type IDs2.11 Operations on Object2.12 Local Types2.13 Names and Scoping2.14 Metadata2.15
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ICE 系列 培训
链接地址:https://www.31ppt.com/p-5370315.html