《第十二章基于对象的分布式系统》由会员分享,可在线阅读,更多相关《第十二章基于对象的分布式系统(50页珍藏版)》请在金锄头文库上搜索。
1、第十二章 基于对象的分布式系统 12.1 分布式对象 v对象的概念 对象是一个抽象体,它将相关的服务和数据封装在一起。对象服 务以函数的形式提供,是对数据进行的操作,被称为对象的方法 (method)。对象里的数据也被称为状态(state)。 第十二章 基于对象的分布式系统 12.1 分布式对象 v对象的概念 对象的接口和对象对接口的实现 : 通过对象的接口调用对象的方法,从而可对对象的状态进行访问 或操作,除此之外,无任何对对象的状态进行访问和操作的合法 手段。一个对象可以实现多个接口;同样,给定一个接口的定义 ,多个对象可能对这一定义提供实现。接口和对象对接口的实现 是独立的 。 分布式对
2、象: 在一个机器上设置一个接口,而对象本身驻留在另一个机器上, 这通常被称为分布式对象。 第十二章 基于对象的分布式系统 12.1 分布式对象 v对象的概念 第十二章 基于对象的分布式系统 12.1 分布式对象 v对象的类型 编译时对象和运行时对象:1) 编译时对象(compile-time object)。在这种情况下,一个对象 是程序所定义的类(class)的一个实例,一个类是一个模块的抽 象描述,这个模块由一组数据元素和对这些数据的一组操作 组成; 另外一种对象是在运行时通过明确的方式构建的,称为运行 时对象(runtime object)。由于运行时对象不依赖于分布式应 用程序是使用什
3、么语言编写的,所以这种方法在许多基于对 象的分布式系统中得到采用。特别是,一个应用程序可以使 用由多种语言编写的对象来实现。 第十二章 基于对象的分布式系统 12.1 分布式对象 v对象的类型 运行时对象的实现 通常的方法是使用一个对象适配器(object adapter),它的主 要作用是将用户编写的程序包装成具有对象的外观。对象适 配器允许将一个接口转变成顾客所希望的形式和功能。例如 一个适配器可以将上面所描述C库函数动态地和一个对象结 合(bind)并打开一个对应的文件作为该对象的当前状态。 对象适配器在基于对象的分布式系统中具有重要的作用。为 了使包装尽量容易,一个对象由它所实现的接口
4、进行定义。 实现的接口在适配器中进行注册,然后这个接口对远程请求 来说就是可用的。适配器监视着所发出的对对象的调用请求 ,给顾客提供一个远程对象的映像。 第十二章 基于对象的分布式系统 12.1 分布式对象 v对象的类型 持久性对象和暂时性对象 : 一个持久性对象是一个持续存在的对象,即使是在当前它并 不包含在一个服务员进程的地址空间中,它仍然是存在的。 也就是说,一个持久性对象并不依赖于它当前的服务员。在 实际中,这就意味着当前管理这个持久对象的服务员可以将 这个对象的状态保存在磁盘中,然后退出。随后,一个新启 动的服务员能够从磁盘中将这个对象的状态读取到自己的地 址空间中去,然后处理调用请
5、求。 相反,一个暂时性对象只能随管理它的那个服务员的存在而 存在。一旦服务员退出,对象也就随之消失了。 第十二章 基于对象的分布式系统 12.2 CORBA CORBA是Common Object Request Broker Architecture的简称, 即通用对象请求代理结构。 vCORBA的总体结构 CORBA系统由四组构造元素组成,这四组构造元素由一个叫做 ORB(Object Request Broker)的机构连接。 1) ORB是任何一个CORBA分布式系统的核心,它负责在对象 和其顾客之间建立通信,并将分布和异构性的问题隐藏起来 。在许多系统中,ORB是以库函数的形式实现的
6、,由顾客程 序和服务员程序连接,提供基本的通信服务。 第十二章 基于对象的分布式系统 12.2 CORBA vCORBA的总体结构 2) 应用对象是作为应用程序的一部分而建立的。 除此之外,CORBA还提供了一些设备,这些设备用于构建 CORBA服务。参考模型对两类CORBA设备进行了区分,它 们被分成两组,一组为水平设备,另一组为垂直设备。水平 设备由通用的高层服务组成,这些高层服务和特定的应用领 域无关。这些服务当前包括为用户接口提供的服务、为信息 管理提供的服务、为任务管理(用于定义工作流系统)提供的 服务等。 垂直设备由那些为特定的应用领域而提供的高层服务组成, 例如电子商务、银行、制
7、造业等。 第四组构造元素是普通的对象服务。 第十二章 基于对象的分布式系统 12.2 CORBA vCORBA的总体结构 第十二章 基于对象的分布式系统 12.2 CORBA vCORBA的对象模型 CORBA使用远程对象模型,在这种模型中,CORBA对象只驻 留在一个服务员的地址空间中。 在CORBA中,使用CORBA的接口定义语言IDL(Interface Definition Language)对对象和服务进行说明。CORBA IDL和其 他的接口定义语言类似,在这种语言中,它提供了精确的语法 用于表达方法和参数。 接口说明可以只用IDL语言给出,但是在CORBA中,必须提供 一个严格的
8、规则用于将IDL描述的接口说明转换成所使用的程序 设计语言。 第十二章 基于对象的分布式系统 12.2 CORBA vCORBA的对象模型 CORBA系统的一般组织方式 :第十二章 基于对象的分布式系统 12.2 CORBA vCORBA的对象模型 CORBA系统的一般组织方式 : ORB :ORB是一个运行时系统,负责处理顾客和对象之间 的基本通信问题,这些通信保证请求被传送给对象的服务员 和应答返回给顾客。 ORB本身只提供少量的服务 : 1) 处理对象引用(object reference),对象引用一般来说依赖于 特定的ORB。 2) ORB提供对对象引用的打包和拆包操作,使得进程之间
9、能够 交换信息,同时还提供引用之间的比较操作。 3) ORB所提供的其他操作还包括为一个服务找到对应的进程, 这需要用到名字服务。第十二章 基于对象的分布式系统 12.2 CORBA vCORBA的对象模型 CORBA系统的一般组织方式 : 顾客静态代理:一个顾客应用程序有一个Proxy代理,Proxy 代理将调用请求打包传送给服务员,并且将来自服务员的响 应进行拆包传送给顾客程序。需要注意的是,Proxy和ORB 之间的接口不必是标准化的,因为CORBA假定所有的接口 都是由IDL描述的,CORBA为用户提供了一个IDL编译器, 这个编译器能够生成必要的代码用于处理顾客和服务员的 ORB之间
10、的通信。 第十二章 基于对象的分布式系统 12.2 CORBA vCORBA的对象模型 CORBA系统的一般组织方式 : 动态调用接口DII:在某些情况下,静态定义的接口对顾客 来说是不适用的,相反顾客需要在运行时期间确定一个特定 对象的接口是什么样的,然后构建一个对该对象的调用请求 。为此目的,CORBA为顾客提供了一个动态调用接口 DII(Dynamic Invocation Interface)。DII提供了一个通用的调 用操作,该操作从顾客那里得到一个对象引用、一个方法标 识符、一些作为参数的输入值和一些由调用者给出的变量用 于存放返回的结果。 第十二章 基于对象的分布式系统 12.2
11、 CORBA vCORBA的对象模型 CORBA系统的一般组织方式 : 服务员方的构件:在服务员方,CORBA提供了一个对象适 配器(object adapter),它负责将收到的请求转发给正确的对 象。实际的拆包操作由CORBA中的服务员方的代理Skeleton 负责处理。同顾客方的代理一样,服务员方的代理可以是静 态的,也可以是动态的。静态的代理由IDL所定义的说明编 译得到。当使用动态的通用代理,对象必须实现一个调用函 数。 第十二章 基于对象的分布式系统 12.2 CORBA v接口库和实现库 1) CORBA提供了一个接口库,里面保存所有接口定义,允许对调 用请求的动态解释。在许多C
12、ORBA系统中,有一个独立的进程 提供了一个标准的接口用于向接口库保存和检索接口定义。当 一个接口定义被编译的时候,IDL编译器会赋予这个接口一个 库标识符,这个标识符是从库中检索一个接口定义的基本手段 。 一个实现库中包含了所有需要实现和激活的对象。对象适配器 负责激活一个对象,保证对象能够在一个服务员的地址空间中 运行,从而使得对象的方法能够被调用。对一个给定的对象引 用,适配器能够与实现库联系从而准确地找到一个对象的实现 。例如,实现库应该维持一张表,该表记录了哪一个服务员需 要启动,服务员需要为特定的对象监听哪一个端口号。实现库 还要提供服务员需要装载和执行哪一个可执行文件等信息。 第
13、十二章 基于对象的分布式系统 12.2 CORBA vCORBA的服务 第十二章 基于对象的分布式系统 12.2 CORBA vCORBA的通信 对象调用模型 第十二章 基于对象的分布式系统 12.2 CORBA vCORBA的通信 事件和通告服务 CORBA定义了一个事件服务,用于提供基于事件的通信。事件 由供应者产生,由消费者接收,事件通过事件通道传输 。第十二章 基于对象的分布式系统 12.2 CORBA vCORBA的通信 事件和通告服务 CORBA定义了一个事件服务,用于提供基于事件的通信。事件 由供应者产生,由消费者接收,事件通过事件通道传输 。第十二章 基于对象的分布式系统 12
14、.2 CORBA vCORBA的通信 事件和通告服务 CORBA的事件服务存在如下缺点: 第一,为了传播事件,供应者和消费者必须都连接到事件通道上 。如果消费者是在一个事件已经产生之后才连接到事件通道上的 ,那么这个事件就会丢失。也就是说,CORBA的事件服务不支持 持久性事件。 第二,消费者无法对事件进行过滤,每个事件被传递给全部的消 费者。如果要区分不同的事件类型,需要给每一类事件独立地设 立一个事件通道。CORBA在通告(notification)服务中增加了过滤 能力,在这种服务中,如果没有消费者对某个特定的事件感兴趣 ,则这个事件不会传播。 第三,事件的传播是不可靠的。 第十二章 基
15、于对象的分布式系统 12.2 CORBA vCORBA的通信 报文队列 CORBA的支持持久性通信的模型称为报文排队(message- queuing)模型,CORBA使用了一个附加的报文服务(messaging service)来支持这种通信模型。在报文服务的情况下,有两种附 加的异步的方法请求方式,一种是回叫(callback)模式,另一种 是收集(polling)模式。为了支持持久性通信,ORB的底层通信系统应该能够保存报文 ,直至它们被接收为止。 第十二章 基于对象的分布式系统 12.2 CORBA vCORBA的通信 报文队列 第十二章 基于对象的分布式系统 12.2 CORBA v
16、CORBA的通信 互操作性 不同厂商提供的CORBA系统中,顾客和对象服务员之间的通信 有自己的方式。为了解决互操作性问题,CORBA引入了一个标 准的协议,称为通用的ORB间互操作协议GIOP(General Inter- ORB Protocol),顾客和服务员都遵守这个协议。 其中最重要的两个报文类型是Request和Reply,Request报文包 含了一个被打包的调用请求,请求中包含对象的引用,被调用方 法的名字,所需要的输入参数。每个Request报文中还有自己的 请求标识符,用于随后对对应的响应进行匹配。 Reply报文包含了被打包的返回值和输出参数,不必要明确指出 对象和方法,只需用一个和对应的Request报文中的请求标识符 相同的标识符即可。 第十二章 基于对象的分布式系统 12.2 CORBA vCORBA的通信 互操作性 第十二章