第7章 分布式对象_第1页
第7章 分布式对象_第2页
第7章 分布式对象_第3页
第7章 分布式对象_第4页
第7章 分布式对象_第5页
已阅读5页,还剩61页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第7章:分布式对象,7.1消息传递和分布式对象之间的比较7.2基本分布式对象系统7.3分布式对象系统7.4远程过程调用7.5远程方法调用7.6 RMI系统的体系结构7.7使用RMI构建分布式应用系统7.8 RMI和套接字应用程序接口之间的比较。到目前为止,在讨论分布式计算时,我们主要介绍消息传递范式的使用。使用这种范式,进程通过彼此同意的某种协议交换数据,并合作完成预期的任务。基于这种模式的应用程序接口,如java单播和多播套接字API,提供了隐藏低级网络通信细节的抽象,并允许使用相对简单的语法来编写IPC执行代码。本章将介绍一个提供更高抽象层次的范例分布式对象。7.1消息传递和分布式对象之间

2、的比较表明,消息传递范式非常适合于网络服务,在网络服务中,进程通过消息交换进行交互。出于以下原因,该范例提供的抽象可能无法满足复杂网络应用的需求:基本消息传递要求参与的流程紧密耦合。在交互的过程中,过程必须彼此直接交流。如果流程之间的通信消息丢失,协作将失败。消息传递范例是一个面向数据的范例。每个消息都包含以双方同意的格式封装的数据,并根据协议被解释为请求或响应。每次收到消息时,都会触发接收过程的一个操作。面向数据的范例适用于网络服务和简单的网络应用,但不适用于包含大量混合请求和响应的复杂应用。在这种应用中,消息解释任务的工作量是相当大的。分布式对象范例是一种在消息模型之上提供抽象的范例。这个

3、范例基于分布式系统中存在的对象。7.2基本分布式对象系统,分布式对象系统的基本假设是最小化远程方法调用和本地方法调用之间的编程差异,然后允许通过使用类似于应用程序中本地方法调用的语法来调用远程方法。事实上,他们之间有一些差异。由于远程方法调用涉及两个独立进程之间的通信,因此有必要解决一些关键问题,如数据封装和事件同步。这些差异被封装在体系结构中。图7.2描述了支持分布式对象范例的基本架构。图7.2基本分布式对象系统,对象客户端代理运行时支持网络支持,对象注册器,对象服务器代理运行时支持网络支持,分布式对象是由某个进程提供或输出的。这个过程在这里被称为对象服务器。有必要在系统中为分布式对象注册提

4、供一个工具,这里称为对象注册器,或者简称为注册器。为了访问分布式对象,对象客户端进程从注册器查询对象的引用。对象客户端使用该引用来调用远程对象的各种方法。逻辑上,对象客户端直接调用远程方法。但事实上,这个调用是由一个客户端代理处理的,它通过与客户端主机上的软件进行交互,为分布式对象系统提供运行时支持。运行时支持向远程主机传输方法调用所需的进程间通信,包括封装要传输到远程对象的参数数据。服务器端也需要类似的体系结构,其中分布式对象系统的运行时支持处理消息接收和数据解封,并将调用转发给服务器代理。通过与分布式对象交互,服务器代理在本地调用该方法,并将未密封的数据作为参数传输。此方法调用触发服务器主

5、机上某些任务的执行。该方法的执行结果(包括封装的返回值数据)由服务器代理通过双方的运行时支持和网络支持转发给客户端代理。7.3分布式对象系统,分布式对象范例已广泛应用于分布式应用中,并提供了大量基于此范例的工具集。包括远程方法调用;基于CORBA(公共对象请求代理体系结构)的系统;DCOM(分布式组件对象模型);支持soap(简单对象访问协议)的工具集和API。7.4远程过程调用,RMI来自远程过程调用范例。在远程过程调用模型中,过程调用从一个过程发送到另一个过程,被调用的过程可以驻留在远程系统中,其中数据作为参数传递。流程接收到调用后,会执行流程中的操作,并在调用结束时通知调用者。如果有返回

6、值,该值将从被调用方传递给调用方。图7.3显示了RPC范例。图7.3远程过程调用范例,远程过程,过程a,逻辑执行流,过程1(arg1,arg2),过程b,返回值,目前,一些基于RPC模型的应用编程接口已经出现。这些应用编程接口为远程过程调用提供了与本地过程调用相似的语法和语义。为了隐藏进程之间的通信细节,每个远程进程调用都通过rpcgen工具转换成一个名为stub的软件模块,代表进程调用及其参数的消息通过代理传输到远程机器。另一方面,代理接收消息并将其转换为对应于远程过程调用的本地过程调用。图7.4显示了将远程过程调用转换为本地过程调用和交互式消息传输的实际情况。请注意,双方都使用代理为进程间

7、通信提供运行时支持,并完成必要的数据封装和套接字调用。1.主机a上的进程1调用主机b 2上的进程2。运行时支持到主机a 3的代理的调用映射。代理封装数据并向主机B4的代理发出IPC调用。主机B的生成解释接收到的数据,并启动对进程2的调用。5。执行过程2中的代码,并将结果返回给主机B6的代理。代理封装返回的数据,并向主机a7的代理发起IPC调用。代理接收返回值,解封数据,并将返回值转发给进程1,进程1将重新启动其执行流程。进程1、进程2、主机a、进程1、代理、主机b、进程2、代理、远程过程调用(返回时的执行路径未示出)、本地过程调用、执行流和远程过程调用模型自20世纪80年代初以来已经广泛用于网

8、络应用中。这种模式有两种主流的应用编程接口:一种是开放网络计算远程过程调用,它是从20世纪80年代早期的太阳微系统公司的远程过程编程接口发展而来的;另一个众所周知的应用编程接口是开放组分布式计算环境。这两个APIs都提供了rpcgen工具,用于将远程过程调用转换为存根的本地过程调用。虽然RPC具有重要的历史意义,但我不打算在这里详细介绍它,原因有二:从RPC的名称中,我们可以看出它是一种过程调用的方法调用机制。RPC API使用过程或函数调用语法。因此,它更适合用过程语言(如C语言)编写的程序,但不适合用Java编写的程序。Java是本课程中使用的面向对象语言。为了替代远程过程控制,Java提

9、供了面向对象的远程方法调用API,其调用语法比远程过程控制简单。7.5远程方法调用,Java RMI(远程方法调用)-Java的远程方法调用是Java中一种独特的分布式计算技术,它允许运行在一个Java虚拟机上的对象调用运行在另一个Java虚拟机上的对象的方法,这样Java程序员可以方便地在网络环境中进行分布式计算。面向对象的设计要求每个任务都由最适合该任务的对象来执行。RMI进一步发展了这一概念,因此任务可以在最适合该任务的机器上完成。RMI定义了一组可以用来生成远程对象的远程接口。客户端可以使用与本地对象方法相同的语法来调用远程对象。RMI API提供的类和方法可以处理访问远程方法的所有基

10、本通信和参数引用需求的序列化。远程方法调用类似于Sun公司在1985年提出的远程过程调用(RPC)的特性。RPC还需要序列化参数并返回数字数据,但是情况相对简单,因为不涉及任何对象。远程过程控制和远程信息管理的一个重要区别是,远程过程控制使用快速且不可靠的UDP协议,远程信息管理使用低速且可靠的TCP/IP协议,远程信息管理不同于CORBA。远程方法调用和CORBA都是分布式计算技术,在分布式计算中各有利弊。CORBA被设计成一个开放的规范,可以被所有的编程语言使用,也就是说,一台机器上的Java客户端可以使用SmallTalk或c从另一台机器请求服务。正是因为这种语言的独立性,CORBA才如

11、此灵活和有吸引力。为了适应语言独立性,CORBA采用了一个非常通用的标准作为接口。在不同的语言中,远程调用、签名和对象引入有不同的定义,所以CORBA必须尽可能中立和开放。正是这种普遍性是CORBA的弱点。当开发人员使用CORBA时,他们用新的标准定义语言接口,这要求开发人员学习新的编程接口,因此降低了远程模型的透明度。RMI仅在Java中为分布式计算开发。远程调用标准是为Java和应用程序Java的自然Java签名和调用而开发的,这使得RMI对Java开发人员来说是透明的,并且易于实现。RMI与Java语言紧密集成,与CORBA相比,它能提供更好的容错和异常处理能力。尽管Java RMI标准

12、不像CORBA那样独立于语言,但Java本身是一个独立的平台,这使得RMI成为跨平台分布式软件开发的一个很好的选择。7.6 RMI系统架构,类似于RPC API,在Java RMI架构中,为了将远程方法调用转换为本地方法调用,需要代理软件模块提供相应的运行时支持并处理底层进程之间的通信细节。在这种架构中,客户机和服务器都提供三层抽象。头/骨架层、远程引用层和传输层,如图所示:1)存根层:客户端进程的远程方法调用被传递给代理对象存根。存根层位于应用层之下,负责解释客户端程序发送的远程方法调用;然后将其转发到下一层(远程参考层RRL)。支持应用程序中的接口。当客户端调用远程方法时,它不直接调用远程

13、对象,而是调用本地存根的方法。存根是远程对象的客户本地代表或代理角色。在RMI中,存根和远程对象实现相同的远程接口集。存根保持与服务器端对象的连接。它将负责执行对远程对象的方法调用。存根序列化参数数据,并将序列化的数据传递给传输流。客户端的RRL通过调用流与服务器端的RRL进行通信。在执行远程方法调用之后,RRL将序列化的返回值发送回存根以负责反序列化。2)框架每个远程对象可以有一个相应的框架,框架负责将调用分配给实际的远程对象实现。该框架是与服务器端RRL接口的服务器端组件。该框架接受客户端RRL的方法调用请求。服务器端RRL将反向移动发送到远程方法的任何参数。然后框架在服务器端调用实际的对

14、象实现。该框架还负责接收来自远程对象的返回值,并将其传输到传输流。自java1.2版本1.2以来,框架已被放弃。它的功能被“反射”机制所取代。在我们的讨论中,我们将继续使用骨架作为概念描述。3)远程参考层远程参考层(RRL)负责维护与特定存根或框架模型无关的独立应用协议。这种灵活性使得RRL的变化不会影响到另外两层。RRL指的是低层传输接口,它负责向头层和帧层提供流。RRL通过传输层由客户端与服务器端组件通信。客户端工件包含特定于远程服务器的信息。这个信息被传递到服务器端组件,所以它只依赖于服务端RRL。服务器端的RRL负责在向框架发送远程方法调用之前引用语法并处理这些语法。客户端和服务器端组

15、件之间的通信由传输层处理。RRL解释和管理客户发送到远程服务对象的引用,并启动到下一层(即传输层)的IPC操作,以便将方法调用传输到远程主机。将平台独立的存根/框架层映射到平台相关的传输层;实现远程参考协议。4)传输层传输层负责建立和维护客户端和服务器之间的连接。当传输层从客户端接收到RRL请求时,它会查找所请求的远程对象的RMI服务器,然后传输层建立到该服务器的补丁连接。然后,传输层将建立的连接传输到客户端RRL,并将远程对象的引用添加到内部表中。客户端现在已连接到服务器。传输层监控连接的“活跃度”。如果长时间后连接没有移动,传输层负责关闭连接。传输层基于TCP协议,所以它是面向连接的。该层

16、与网络体系结构中的其他工具一起执行IPC,以将表示方法调用的数据传输到远程主机。安装、维护和关闭连接;执行传输协议。5)对象注册通过RMI API,几个目录服务可以用来注册分布式对象。JNDI (Java命名和目录接口)就是这样一个目录服务,它比本章中使用的RMI注册更通用,因为它可以用在不使用RMI API的应用程序中。RMI注册表RMI注册表是一个简单的目录服务,由java SDK提供。RMI注册表是一项服务,当服务器处于活动状态时,它运行在对象服务器的主机上,默认情况下,运行在TCP端口1099上。从逻辑上讲,从软件开发人员的角度来看,客户端程序发送的远程方法调用直接与服务器程序中的远程对象进行交互,这与本地方法调用和本地对象之间的交互是一样的。在物理上,远程方法调用在运行时被转换成对存根和框架的调用,这导致了通过网络链接的数据传输。图7.6描述了存根和框架之间的时间事件状态图。图7.6,RMI存根和RMI框架、远程方法、远程方法调用、客户端程序、框架、存根、包参数之间交互的状态图;发送请求,解包参数;调用方法

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论