📄 中间件及其在三层客户机服务器模型中的应用.htm
字号:
</font></td>
</tr>
</table>
<p align="center"><img src="image/37.gif" width="236" height="142"
alt="37.gif (3536 bytes)"></p>
<table border="0" width="90%">
<tr>
<td><p ALIGN="CENTER"><font face="宋体">图2 ORB的总体框架图</font></p>
<p ALIGN="left"><font face="宋体"> 理想的要求是,一个ORB应赋予每个对象(与其它对象特别是远程的对象进行通信时)以下的分布透明性:<br>
位置:无论其它对象是否处于同一个计算机中;<br>
访问路径:与其它对象交换消息经过的途径;<br>
重定位:其它对象从一台计算机移至另一台;<br>
数据表示:其它对象相应的数据格式;<br>
通信机制:使用何种进程间的通信机制和规程;<br>
调用机制:其它对象的方法是如何执行的。例如:进程、线程和动态链接库等的细节;<br>
存储机制:其它对象任何可以或不可使用存储的情况;<br>
机器类型:任何机器型号上的不同;<br>
程序语言:其它对象是以何种语言实现的;<br>
操作系统:任何操作系统上的不同;<br>
安全机制:其它对象本身所具有的访问控制机制。<br>
对以上各方面的任何变更都无须将这个特定对象重新编译(或重新链接、重新加载等等),其整体效果是,
对任何一个对象的实现动态地进行更改,都将不会影响到其它的对象,无论它们是服务者还是请求者。<br>
<strong>1.5 基于消息的中间件MOM</strong><br>
基于消息的中间件MOM提供了一个完整的处理环境,允许开发者及用户连接不同系统之间的数据和代码,或采用一致的界面进行应用处理的互连。MOM提供了一个高层应用接口,为不同系统提供操作核心。MOM产品的工作主要是通过将信息以消息的方式在程序间传递来完成。<br>
MOM一般可以分为两种形式:消息传递(Message Passing)和消息队列(Message
Queuing)。<br>
消息传递在建立大型的分布式应用中比较常见。其主要的模式是广播/订购(Publish-Subscribe)方式。采用该方式,应用程序既可以订购,也可以广播。该通信模型提供了位置透明性。程序只需要简单地将消息以主题方式发送出去,由中间件来负责将消息传递给所有订购该主题的程序。MOM主要通过agents技术来实现Publish-Subscribe方式应用。当程序广播消息时,首先与一个代理进行连接,将消息传递给代理。代理负责路由消息给相应的程序。由于代理可以实现消息的动态路由功能,因此,该方式能够提供较好的容错性能,但它缺乏MOM的异步特性,不太适合长时间网络断开的情况。<br>
消息队列方式允许程序无需直接建立起连接即可发送和接收消息。程序只须简单地将消息发送给消息队列,由消息队列负责消息的传递,对应用程序完全透明。消息队列采用异步方式,为信息提供了一个安全的存储方式,特别适用于不是直接连接的应用,如移动用户、发送方或接收方进程可能处于不活动状态的应用。它的缺点是需要一些配置工作,性能不是很高,而且如果队列丢失,整个系统将受到影响。<br>
MOM可以克服基于RPC的中间件的限制,提供基于消息的异步通信机制,因此MOM
API调用不会阻塞应用程序,同时MOM不会占用大量的网络带宽,可以跟踪事务,通过将事务存储在磁盘上,可以恢复系统及网络故障。<br>
常见的MOM产品有:DEC的MessageQ、IBM的MQSeries、Microsoft的MSMQ。</font></p>
<p ALIGN="left"><font face="宋体"><big><strong>2 中间件优点及具体应用</strong></big><br>
传统的客户机/服务器模式是一种双层模型。双层模型的物理实现方式为:一台桌面电脑当做客户机使用,而一台网络服务器则用于容纳后端数据库引擎。在双层模型里,程序逻辑在客户机与服务器这两种物理位置之间分担,应用程序的商业逻辑必须物理性地驻留于客户机端,或在后端DBMS里以触发器或存储过程的形式实现。这种双层的客户机/服务器方案的优点在于实现数据访问相当简单,GUI可与数据源直接约束在一起,数据维护的所有细节都可以得到自动控制。但是它也存在着很多的不利因素。尽管数据访问得到了简化,但却缺乏灵活性,我们通常无法对自己与数据源的交互作用进行完全的控制,因为这种控制是自动的。很明显,额外的管理会消耗客户机资源,并可能导致应用程序的性能下降。<br>
双层客户机/服务器模型存在以下三个方面的限制因素:<br>
不可伸缩 双层模型无法超越客户机的物理界限,而且服务器也会禁止这种模型的伸缩。<br>
不能管理 由于不能封装商业规则,也不能对这些规则进行集中配置,所以常用程序的重用也不方便。<br>
性能较差 因为将图形界面与数据源绑定在一起,所以会消耗客户机的主要系统资源。这对客户机来说是一个沉重的负担,会导致系统性能的下降。<br>
正是由于双层客户机/服务器方案存在诸多限制,所以又提出了一种新的三层服务器模型。三层客户机/服务器模型以构建分割式应用程序为基础。对一个应用程序进行分割以后,可将代码划分为不同的逻辑组件,在三层的客户机服务器模型中,这些逻辑组件分为三个逻辑层:用户服务、业务服务和数据服务,它们共同组成一个应用程序。我们把这种三层的设计模型称为“服务模型”。<br>
三种服务的属性如下:<br>
用户服务 提供信息和功能、浏览定位,保证用户界面的一致性和完整性;<br>
业务服务 共享的业务政策,从数据中生成业务信息,保证业务的一致性;<br>
数据服务 数据的定义、永久数据的存储和检索,保证数据的一致性。 </font></td>
</tr>
</table>
<p align="center"><img src="image/38-1.gif" width="305" height="184"
alt="38-1.gif (8410 bytes)"></p>
<table border="0" width="90%">
<tr>
<td><p ALIGN="CENTER"><font face="宋体">图3 服务模型结构图</font></p>
<p ALIGN="left"><font face="宋体"> 使用服务模型,可以把应用程序的需求分解成明确定义的服务。在定义了服务之后,需要进一步创建具体的物理构件来实现它们。构件是一个或几个服务在物理上的封装,可以通过构件的接口获得这些服务。构件可以是.exe或.dll文件、数据库触发器和存储过程的集合,或者任何几个其它物理软件实体。构件是由它所提供的服务以及它和其它构件的相互作用来定义的。根据性能和维护的需求、工作量、网络带宽以及其它的因素,可以在网络上灵活地部署这些构件。这些构件总是通用的,并且遵守公开的接口标准,所以它们可以被重用,并能被多个应用程序所共享,外界所能知道的就是它们的接口。实际上这些物理构件就是基于ORB的中间件。<br>
这种基于构件的三层客户机/服务器的优点可概括为以下四个方面:<br>
可重用性 许多应用程序可共享和重用封装在构件中的功能。<br>
灵活性 从桌面计算环境到功能更强的网络服务器,随处都可分配工作,这有利于协调性能和网络带宽。<br>
可管理性 将大型复杂的工程细分为简单、安全的构件工程。<br>
易维护性 将业务逻辑部署在中央服务器上,而不是分散在用户桌面上,这有助于处理各种变化,并缩短解决方案的往返时间。<br>
在某电视台资料管理及业务处理信息系统中,我们采用了上述三层的服务模型:在客户机上的客户服务程序,在构件服务器上的业务服务程序和在数据服务器上的数据服务程序。客户服务程序主要处理表示逻辑,也就是以某种方式同用户进行交互,它基本上是一种图形用户界面。业务服务程序主要完成业务规则的控制和对数据库的访问,并且业务服务程序是以构件的形式提供给客户服务程序调用的。由于业务服务程序是以构件的形式给出的,所以一个构件能被多个客户服务程序调用,例如节目资料检索构件就能让其它各个子系统的客户服务程序调用,以便客户服务程序在检索结果集基础上进行其它处理。数据服务程序主要就是各种智能数据库所能提供的功能,例如存储过程、存储查询等等。<br>
该系统的结构如图4所示。</font></td>
</tr>
</table>
<p align="center"><img src="image/38-2.gif" width="338" height="188"
alt="38-2.gif (10788 bytes)"></p>
<table border="0" width="90%">
<tr>
<td><p ALIGN="center"><font face="宋体">图4</font></p>
<p ALIGN="left"><font face="宋体"> 在这个三层客户机/服务器模型中,我们把各种业务规则都封装在各自相应的构件中,这样业务规则的实现和客户使用的图形用户界面的实现就相分离了(在传统的两层客户机/服务器模型中,两者是同时在客户机应用程序中实现的),当一方要进行改变时,只对需改变的一方进行改变。与此同时,在同一层上的构件之间也可以相互调用,这样也增加了代码的可重用性,减少了编程量,而且因为构件也是相互独立的,所以当需求改变时也只需对相应的构件进行改变。如此一来就大大减少了系统维护的负担,并提高了系统的适用性。</font></p>
<p align="left"><font face="宋体"> <strong>宋晓梁 </strong>硕士研究生。主要研究方向:新型程序语言设计。<br>
* 国家高新技术研究发展(863)计划及江苏省自然科学基金资助。<br>
作者单位:宋晓梁 刘东生 许满武(南京大学计算机科学与技术系,计算机软件新技术国家重点实验室 江苏<sup>.</sup>南京210093)</font></p>
<p ALIGN="left"><font face="宋体"><strong>参考文献</strong></font></p>
<p align="left">[<font face="Times New Roman">1</font>] <font face="Times New Roman">Ron
Ben-Natan. CORBA-A guide to common object request broker architecture. McGraw-Hill,1995<br>
</font>[<font face="Times New Roman">2</font>] <font face="Times New Roman">D.Box.
Q&A ActiveX/COM.Microsoft Systems Journal,<br>
1997</font>;<font face="Times New Roman">(3):93-105<br>
</font>[<font face="Times New Roman">3</font>] <font face="Times New Roman">A.Birrel,B.J.Nelson.
Implementing Remote Procedure<br>
Calls. ACM Transactions on Computer Systems, 1984;2(1):39-59<br>
</font>[<font face="Times New Roman">4</font>] 黄 俊<font face="Times New Roman">,</font>许满武<font
face="Times New Roman">,</font>陆剑锋<font face="Times New Roman">.</font>中间件<font
face="Times New Roman">LSM</font>及其在物资运输调配系统中的应用<font
face="Times New Roman">.</font>微型计算机,<font face="Times New Roman">1997</font>;<font
face="Times New Roman">17(</font>增刊<font face="Times New Roman">2)</font>:<font
face="Times New Roman">78-80<br>
</font>[<font face="Times New Roman">5</font>] <font face="Times New Roman">Cynthia
McFall, IBM Corporation. An Object Infrastructure for Internet Middleware IBM on Component
Broker. IEEE Internet Computing, 1998;2(2)<br>
</font>[<font face="Times New Roman">6</font>] <font face="Times New Roman">Object
Management Group. CORBA 2.1 Update Sheet,<br>
1997</font>,<font face="Times New Roman">8 </font></p>
<p align="right"><font face="宋体"> 收稿日期:1999-04-23(修改稿)</font></td>
</tr>
</table>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -