MIDAS技术的实现与可靠性分析
2009-06-03
作者:龙 艳
摘 要:MIDAS为开发多层分布式应用系统提供的一个中间透明引擎,能有效地利用DCOM、TCP/IP等技术在Internet/Intranet上建立结构为“ 瘦客户端+应用程序服务器+数据库系统”的多层分布式应用程序,在此结构下可利用对象代理实现分布式负载均衡与容错,从而提高系统的性能。
关键词:MIDAS;应用服务器;负载平衡;容错
Internet/Intranet 的兴起使得企业很方便地使用MIS(企业管理系统)来进行规划管理。目前大多数MIS采用两层C/S 结构,但随着使用的深入,该结构逐渐暴露出其架构上的缺陷,如应用程序的可伸缩性和维护,同时,如何控制数据的统一性和完整性也成为问题。
新一代的数据库管理系统在传统的C/S 结构中增加了应用服务器,这种新的结构就是所谓的三层体系结构。三层体系结构指逻辑上的三层,包括应用表示层、应用逻辑层和数据层。应用表示层又名客户端, 主要负责用户端界面, 提供给用户一个操作方便且简单快捷的应用服务接口;应用逻辑层或为应用服务器, 是整个结构中最重要的部分, 实现应用程序的应用逻辑处理;数据层又为数据库服务器, 负责数据的存取和管理。应用服务器包括了统一的界面、业务规则的制定和数据处理逻辑的规定等功能。通常情况下, 客户端不直接与数据库进行交互, 而是通过通信协议与中间层建立连接, 再经由中间层与数据库进行交互。多层应用服务技术允许分割应用程序,这样,本地计算机无需安装一整套数据库工具,便可以在另一台机器上存取数据;同时,它允许对业务规则和进程进行机种管理,并在整个网络上分发,实现进程负载的动态调节。
1 MIDAS技术
MIDAS 的全称是Multi- tier Distributed Application Services Suite(多层分布式应用程序服务包)。Delphi中所有强大又奇妙的分布式多层能力都来自MIDAS 的功能。MIDAS 是Delphi 多层应用系统的技术核心,是Delphi 用来开发多层应用系统所使用的中介透明引擎。通过MIDAS,程序员可以使用相同的组件存取不同的后端应用程序服务器。此外MIDAS 也提供了容错能力、负载平衡能力以及高执行效率的能力。
多层结构其实是对传统C/S结构的扩展,是把一个数据库应用程序分解成几个逻辑部分,客户端程序集中处理数据显示部分和用户与数据之间的交互。其优点可归纳为:
(1)将数据处理及通信功能封装在一个共享的中间层里。不同的客户端程序都能访问这个中间层,这样就避免了为每个客户程序复制数据处理部分而产生的冗余。
(2)缩小了客户端程序的规模,使得客户端程序更容易进行开发。这是因为不需要安装、配置和维护数据库连接软件。
(3)采用分布式数据处理过程。将一个应用程序要处理的任务分在几台机器上进行处理,从而提高了程序执行的性能。
(4)提高了数据的安全性。将不同的数据功能封装成一定的中间层,通过提供安全控制结合容错技术,可以开发出更安全的应用系统。
2 MIDAS技术架构和工作原理
MIDAS技术实现的架构图如图1所示
2.1客户端
从逻辑结构上看, 客户端主要由三部分组成。首先,客户端的DataModule中包含与应用服务器建立连接的RemoteServer组件, 客户端通过RemoteServer组件与应用服务器的IAppserver接口连接,以此进一步连接DataSetProvider接口, 从而通过DataAccess组件实现数据的获取和更新操作。再者ClientDataSet组件支持数据的存取、编辑、浏览、约束和过滤等功能。最后在客户端Form中, 由数据感知组件如DBGrid、DBEdi、DBNavigator等形成与用户交互的接口。
2.2应用服务器
应用服务器是系统的核心, 也是连接客户端和远程数据库的重要桥梁。该层主要由远程数据模块构成。
远程数据模块RemoteDataModule是一个支持双重接口的自动化服务器, 它自身提供了IAppServer接口。客户端利用该接口与数据供应接口DataSetprovider通信。远程数据模块是一个容器, 可容纳访问远程数据库服务器的DataAccess对象和充当数据代理的DataSetProvider对象等。数据集组件DataAccess主要包括Table、Query、StoreProc等, 其主要功能是实现远程数据库的访问, 该组件通过BDE、ADO、OLE DB等引擎接口访问远程数据库。数据供应组件DataSetProvider充当DataSet对象与客户端ClientDataSet对象间的数据代理。该组件有两大功能:(1)通过DataSet对象从数据库服务器获取数据并封装成数据包后回传给客户端的ClientDataSet对象;(2)将客户端ClientDataSet对象中要求更新的数据提交给数据库服务器, 并把由于各种原因而不能实现更新的数据存入日志后回传给客户端。MIDAS.DLL用于管理与组织应用服务器提供者组件和客户端数据集组件上的数据包。
2.3数据库服务器
后台远程数据库存放着用户的所有业务数据, 通过BDE、OLE DB或ODBC等数据访问接口和应用服务器进行通信。
在一个基于MIDAS 的三层应用中,客户端通过应用服务器得到数据和进行数据更新的过程,通常按照如下顺序和方式实现:
(1)用户启动客户端应用。客户端连接到应用服务器,如果应用服务器尚未运行,它将被启动。客户端从应用服务器得到一个IAPPServer 接口。
(2)客户端从应用服务器请求数据。
(3)应用服务器获取数据,为客户端打包数据,返回一个数据包给客户端。
(4)客户端解开数据包,显示数据给用户。
(5)当用户与客户端程序交互时,数据被更新。这些改动被客户端记录在一个变更日志中。
(6)最后,客户端向应用服务器提请更新(applyupdates),通常是响应于用户的一个操作。
(7)应用服务器解开数据包,并向数据库服务器递交更新(postupdates) 。
(8)当应用服务器完成解析过程,它返回任何没有递交的记录给客户端,以供后来的进一步解析。
(9)客户端调整没有解析的记录。
(10)客户端从服务器得到数据刷新自己。
3 MIDAS的实现
要创建一个多层C/S应用程序,首先要创建应用服务器,然后注册或安装应用服务器, 只有应用服务器已注册并且正在运行的情况下, 才能创建客户程序。对于客户程序来说, 既可以在设计期间连接应用服务器, 也可以在运行期间连接应用服务器。创建MIDAS应用服务器步骤如下:
(1)创建一个远程数据模块(Remote DataModule), 它允许客户以DCOM、TCP等方式访问此服务器;
(2)把一个数据集构件, 如TTable、TQuery或TStoredProc放到远程数据模块上,使它们能访问远程的后台数据库;
(3)把TDataSetProvider构件放在远程数据模块上, 设置它的DataSet属性指定为要访问的数据库,其实就是第(2)步所放的数据集构件;
(4)编写代码, 实现规则;
(5)保存、编译、注册或者安装应用服务器。
在多层体系结构中, 一个客户程序至少需要一个TClientDataSet构件, 作用是引入数据集。创建一个客户程序的步骤如下:
(1)新建一个项目, 在项目中添加一个数据模块(DataModule);
(2)根据通信协议把一个或者几个MIDAS连接构件如TDCOMConnection加入到数据模块上,设置相关属性,指定和连接应用服务器, 这与具体的MIDAS连接构件有关;
(3)把一个或几个TClientDataSet构件放到数据模块上, 设置RemoteServer属性指定为第(2)步添加的MIDAS连接构件, 设置Providername属性为应用服务器上的TDataSetProvider构件, 这样客户程序就可以和应用服务器通信;
(4)把一个TDataSource构件放到数据模块上, 设置它的DataSet属性为第(3)步添加的TClientDataSet构件, 再把一个数据感知控件如TDBGrid放到窗体上, 设置它的DataSource属性为TDataSource构件,至此, 一个简单的客户程序创建完毕。
4 可靠性分析
在多层结构环境中,所开发的应用系统除了必须能够正确而且有效率地运行之外,如何让其更安全可靠,不会因为应用服务器或是数据库服务器故障而导致整个系统无法继续运行也是非常重要的。分布式多层应用系统的可靠性具体可以通过以下能力来体现:
(1)负载平衡能力。指能够根据应用程序服务器的不同负荷,动态分配客户端的连接,不至于有的应用服务器负载过重,而有的应用程序服务器负载过轻,使得所有的应用程序服务器的负载达到一个平衡。
(2)容错能力。指某台应用服务器发生故障时,原先连接到该服务器的客户端可以立刻连接到其他提供相同服务的应用服务器,并继续取得服务。
(3)暂存数据能力。指当所有的应用服务器都发生了故障,或是数据库服务器发生了故障,客户端应用程序应该有一种机制能够把用户更新的数据暂存在客户端机器中,等应用程序服务器或是数据库服务器恢复正常后,客户端应用程序可以把数据加载到系统中,再实际更新回数据库服务器中。
Delphi在客户端提供了TSimpleObjectBroker组件来实现基本的负载平衡能力和容错能力,该组件实现了基于伪随机数算法的简单对象代理。在客户端的Data Module中加入一个TSimpleObjectBroker组件,并将其LoadBalanced属性设置为true,然后把Data Module中各个RemoteServer组件的ObjectBroker的属性设置成该TSimpleObjectBroker组件,就能够实现伪随机意义下的负载均衡。Servers属性存储一张能够执行应用服务器列表,该表的第i个表项Items[i]由ComputerName、Port、Enabled、HasFailed(应用服务器所在的计算机名、端口号、当前是否可用标记、连接失败标记)4个域构成,并提供其中的机器名称给TDCOMConnection或是TSocketConnection作为连接的远程机器的名称。当TDCOMConnection或是TSocketConnection连接的机器发生故障时,TDCOMConnection或是TSocketConnection可以从TSimpleObjectBroker取得一个新的能够执行应用程序服务器的远程机器名称,然后再连接到这台新机器以取得应用程序服务器的服务。为了实现暂存数据能力,TClientDataSet提供了SaveToFile和LoadFromFile两个方法。当所有的应用程序服务器都发生了故障,或是数据库服务器发生了故障时,调用SaveToFile方法把TClientDataSet中所有的数据包括在客户端更新的数据保存到一个文件中,然后在应用程序服务器或是数据库服务器恢复正常后再执行客户端应用程序,调用LoadFromFile方法加载先前存储的数据到TClientDataSet中,最后再调用ApplyUpdates方法把客户端更新的数据更新回数据库中。
MIDAS技术与C/S 技术相比,尤其是在大中型数据库应用系统中,系统的稳定性、延展性和执行效率有很大提高。开发一个高效可靠的分布式多层数据库应用系统,还必须考虑负载平衡、容错控制等能力,使用MIDAS的ObjectBroker技术可以实现并有效地提升系统的效率和健壮性。
参考文献
[1] 李维. Delphi 5.x 分布式多层应用系统篇[M]. 北京: 机械工业出版社,2000.
[2] TEIXEIRA S,PACheco X. Delphi开发人员指南[M]. 北京:机械工业出版社,2003.
[3] 王志刚. 基于MIDAS分布式多层系统的容错技术. 湖南师范大学自然科学学报, 2001, 24 (2): 15.
[4] 徐新华.Delhi高级编程——Database与MIDAS编程[M].北京:人民邮电出版社,2000.
[5] 于重重. 基于三层ClientServer结构的管理信息系统的实现. 北京工商大学学报,2000,17(7):35-38.