- 相關(guān)推薦
PowerBuilder的分布式計(jì)算技術(shù)及其應(yīng)用
PowerBuilder的分布式計(jì)算技術(shù)及其應(yīng)用 浙江大學(xué)計(jì)算機(jī)系 梁榮華 浙江大學(xué)計(jì)算機(jī)系 史濟(jì)建 杭州電子工業(yè)學(xué)院計(jì)算機(jī)系 周其力摘要: 本文分析了客戶機(jī)/服務(wù)器的二級(jí)體系結(jié)構(gòu)缺點(diǎn)與不足,介紹了客戶機(jī)/服務(wù)器的分布式計(jì)算體系結(jié)構(gòu)的優(yōu)點(diǎn),重點(diǎn)論述了分布式計(jì)算體系結(jié)構(gòu)在PowerBuider6中的實(shí)現(xiàn),并給出了具體的應(yīng)用實(shí)例,最后給出了結(jié)論。
關(guān)鍵詞:客戶機(jī)/服務(wù)器 分布式計(jì)算 二級(jí)體系結(jié)構(gòu) 三級(jí)體系結(jié)構(gòu) 客戶應(yīng)用程序 服務(wù)器應(yīng)用程序
引言
90年代,人們開發(fā)MIS系統(tǒng)大都采用客戶機(jī)/服務(wù)器結(jié)構(gòu),客戶機(jī)/服務(wù)器結(jié)構(gòu)既是硬件結(jié)構(gòu)又是軟件結(jié)構(gòu)。即數(shù)據(jù)放在服務(wù)器上,程序在客戶機(jī)上。進(jìn)行數(shù)據(jù)訪問時(shí),由客戶機(jī)提出請(qǐng)求(一般是SQL語(yǔ)句),服務(wù)器執(zhí)行并給出結(jié)果?蛻魴C(jī)/服務(wù)器對(duì)于優(yōu)化了網(wǎng)絡(luò),提高了系統(tǒng)的利用率?蛻魴C(jī)/服務(wù)器體系結(jié)構(gòu)的發(fā)展經(jīng)歷了從二級(jí)體系結(jié)構(gòu)模式到三級(jí)體系結(jié)構(gòu)模式。
1 二級(jí)體系結(jié)構(gòu)模式
傳統(tǒng)的客戶機(jī)/服務(wù)器的模式是二級(jí)體系結(jié)構(gòu)(Two-tier model)模式。結(jié)構(gòu)圖如圖1
用戶界面與邏輯事務(wù)駐留在客戶計(jì)算機(jī)上,將大部分的數(shù)據(jù)存放在數(shù)據(jù)庫(kù)中,對(duì)數(shù)據(jù)的操作如查詢、修改等由客戶機(jī)提出請(qǐng)求,數(shù)據(jù)庫(kù)服務(wù)器完成并返回給客戶機(jī)結(jié)果,這種體系結(jié)構(gòu)雖然可以系統(tǒng)的性能,但它們具有明顯的缺點(diǎn):
缺乏安全性
在客戶機(jī)上存取敏感性數(shù)據(jù)時(shí),由于邏輯事務(wù)放在服務(wù)器中,所以用戶可以訪問邏輯事務(wù)的核心部分,這使得未授權(quán)用戶容易侵入系統(tǒng),有安全漏洞。
重的客戶機(jī)負(fù)荷
隨著客戶機(jī)要求處理的事務(wù)的數(shù)目增多,系統(tǒng)的任務(wù)日益繁重,導(dǎo)致系統(tǒng)的吞吐量下降,使得客戶機(jī)不能滿足系統(tǒng)的要求,當(dāng)然可以買一臺(tái)更大的機(jī)器來替代舊的客戶機(jī)器,但在經(jīng)濟(jì)方面不如買一臺(tái)機(jī)器來分擔(dān)客戶機(jī)的某些任務(wù)。
鑒于此,人們提出了三級(jí)體系結(jié)構(gòu)模式(見圖2)。
2分布式計(jì)算體系結(jié)構(gòu)
在該模式中,用戶界面保存在客戶端,事務(wù)邏輯保存在應(yīng)用服務(wù)器中,數(shù)據(jù)保存在數(shù)據(jù)庫(kù)服務(wù)器中?蛻魴C(jī)只負(fù)責(zé)提供用戶界面,當(dāng)需要進(jìn)行數(shù)據(jù)訪問時(shí)或復(fù)雜計(jì)算時(shí),客戶機(jī)向應(yīng)用服務(wù)器發(fā)出請(qǐng)求,應(yīng)用服務(wù)器響應(yīng)客戶機(jī)的請(qǐng)求,完成復(fù)雜的計(jì)算或者向數(shù)據(jù)庫(kù)服務(wù)器發(fā)送SQL語(yǔ)句由數(shù)據(jù)庫(kù)服務(wù)器完成相應(yīng)的數(shù)據(jù)操作,最后由應(yīng)用服務(wù)器將結(jié)果返回給客戶機(jī)。該模式也稱三級(jí)體系結(jié)構(gòu)模式,PowerBuilder對(duì)于該模式是支持的。需要說明的是,三級(jí)體系結(jié)構(gòu)模式的三級(jí)是指邏輯上的三級(jí)(即用戶界面、事務(wù)邏輯、數(shù)據(jù))而不是物理的三級(jí)。(具體見圖二)
對(duì)于二級(jí)模式,分布式計(jì)算體系結(jié)構(gòu)提供了解決方式,分布式計(jì)算技術(shù)通過將用戶界面與事務(wù)邏輯分開,這使得未授權(quán)用戶很難侵入系統(tǒng),保證了系統(tǒng)的安全性;同時(shí)由于客戶機(jī)只處理用戶界面,大量的事務(wù)處理在服務(wù)器應(yīng)用程序?qū)崿F(xiàn),大大減輕了客戶機(jī)的負(fù)荷,使瘦客戶成為可能。
二、分布式應(yīng)用的體系結(jié)構(gòu)在PowerBuidler中的實(shí)現(xiàn)
分布式PowerBuilder 應(yīng)用程序典型使用兩個(gè)應(yīng)用程序,即服務(wù)器應(yīng)用程序和客戶應(yīng)用程序,分別在兩臺(tái)機(jī)器上實(shí)現(xiàn)。
服務(wù)器與客戶應(yīng)用程序一起實(shí)現(xiàn)事務(wù)應(yīng)用,客戶應(yīng)用程序處理用戶界面,與用戶交互,服務(wù)器應(yīng)用程序提供給客戶應(yīng)用程序提供必要的數(shù)據(jù)包,應(yīng)用程序?qū)蛻魬?yīng)用程序透明。結(jié)構(gòu)圖見圖3。
盡管服務(wù)應(yīng)用通常提供數(shù)據(jù)包給客戶應(yīng)用程序,但服務(wù)器應(yīng)用程序本身也可以作客戶應(yīng)用程序功能,換言之,服務(wù)器應(yīng)用程序能作為客戶應(yīng)用程序與另一服務(wù)器應(yīng)用程序連結(jié),這時(shí),這個(gè)服務(wù)應(yīng)用程序作為客戶應(yīng)用程序與另一應(yīng)用程序的中介等。
2.1服務(wù)器應(yīng)用程序
服務(wù)器應(yīng)用程序提供了兩個(gè)主要的組件:傳送對(duì)象(Transport object)、遠(yuǎn)程對(duì)象(Remote object)。
傳送對(duì)象使之能為服務(wù)器應(yīng)用程序收到客戶連接并處理客戶請(qǐng)求。
在分布式應(yīng)用中,客戶能調(diào)用服務(wù)器提供的服務(wù),通過遠(yuǎn)程對(duì)象提供,一般地,一個(gè)遠(yuǎn)程對(duì)象是一個(gè)NVO(nonvisual user object)-----不可視用戶對(duì)象,包含在遠(yuǎn)程服務(wù)器上,一個(gè)客戶能調(diào)用遠(yuǎn)程對(duì)象提供的功能,就好象他們被定義在本地的對(duì)象一樣,也就是說,客戶應(yīng)用程序能調(diào)用遠(yuǎn)程的對(duì)象,與同一臺(tái)計(jì)算機(jī)或另一臺(tái)網(wǎng)絡(luò)上的計(jì)算機(jī)各自執(zhí)行程序完成某項(xiàng)功能,PowerBuiler對(duì)遠(yuǎn)程對(duì)象的調(diào)用有同步與異步調(diào)用。當(dāng)同步調(diào)用時(shí),客戶等待直到服務(wù)器處理完成,當(dāng)異步調(diào)用時(shí),服務(wù)器只在自己的隊(duì)列中增加一個(gè)請(qǐng)求隊(duì)列,以后處理之,同時(shí),客戶機(jī)去做其他的事情,直到服務(wù)器處理該請(qǐng)求。
2.2客戶端應(yīng)用程序
客戶端應(yīng)用程序有三個(gè)組件
用戶界面(user interface)
連接對(duì)象(Connection object)
遠(yuǎn)程對(duì)象的類定義(remote object class definitions)
結(jié)構(gòu)圖見圖5
用戶界面
客戶應(yīng)用程序包含與用戶的交互,除此之外,客戶包含執(zhí)行腳本,對(duì)于客戶采取的反應(yīng)。例如,這些腳本能規(guī)定當(dāng)用戶點(diǎn)了按紐會(huì)發(fā)生什么事件等。
連接對(duì)象
該對(duì)象提供了客戶應(yīng)用程序連接到服務(wù)器應(yīng)用程序,并要求服務(wù).
遠(yuǎn)程對(duì)象的類定義
每個(gè)服務(wù)器應(yīng)用程序的遠(yuǎn)程對(duì)象在客戶應(yīng)在程序中有相關(guān)的類定義。遠(yuǎn)程對(duì)象定義的本地的拷貝與服務(wù)器應(yīng)在程序的定義有一個(gè)相同的名字,執(zhí)行期間,本地定義的對(duì)象允許客戶訪問,就如遠(yuǎn)程對(duì)象實(shí)例就象在本地一樣。
類定義在客戶應(yīng)在程序中包含了遠(yuǎn)程對(duì)象的完全或部分功能,Proxy(代理) 對(duì)象提供了遠(yuǎn)程對(duì)象界面的表示,對(duì)分布式處理,只有Proxy對(duì)象在客戶應(yīng)在程序是必須的。在客戶應(yīng)在程序中,對(duì)象透明,當(dāng)你在客戶應(yīng)在程序利用遠(yuǎn)程對(duì)象類定義,客戶端的定義與服務(wù)器端的定義一致?紤]到這兩個(gè)定義有相同的名字,PowerBuiler提供了這種透明技術(shù)。用這個(gè)類定義的變量能保持本地對(duì)實(shí)例的引用。執(zhí)行時(shí),你能初始化本地的對(duì)象或遠(yuǎn)程對(duì)象,這依賴你的應(yīng)用要求。
2.3通訊方式
PowerBuiler的分布式技術(shù)中支持以下幾個(gè)通訊協(xié)議
Winsock
在支持TCP/IP的網(wǎng)絡(luò)中,利用WINDOWS SOCKETS工具通訊。只要支持TCP/IP的網(wǎng)絡(luò)都可以用該方式。
Names pipes, 通過命名的管道進(jìn)行通訊。
local, 指在分布式應(yīng)用程序可在本地運(yùn)行。
不同的運(yùn)行平臺(tái)支持不同的通訊方式.
三、 應(yīng)用程序舉例(PowerBuiler的實(shí)例)
在客戶機(jī)/服務(wù)器中,一個(gè)比較典型的例子是實(shí)現(xiàn)服務(wù)器推拉(Sever Push)
,客戶機(jī)請(qǐng)求服務(wù)器稱為拉,服務(wù)器響應(yīng)客戶機(jī)請(qǐng)求并將消息發(fā)回給客戶機(jī)稱為推。
本例子功能是這樣的,由客戶機(jī)應(yīng)用程序向服務(wù)器應(yīng)用程序發(fā)出請(qǐng)求(為簡(jiǎn)單起見,請(qǐng)求服務(wù)是一條消息),服務(wù)器應(yīng)用程序收到消息后,做一些數(shù)據(jù)處理或其他的工作,完成之后,給客戶機(jī)應(yīng)用程序返回一條消息告知請(qǐng)求服務(wù)完成。
本例子代碼解釋如下:首先建立即兩個(gè)NVO,一個(gè)是Uo_Custdata, 一個(gè)是Uo_response_Object, 在 Uo_response_object中,有一個(gè)用戶對(duì)象函數(shù)Doneprocessing(),該函數(shù)執(zhí)行一個(gè)提示窗口,給客戶機(jī)發(fā)布消息,說明處理數(shù)據(jù)完畢。在Uo_Custdata中建立一個(gè)處理數(shù)據(jù)的函數(shù)process_data,其參數(shù)包含Uo_response_Object。將包含該用戶對(duì)象的文件編譯成proxy,如a.pbl在客戶應(yīng)用程序中包含a.pbl即可。在客戶機(jī)應(yīng)用程序中,先建立connection對(duì)象,定義connection的屬性,然后創(chuàng)建 remote object(用Create Instance),本例子是Uo_Custdata,再調(diào)用remote object的一個(gè)函數(shù)(也就是process_data);在服務(wù)器應(yīng)用程序中,先建立transport對(duì)象,定義transport對(duì)象的屬性,然后等待客戶提出請(qǐng)求(用listen函數(shù))。
源程序如下:
// ------------------客戶機(jī)應(yīng)用程序
//定義connection
connection myconnect
long ll_rc
//用Create建立實(shí)例
myconnect = create connection
//設(shè)置Connect屬性
myconnect.driver = "WinSock"
myconnect.application = "70000"
myconnect.location = "server01"
ll_rc = myconnect.ConnectToSe ver()
IF ll_rc <> 0 THEN MessageBox(“警告”,"連結(jié)錯(cuò)誤")
END If
// 調(diào)用remote object(服務(wù)器應(yīng)用程序提供)
// Mycustdata 是服務(wù)器應(yīng)用程序的NVO,將包含該user object的文件編譯成//proxy,在客戶應(yīng)用程序中包含proxy的pbl文件。
Uo_custdata Mycustdata
Uo_response_object Myresponseobject
…….
Myconnect.createInstance(Mycustdata)
Myresponceobject=Create.Uo_response_object
Mycustdata.post process_data(Myresponceobject)
// ---------用戶對(duì)象
// uo_custdata的函數(shù)process_data
參數(shù):Uo_response_object.responceobject
…….//做一些數(shù)據(jù)處理的工作
給客戶發(fā)布消息,說明處理數(shù)據(jù)完畢
Responceobject.post Doneprocessing()
// Uo_response_object 的函數(shù)Doneprocessing
Messagebox(“提示”,“處理完畢”);
//----------服務(wù)器應(yīng)用程序
TransPort myTransPort
//建立transport對(duì)象
myTransProt=create TransPort
//定義transport對(duì)象的屬性,
myTransPort.Driver='WinSock'
myTransPort.application='70000'
//然后等待客戶提出請(qǐng)求。
MyTransPort.listen()
當(dāng)然,在基于一般中大型數(shù)據(jù)庫(kù)系統(tǒng),基于WEB方式體系統(tǒng)結(jié)構(gòu),客戶應(yīng)用程序?qū)τ跀?shù)據(jù)庫(kù)的操作都可以用通過應(yīng)用服務(wù)器程序,這樣客戶程序就很瘦了,不需要安裝如Open Client之類的軟件;另外,應(yīng)用服務(wù)器程序可同時(shí)運(yùn)行在幾臺(tái)計(jì)算機(jī)上,它對(duì)于系統(tǒng)的安全性,平衡網(wǎng)絡(luò)負(fù)載都具有重要的現(xiàn)實(shí)意義,在PowerBuilder中都是能實(shí)現(xiàn)的。
四、結(jié)論
PowerBuider5就已經(jīng)提出了分布式計(jì)算技術(shù),但使用起來較為煩瑣,這主要表現(xiàn)在編寫Proxy,PowerBuilder6 通過程序直接編譯成proxy,并且功能增強(qiáng)了許多,使分布式計(jì)算技術(shù)更為方便,剛出來的PowerBuider7更為方便、完善,這對(duì)于解決網(wǎng)絡(luò)瓶頸,優(yōu)化網(wǎng)絡(luò)具有重大的現(xiàn)實(shí)意義。
[參考文獻(xiàn)]
1.Simmon Gallegher 、simmon Herbert 《PowerBuilder6.0程序設(shè)計(jì)大全》 機(jī)械工業(yè)出版社 1998、8
2.鐘虎林等新一代客戶機(jī)/服務(wù)器體系結(jié)構(gòu)計(jì)算機(jī)系統(tǒng)應(yīng)用 1998第一期
3.Paul E.Renaud 《客戶機(jī)/服務(wù)器系統(tǒng)入門必讀》電子工業(yè)出版社 1995、6
4、Application Techniques------PowerBuider version6Document number AA0518 SYBASE 1997.10
5 、湯子瀛等 《計(jì)算機(jī)實(shí)用網(wǎng)絡(luò)技術(shù)教程》杭州大學(xué)出版社 1998.8
6 、黃允聰?shù)取毒W(wǎng)絡(luò)安全基礎(chǔ)》清華大學(xué)出版社 1999.2
【PowerBuilder的分布式計(jì)算技術(shù)及其應(yīng)用】相關(guān)文章:
淺談云計(jì)算技術(shù)_分布式08-18
分布式對(duì)象技術(shù)及其在Web上的應(yīng)用08-09
分布式對(duì)象技術(shù)及其在Web上的應(yīng)用08-06
利用PowerBuilder開發(fā)WEB應(yīng)用08-06
利用PowerBuilder開發(fā)WEB應(yīng)用08-06
利用PowerBuilder開發(fā)WEB應(yīng)用08-06
利用PowerBuilder開發(fā)WEB應(yīng)用08-06