《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 通信與網(wǎng)絡(luò) > 業(yè)界動態(tài) > MIDAS技術(shù)的實現(xiàn)與可靠性分析

MIDAS技術(shù)的實現(xiàn)與可靠性分析

2009-06-03
作者:龍 艷

??? 摘 要:MIDAS為開發(fā)多層分布式應(yīng)用系統(tǒng)提供的一個中間透明引擎,能有效地利用DCOM、TCP/IP等技術(shù)在Internet/Intranet上建立結(jié)構(gòu)為“ 瘦客戶端+應(yīng)用程序服務(wù)器+數(shù)據(jù)庫系統(tǒng)”的多層分布式應(yīng)用程序,在此結(jié)構(gòu)下可利用對象代理實現(xiàn)分布式負(fù)載均衡與容錯,從而提高系統(tǒng)的性能。
??? 關(guān)鍵詞:MIDAS;應(yīng)用服務(wù)器;負(fù)載平衡;容錯

?

??? Internet/Intranet 的興起使得企業(yè)很方便地使用MIS(企業(yè)管理系統(tǒng))來進(jìn)行規(guī)劃管理。目前大多數(shù)MIS采用兩層C/S 結(jié)構(gòu),但隨著使用的深入,該結(jié)構(gòu)逐漸暴露出其架構(gòu)上的缺陷,如應(yīng)用程序的可伸縮性和維護(hù),同時,如何控制數(shù)據(jù)的統(tǒng)一性和完整性也成為問題。
??? 新一代的數(shù)據(jù)庫管理系統(tǒng)在傳統(tǒng)的C/S 結(jié)構(gòu)中增加了應(yīng)用服務(wù)器,這種新的結(jié)構(gòu)就是所謂的三層體系結(jié)構(gòu)。三層體系結(jié)構(gòu)指邏輯上的三層,包括應(yīng)用表示層、應(yīng)用邏輯層和數(shù)據(jù)層。應(yīng)用表示層又名客戶端, 主要負(fù)責(zé)用戶端界面, 提供給用戶一個操作方便且簡單快捷的應(yīng)用服務(wù)接口;應(yīng)用邏輯層或為應(yīng)用服務(wù)器, 是整個結(jié)構(gòu)中最重要的部分, 實現(xiàn)應(yīng)用程序的應(yīng)用邏輯處理;數(shù)據(jù)層又為數(shù)據(jù)庫服務(wù)器, 負(fù)責(zé)數(shù)據(jù)的存取和管理。應(yīng)用服務(wù)器包括了統(tǒng)一的界面、業(yè)務(wù)規(guī)則的制定和數(shù)據(jù)處理邏輯的規(guī)定等功能。通常情況下, 客戶端不直接與數(shù)據(jù)庫進(jìn)行交互, 而是通過通信協(xié)議與中間層建立連接, 再經(jīng)由中間層與數(shù)據(jù)庫進(jìn)行交互。多層應(yīng)用服務(wù)技術(shù)允許分割應(yīng)用程序,這樣,本地計算機無需安裝一整套數(shù)據(jù)庫工具,便可以在另一臺機器上存取數(shù)據(jù);同時,它允許對業(yè)務(wù)規(guī)則和進(jìn)程進(jìn)行機種管理,并在整個網(wǎng)絡(luò)上分發(fā),實現(xiàn)進(jìn)程負(fù)載的動態(tài)調(diào)節(jié)。
1 MIDAS技術(shù)
??? MIDAS 的全稱是Multi- tier Distributed Application Services Suite(多層分布式應(yīng)用程序服務(wù)包)。Delphi中所有強大又奇妙的分布式多層能力都來自MIDAS 的功能。MIDAS 是Delphi 多層應(yīng)用系統(tǒng)的技術(shù)核心,是Delphi 用來開發(fā)多層應(yīng)用系統(tǒng)所使用的中介透明引擎。通過MIDAS,程序員可以使用相同的組件存取不同的后端應(yīng)用程序服務(wù)器。此外MIDAS 也提供了容錯能力、負(fù)載平衡能力以及高執(zhí)行效率的能力。
??? 多層結(jié)構(gòu)其實是對傳統(tǒng)C/S結(jié)構(gòu)的擴(kuò)展,是把一個數(shù)據(jù)庫應(yīng)用程序分解成幾個邏輯部分,客戶端程序集中處理數(shù)據(jù)顯示部分和用戶與數(shù)據(jù)之間的交互。其優(yōu)點可歸納為:
??? (1)將數(shù)據(jù)處理及通信功能封裝在一個共享的中間層里。不同的客戶端程序都能訪問這個中間層,這樣就避免了為每個客戶程序復(fù)制數(shù)據(jù)處理部分而產(chǎn)生的冗余。
??? (2)縮小了客戶端程序的規(guī)模,使得客戶端程序更容易進(jìn)行開發(fā)。這是因為不需要安裝、配置和維護(hù)數(shù)據(jù)庫連接軟件。
??? (3)采用分布式數(shù)據(jù)處理過程。將一個應(yīng)用程序要處理的任務(wù)分在幾臺機器上進(jìn)行處理,從而提高了程序執(zhí)行的性能。
??? (4)提高了數(shù)據(jù)的安全性。將不同的數(shù)據(jù)功能封裝成一定的中間層,通過提供安全控制結(jié)合容錯技術(shù),可以開發(fā)出更安全的應(yīng)用系統(tǒng)。
2 MIDAS技術(shù)架構(gòu)和工作原理
??? MIDAS技術(shù)實現(xiàn)的架構(gòu)圖如圖1所示

?


2.1客戶端
??? 從邏輯結(jié)構(gòu)上看, 客戶端主要由三部分組成。首先,客戶端的DataModule中包含與應(yīng)用服務(wù)器建立連接的RemoteServer組件, 客戶端通過RemoteServer組件與應(yīng)用服務(wù)器的IAppserver接口連接,以此進(jìn)一步連接DataSetProvider接口, 從而通過DataAccess組件實現(xiàn)數(shù)據(jù)的獲取和更新操作。再者ClientDataSet組件支持?jǐn)?shù)據(jù)的存取、編輯、瀏覽、約束和過濾等功能。最后在客戶端Form中, 由數(shù)據(jù)感知組件如DBGrid、DBEdi、DBNavigator等形成與用戶交互的接口。
2.2應(yīng)用服務(wù)器
??? 應(yīng)用服務(wù)器是系統(tǒng)的核心, 也是連接客戶端和遠(yuǎn)程數(shù)據(jù)庫的重要橋梁。該層主要由遠(yuǎn)程數(shù)據(jù)模塊構(gòu)成。
??? 遠(yuǎn)程數(shù)據(jù)模塊RemoteDataModule是一個支持雙重接口的自動化服務(wù)器, 它自身提供了IAppServer接口。客戶端利用該接口與數(shù)據(jù)供應(yīng)接口DataSetprovider通信。遠(yuǎn)程數(shù)據(jù)模塊是一個容器, 可容納訪問遠(yuǎn)程數(shù)據(jù)庫服務(wù)器的DataAccess對象和充當(dāng)數(shù)據(jù)代理的DataSetProvider對象等。數(shù)據(jù)集組件DataAccess主要包括Table、Query、StoreProc等, 其主要功能是實現(xiàn)遠(yuǎn)程數(shù)據(jù)庫的訪問, 該組件通過BDE、ADO、OLE DB等引擎接口訪問遠(yuǎn)程數(shù)據(jù)庫。數(shù)據(jù)供應(yīng)組件DataSetProvider充當(dāng)DataSet對象與客戶端ClientDataSet對象間的數(shù)據(jù)代理。該組件有兩大功能:(1)通過DataSet對象從數(shù)據(jù)庫服務(wù)器獲取數(shù)據(jù)并封裝成數(shù)據(jù)包后回傳給客戶端的ClientDataSet對象;(2)將客戶端ClientDataSet對象中要求更新的數(shù)據(jù)提交給數(shù)據(jù)庫服務(wù)器, 并把由于各種原因而不能實現(xiàn)更新的數(shù)據(jù)存入日志后回傳給客戶端。MIDAS.DLL用于管理與組織應(yīng)用服務(wù)器提供者組件和客戶端數(shù)據(jù)集組件上的數(shù)據(jù)包。
2.3數(shù)據(jù)庫服務(wù)器
??? 后臺遠(yuǎn)程數(shù)據(jù)庫存放著用戶的所有業(yè)務(wù)數(shù)據(jù), 通過BDE、OLE DB或ODBC等數(shù)據(jù)訪問接口和應(yīng)用服務(wù)器進(jìn)行通信。
??? 在一個基于MIDAS 的三層應(yīng)用中,客戶端通過應(yīng)用服務(wù)器得到數(shù)據(jù)和進(jìn)行數(shù)據(jù)更新的過程,通常按照如下順序和方式實現(xiàn):
??? (1)用戶啟動客戶端應(yīng)用。客戶端連接到應(yīng)用服務(wù)器,如果應(yīng)用服務(wù)器尚未運行,它將被啟動??蛻舳藦膽?yīng)用服務(wù)器得到一個IAPPServer 接口。
??? (2)客戶端從應(yīng)用服務(wù)器請求數(shù)據(jù)。
??? (3)應(yīng)用服務(wù)器獲取數(shù)據(jù),為客戶端打包數(shù)據(jù),返回一個數(shù)據(jù)包給客戶端。
??? (4)客戶端解開數(shù)據(jù)包,顯示數(shù)據(jù)給用戶。
??? (5)當(dāng)用戶與客戶端程序交互時,數(shù)據(jù)被更新。這些改動被客戶端記錄在一個變更日志中。
??? (6)最后,客戶端向應(yīng)用服務(wù)器提請更新(applyupdates),通常是響應(yīng)于用戶的一個操作。
??? (7)應(yīng)用服務(wù)器解開數(shù)據(jù)包,并向數(shù)據(jù)庫服務(wù)器遞交更新(postupdates) 。
??? (8)當(dāng)應(yīng)用服務(wù)器完成解析過程,它返回任何沒有遞交的記錄給客戶端,以供后來的進(jìn)一步解析。 ??????
??? (9)客戶端調(diào)整沒有解析的記錄。
??? (10)客戶端從服務(wù)器得到數(shù)據(jù)刷新自己。
3 MIDAS的實現(xiàn)
??? 要創(chuàng)建一個多層C/S應(yīng)用程序,首先要創(chuàng)建應(yīng)用服務(wù)器,然后注冊或安裝應(yīng)用服務(wù)器, 只有應(yīng)用服務(wù)器已注冊并且正在運行的情況下, 才能創(chuàng)建客戶程序。對于客戶程序來說, 既可以在設(shè)計期間連接應(yīng)用服務(wù)器, 也可以在運行期間連接應(yīng)用服務(wù)器。創(chuàng)建MIDAS應(yīng)用服務(wù)器步驟如下:
??? (1)創(chuàng)建一個遠(yuǎn)程數(shù)據(jù)模塊(Remote DataModule), 它允許客戶以DCOM、TCP等方式訪問此服務(wù)器;
??? (2)把一個數(shù)據(jù)集構(gòu)件, 如TTable、TQuery或TStoredProc放到遠(yuǎn)程數(shù)據(jù)模塊上,使它們能訪問遠(yuǎn)程的后臺數(shù)據(jù)庫;
??? (3)把TDataSetProvider構(gòu)件放在遠(yuǎn)程數(shù)據(jù)模塊上, 設(shè)置它的DataSet屬性指定為要訪問的數(shù)據(jù)庫,其實就是第(2)步所放的數(shù)據(jù)集構(gòu)件;
??? (4)編寫代碼, 實現(xiàn)規(guī)則;
??? (5)保存、編譯、注冊或者安裝應(yīng)用服務(wù)器。
??? 在多層體系結(jié)構(gòu)中, 一個客戶程序至少需要一個TClientDataSet構(gòu)件, 作用是引入數(shù)據(jù)集。創(chuàng)建一個客戶程序的步驟如下:
??? (1)新建一個項目, 在項目中添加一個數(shù)據(jù)模塊(DataModule);
??? (2)根據(jù)通信協(xié)議把一個或者幾個MIDAS連接構(gòu)件如TDCOMConnection加入到數(shù)據(jù)模塊上,設(shè)置相關(guān)屬性,指定和連接應(yīng)用服務(wù)器, 這與具體的MIDAS連接構(gòu)件有關(guān);
??? (3)把一個或幾個TClientDataSet構(gòu)件放到數(shù)據(jù)模塊上, 設(shè)置RemoteServer屬性指定為第(2)步添加的MIDAS連接構(gòu)件, 設(shè)置Providername屬性為應(yīng)用服務(wù)器上的TDataSetProvider構(gòu)件, 這樣客戶程序就可以和應(yīng)用服務(wù)器通信;
??? (4)把一個TDataSource構(gòu)件放到數(shù)據(jù)模塊上, 設(shè)置它的DataSet屬性為第(3)步添加的TClientDataSet構(gòu)件, 再把一個數(shù)據(jù)感知控件如TDBGrid放到窗體上, 設(shè)置它的DataSource屬性為TDataSource構(gòu)件,至此, 一個簡單的客戶程序創(chuàng)建完畢。
4 可靠性分析
??? 在多層結(jié)構(gòu)環(huán)境中,所開發(fā)的應(yīng)用系統(tǒng)除了必須能夠正確而且有效率地運行之外,如何讓其更安全可靠,不會因為應(yīng)用服務(wù)器或是數(shù)據(jù)庫服務(wù)器故障而導(dǎo)致整個系統(tǒng)無法繼續(xù)運行也是非常重要的。分布式多層應(yīng)用系統(tǒng)的可靠性具體可以通過以下能力來體現(xiàn):
??? (1)負(fù)載平衡能力。指能夠根據(jù)應(yīng)用程序服務(wù)器的不同負(fù)荷,動態(tài)分配客戶端的連接,不至于有的應(yīng)用服務(wù)器負(fù)載過重,而有的應(yīng)用程序服務(wù)器負(fù)載過輕,使得所有的應(yīng)用程序服務(wù)器的負(fù)載達(dá)到一個平衡。
??? (2)容錯能力。指某臺應(yīng)用服務(wù)器發(fā)生故障時,原先連接到該服務(wù)器的客戶端可以立刻連接到其他提供相同服務(wù)的應(yīng)用服務(wù)器,并繼續(xù)取得服務(wù)。
??? (3)暫存數(shù)據(jù)能力。指當(dāng)所有的應(yīng)用服務(wù)器都發(fā)生了故障,或是數(shù)據(jù)庫服務(wù)器發(fā)生了故障,客戶端應(yīng)用程序應(yīng)該有一種機制能夠把用戶更新的數(shù)據(jù)暫存在客戶端機器中,等應(yīng)用程序服務(wù)器或是數(shù)據(jù)庫服務(wù)器恢復(fù)正常后,客戶端應(yīng)用程序可以把數(shù)據(jù)加載到系統(tǒng)中,再實際更新回數(shù)據(jù)庫服務(wù)器中。
??? Delphi在客戶端提供了TSimpleObjectBroker組件來實現(xiàn)基本的負(fù)載平衡能力和容錯能力,該組件實現(xiàn)了基于偽隨機數(shù)算法的簡單對象代理。在客戶端的Data Module中加入一個TSimpleObjectBroker組件,并將其LoadBalanced屬性設(shè)置為true,然后把Data Module中各個RemoteServer組件的ObjectBroker的屬性設(shè)置成該TSimpleObjectBroker組件,就能夠?qū)崿F(xiàn)偽隨機意義下的負(fù)載均衡。Servers屬性存儲一張能夠執(zhí)行應(yīng)用服務(wù)器列表,該表的第i個表項Items[i]由ComputerName、Port、Enabled、HasFailed(應(yīng)用服務(wù)器所在的計算機名、端口號、當(dāng)前是否可用標(biāo)記、連接失敗標(biāo)記)4個域構(gòu)成,并提供其中的機器名稱給TDCOMConnection或是TSocketConnection作為連接的遠(yuǎn)程機器的名稱。當(dāng)TDCOMConnection或是TSocketConnection連接的機器發(fā)生故障時,TDCOMConnection或是TSocketConnection可以從TSimpleObjectBroker取得一個新的能夠執(zhí)行應(yīng)用程序服務(wù)器的遠(yuǎn)程機器名稱,然后再連接到這臺新機器以取得應(yīng)用程序服務(wù)器的服務(wù)。為了實現(xiàn)暫存數(shù)據(jù)能力,TClientDataSet提供了SaveToFile和LoadFromFile兩個方法。當(dāng)所有的應(yīng)用程序服務(wù)器都發(fā)生了故障,或是數(shù)據(jù)庫服務(wù)器發(fā)生了故障時,調(diào)用SaveToFile方法把TClientDataSet中所有的數(shù)據(jù)包括在客戶端更新的數(shù)據(jù)保存到一個文件中,然后在應(yīng)用程序服務(wù)器或是數(shù)據(jù)庫服務(wù)器恢復(fù)正常后再執(zhí)行客戶端應(yīng)用程序,調(diào)用LoadFromFile方法加載先前存儲的數(shù)據(jù)到TClientDataSet中,最后再調(diào)用ApplyUpdates方法把客戶端更新的數(shù)據(jù)更新回數(shù)據(jù)庫中。
??? MIDAS技術(shù)與C/S 技術(shù)相比,尤其是在大中型數(shù)據(jù)庫應(yīng)用系統(tǒng)中,系統(tǒng)的穩(wěn)定性、延展性和執(zhí)行效率有很大提高。開發(fā)一個高效可靠的分布式多層數(shù)據(jù)庫應(yīng)用系統(tǒng),還必須考慮負(fù)載平衡、容錯控制等能力,使用MIDAS的ObjectBroker技術(shù)可以實現(xiàn)并有效地提升系統(tǒng)的效率和健壯性。
參考文獻(xiàn)
[1] 李維. Delphi 5.x 分布式多層應(yīng)用系統(tǒng)篇[M]. 北京: 機械工業(yè)出版社,2000.
[2]?TEIXEIRA S,PACheco X. Delphi開發(fā)人員指南[M]. 北京:機械工業(yè)出版社,2003.
[3]?王志剛. 基于MIDAS分布式多層系統(tǒng)的容錯技術(shù). 湖南師范大學(xué)自然科學(xué)學(xué)報, 2001, 24 (2): 15.
[4]?徐新華.Delhi高級編程——Database與MIDAS編程[M].北京:人民郵電出版社,2000.
[5]?于重重. 基于三層ClientServer結(jié)構(gòu)的管理信息系統(tǒng)的實現(xiàn). 北京工商大學(xué)學(xué)報,2000,17(7):35-38.

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。