第七章分布式对象.ppt
文本预览下载声明
第7章 分布式对象; 到目前为止,在讨论分布计算时,主要介绍了消息传递范型的使用。利用这一范型,进程之间通过相互约定的某种协议来交换数据,协同完成预期的任务。
基于该范型的应用程序接口,如java单播和组播socket API,提供了隐藏低层网络通信细节的抽象,允许使用相对简单的语法来编写IPC执行代码。
本章将介绍提供抽象层次更高的一种范型---分布式对象;7.1 消息传递与分布式对象的比较; 面向数据范型适用于网络服务和简单网络应用,但不适合包含大量混合请求和应答的复杂应用。在这类应用中,消息解释任务的工作量会相当大。
分布式对象范型是在消息传递模型之上提供抽象的一种范型。该范型基于分布式系统中存在的对象。
;7.2 基本分布式对象体系;图7.2 基本分布式对象系统; 一个分布式对象由某一进程提供或输出。这里称该进程为对象服务器。必须在系统中为分布式对象注册提供一种设施,这里称之为对象注册器,或简称为注册器。
为了访问某一分布式对象,对象客户进程从注册器中查询该对象的引用。这一引用被对象客户用来调用该远程对象的各种方法。
从逻辑上看,对象客户是直接调用远程方法的。但实际上,这种调用是由一个客户代理来处理的,该代理通过与客户主机上的软件交互,提供分布式对象系统的运行时支持。该运行时支持负责向远程主机传送方法调用所需的进程间通信,包括封装需要传输给远程对象的参数数据。; 服务器端也需要类似体系结构,其中分布式对象系统的运行时支持处理消息接收和数据解封,并将调用转发到服务器代理。服务器代理通过与分布式对象交互,在本地调用方法,并将解封数据作为参数传人。该方法调用触发服务器主机上某些任务的执行。方法的执行结果(包括封装后的返回值数据),被服务器代理通过双方的运行时支持和网络支持,转发给客户代理。;7.3 分布式对象系统;7.4 远程过程调用;图7.3 远程过程调用范型; 目前,已经出现了一些基于RPC模型的应用程序编程接口。这些API采用与本地进程调用类似的语法和语义提供远程过程调用。为隐藏进程间通信细节,每个远程进程调用都要通过工具rpcgen变换,将本地过程调用转换到一个称为stub的软件模块,代表该过程调用及其参数的消息通过代理传送到远程机器。
在另一方,代理接收到消息并将之转换成与远程过程调用相对应的本地过程调用。图7.4示出了将远程过程调用转换成本地过程调用,以及交互消息传递的实际情形。
注意,双方都使用代理来提供进程间通信所需的运行时支持,完成必要的数据封装和socket调用。 ;图7.4 本地过程调用和远程过程调用的比较; 远程过程调用模型从20世纪80年代初出现以来,已经在网络应用中得到了广泛的使用。有两种针对该范型的主流API:
一种是开放网络计算远程调用(Open Network Computing Remote Procedure Call),该API由20世纪80年代早期Sun Microsystems的RPC API演变而来;
另一种为大家所熟知的API是开放小组分布式计算环境SCE(Open Group Distributed Computing Enviroment)RPC。这两种API都提供了工具rpcgen,用于将远程过程调用转换到stub的本地过程调用。
; 尽管RPC有其重要的历史意义,但这里不打算具体介绍它,原因有二:
从RPC的名称中就可以看出,它是面向过程调用的方法调用机制。RPC API使用过程或函数调用语法。因此更适合于使用过程语言(如C)编写的程序,但不适合使用Java编写的程序。Java是本课程中采用的一种面向对象语言。
为取代RPC,Java提供了远程方法调用API,该API是面向对象的,并且其调用语法比RPC更简单。;7.5 远程方法调用 ; RMI定义了一组远程接口,可以用于生成远程对象。客户机可以像调用本地对象的方法一样用相同的语法调用远程对象。
RMI API提供的类和方法可以处理所有访问远程方法的基础通信和参数引用要求的串行化。
远程方法调用类似于Sun公司1985年提出的远程过程调用(RPC)特征。RPC也要求串行化参数和返回数值数据,但由于没有涉及对象,情况比较简单。
RPC和RMI之间的一个重要差别是RPC用快速而不够可靠的UDP协议,RMI用低速而可
显示全部