正确答案:要解决的主要问题如下。
(1)异类系统间交互的兼容性:例如处理不同操作系统的字节顺序、数据长度、数据表示方式等。
(2)通信的可靠性问题:例如出错处理、重传机制等。
(3)通信的安全性问题。
(4)接口的可用性、易用性问题。
说明直接利用底层通信协议可以解决哪些基于成熟的分布式软件体系结构不能解决的问题。
第二步:根据问题要点仔细阅读正文找出相应段落
(1)现在主流的分布式软件体系结构(如EJBCORBADCOM/COM+)都融合了面向对象技术对分布式对象提供了很好的支持可以利用这些体系结构支持分布式对象访问的通信机制(如RMI/IIOPORBORPC等)来实现各子系统之间的交互其优点是实现相对简单且比较可靠。
(2)利用底层通信协议(如TCP/IP)实现各子系统之间的交互其优点是通信效率高且可控性好。
(3)透明访问:客户端可以像访问本地对象一样访问分布式对象。
(4)再好的分布式软件体系结构也不可能适应所有的应用系统有时不得不放弃现有的分布式软件体系结构的支持自己利用底层的通信协议来实现各子系统之间的交互。
第三步分析试题的内容构思答案的要点
要解决的主要问题如下。
(1)异类系统间交互的兼容性:例如,处理不同操作系统的字节顺序、数据长度、数据表示方式等。
(2)通信的可靠性问题:例如,出错处理、重传机制等。
(3)通信的安全性问题。
(4)接口的可用性、易用性问题。
说明直接利用底层通信协议,可以解决哪些基于成熟的分布式软件体系结构不能解决的问题。
第二步:根据问题要点,仔细阅读正文,找出相应段落
(1)现在主流的分布式软件体系结构(如EJB,CORBA,DCOM/COM+)都融合了面向对象技术,对分布式对象提供了很好的支持,可以利用这些体系结构支持分布式对象访问的通信机制(如RMI/IIOP,ORB,ORPC等)来实现各子系统之间的交互,其优点是实现相对简单且比较可靠。
(2)利用底层通信协议(如TCP/IP)实现各子系统之间的交互,其优点是通信效率高且可控性好。
(3)透明访问:客户端可以像访问本地对象一样访问分布式对象。
(4)再好的分布式软件体系结构也不可能适应所有的应用系统,有时不得不放弃现有的分布式软件体系结构的支持,自己利用底层的通信协议来实现各子系统之间的交互。
第三步,分析试题的内容,构思答案的要点 解析:[问题1]
在分布式系统中,不同的组件可能用不同的程序语言来实现,且这些组件可能运行在不同类型的处理器上。数据模型、信息表示法以及通信协议可能都不一样。因此,分布式系统就需要某种软件来管理这些不同的部分,确保它们能够通信和交换数据。中间件就是这样一种软件,它位于系统的不同的分布式组件之间。
中间件是一种通用软件,通常不是由应用开发人员编写的,而是买现成的。中间件的例子有负责数据库通信管理的软件、事务管理器、数据转换器和通信控制器等,最重要的一种中间件就是分布式系统框架。
在分布式系统的客户机/服务器模型中,客户机必须要知道服务器的存在及它们能提供的服务,还要知道如何才能使用这些服务器上的服务。这个模型对许多类型的应用来说能工作得很好。然而,它对系统设计者是一个很大的限制,因为设计必须决定服务在哪里提供,而且还得规划系统的伸缩性,当有较多的客户机增加到系统中时,就得考虑如何将服务器的负载分布开来。
更通用的分布式系统的设计方法是去掉客户机与服务器之间的差别,用分布式对象体系结构来设计系统。在一个分布式对象体系结构中,其基本系统组件是对象,它能够提供一组服务,对外给出这些服务的接口。其他对象调用这些服务,对象之间并不存在客户机与服务器的界限,接受服务者即扮演客户机的角色,提供服务者就是服务器。
对象可能分布在网络的多台计算机上,它们通过中间件相互通信。就像硬件总线允许不同的卡插于其上以支持硬件设备之间的通信一样,这个中间件被看成软件总线。它提供一组服务,允许对象之间通信和往系统上添加和移走对象。这个中间件称作对象请求代理。它的作用是在对象之间提供一个无缝接口。
主要的分布式对象体系结构框架有OMG定义的CORBA(通用对象请求代理体系结构),Microsoft开发的DCOM(分布式组件对象模型),SUN开发的EJB(企业级Java Bean)3种。它们在分布式对象处理方面的原理基本一样,只是具体实现上有所区别。下面以最通用的CORBA为例做简单的介绍。
CORBA对象模型也将对象看成是对属性和服务的封装,这对对象而言是很常见的,不同之处在于CORBA对象一定有一个独立的接口定义,它定义了对象的公共属性和操作。CORBA对象接口使用标准的、语言无关的接口描述语言(IDL)。如果一个对象想用另一个对象提供的服务,那么它就通过IDL接口访问这些服务。CORBA对象有一个独立的标识,称作互操作对象引用(IOR),当一个对象请求另外一个对象上的服务时使用IOR。
对象请求代理(ORB)知道正在请求服务的对象以及接口,ORB处理对象之间的通信。相互通信的对象没有必要知道对方的位置,也没有必要知道关于实现的具体细节。由于IDI。接口隔离了ORB和对象,因此可以以一种完全透明的方式改变对象的实现。对象位置可以在请求期间改变,对系统中其他对象来讲这也是透明的。
调用对象有一个相关联的IDL占位模块(stub,又称桩模块),定义了提供服务的那个对象的接口。当需要一个服务时,调用对象的实现者就将调用嵌入到实现对象的相应占位模块中去。提供服务的对象有一个相关联的IDL框架,它连接接口和服务的实现。当服务通过接口被调用时,IDL框架将它翻译成对服务的调用,而不管服务是用什么语言实现的。
对象请求代理不总是被实现成单独的过程,而是连接对象实现的框架。因此,在分布式系统中,每台运行着分布对象的计算机都有自己的对象请求代理,它将处理局部对象的所有请求。在请求调用的是远程对象提供的服务时,就需要在不同的ORB之间进行通信。实现ORB之间的通信有2种实现方式:一是提供所有ORB对全部IDL接口定义的访问,二是实现OMG标准的通用ORB间通信协议(GIOP),IIOP则是基于TCP/IP的 GIOP,如图6-5所示。
[问题2]
基于成熟的分布式软件体系结构来构建整个系统,可以利用这些体系结构支持分布式对象访问的通信机制来实现各子系统之间的交互,因为其通信机制、数据接口等已成标准,程序员只需直接使用就可以了,所以这种方法的优点是实现相对简单且比较可靠。
如果利用底层通信协议实现各子系统之间的交互,则各子系统之间的通信机制、数据接口等都需要开发人员自己拟订和确定,这是该方法要解决的主要问题。