摘? 要: 對(duì)移動(dòng)代理系統(tǒng)Aglets的應(yīng)用體系結(jié)構(gòu)、類結(jié)構(gòu)及應(yīng)用設(shè)計(jì)進(jìn)行了討論。
關(guān)鍵詞: 移動(dòng)代理? Aglets系統(tǒng)? 設(shè)計(jì)模式
?
隨著Internet用戶的急劇增加,人們對(duì)網(wǎng)絡(luò)技術(shù)和網(wǎng)絡(luò)應(yīng)用給予了更多的關(guān)注。傳統(tǒng)的分布式計(jì)算模式因其靈活性差、系統(tǒng)擴(kuò)充和升級(jí)代價(jià)較高而無法適應(yīng)新的分布式計(jì)算要求。新技術(shù)的發(fā)展和應(yīng)用需要新的具有革命性進(jìn)步的計(jì)算模式,而基于移動(dòng)代理的計(jì)算模式便是這樣一種很有前途的計(jì)算模式。移動(dòng)代理可被看作是傳統(tǒng)通信機(jī)制的一種擴(kuò)展。由于移動(dòng)代理模式的特殊優(yōu)勢是能明確控制代碼在何處運(yùn)行,因此特別適用于諸如萬維網(wǎng)這樣的動(dòng)態(tài)異構(gòu)網(wǎng)絡(luò)環(huán)境。移動(dòng)代理擁有很多優(yōu)點(diǎn),如減少網(wǎng)絡(luò)流量、增加客戶機(jī)和服務(wù)器的異步性、便于負(fù)載均衡和容錯(cuò)、支持移動(dòng)客戶和服務(wù)定制等。它在通信網(wǎng)絡(luò)管理、智能網(wǎng)領(lǐng)域、Internet上的智能信息檢索以及分布計(jì)算領(lǐng)域有著廣泛的應(yīng)用前景。
Aglet是由IBM日本公司用純JAVA開發(fā)的移動(dòng)Agent技術(shù),它提供了Aglet Workbench平臺(tái),供人們開發(fā)和實(shí)施移動(dòng)Agent系統(tǒng)。Agent是一個(gè)較為成功的移動(dòng)代理系統(tǒng),它主要提供了一個(gè)簡單而全面的移動(dòng)代理編程模型,為代理間提供了動(dòng)態(tài)和有效的通信機(jī)制,并提供了一套詳細(xì)而簡易的安全機(jī)制。簡單地說,Aglet就是具有Agent行為的Applet對(duì)象。
設(shè)計(jì)模式是面向?qū)ο?/a>設(shè)計(jì)的復(fù)用。研究設(shè)計(jì)模式的目的就是為了使人們更加簡單、方便地復(fù)用成功的設(shè)計(jì)和體系結(jié)構(gòu)。具體地講,一個(gè)設(shè)計(jì)模式包括模式的名稱、問題范圍、解決方案和效果,它主要應(yīng)用于基于OO的設(shè)計(jì)。目前已知的設(shè)計(jì)模式包括3類23個(gè)模式。
Aglets是一個(gè)面向?qū)ο蟮南到y(tǒng),它擁有一個(gè)比較明晰的類體系結(jié)構(gòu)和一套完整的對(duì)象應(yīng)用解決方案。研究Aglets的設(shè)計(jì)模式有助于人們更加充分地認(rèn)識(shí)移動(dòng)代理系統(tǒng)從理論走向應(yīng)用所需要解決的問題,有利于對(duì)Aglets系統(tǒng)的充分應(yīng)用,也有利于認(rèn)識(shí)到Aglets的不足之處,為發(fā)展出更好的移動(dòng)代理應(yīng)用體系結(jié)構(gòu)打下基礎(chǔ)。
1? Aglets系統(tǒng)簡介
1.1 Aglets的應(yīng)用體系結(jié)構(gòu)
Aglets的體系結(jié)構(gòu)如圖1所示。Aglet的執(zhí)行分為若干階段。首先當(dāng)一個(gè)正在執(zhí)行的Aglet要到達(dá)遠(yuǎn)端時(shí),它會(huì)對(duì)Aglet Runtime層發(fā)出請(qǐng)求;接著Aglet Rumtime層把Aglet的狀態(tài)信息與代碼轉(zhuǎn)化為序列化的字節(jié)數(shù)組。這時(shí)如果請(qǐng)求成功,系統(tǒng)會(huì)將字節(jié)數(shù)組傳送至ATCI(Agent Transport and Communication Interface)層處理。此層提供可以使用ATP(Agent Transfer Protocol)的接口,這里ATP為一個(gè)簡單的應(yīng)用層協(xié)議,如圖2所示。系統(tǒng)將字節(jié)數(shù)組附上相關(guān)的系統(tǒng)信息(如系統(tǒng)名稱及Aglet的ID等)后以位流的方式通過網(wǎng)絡(luò)傳送至遠(yuǎn)端機(jī)器。遠(yuǎn)端機(jī)器利用ATCI層提供的ATP接口接收傳來的字節(jié)數(shù)組及系統(tǒng)信息;然后Aglet Runtime層對(duì)字節(jié)數(shù)組進(jìn)行反序列化操作,得到Aglet的狀態(tài)信息和代碼;最后Aglet在遠(yuǎn)端繼續(xù)加載執(zhí)行。
?
Aglets系統(tǒng)通過提供一個(gè)上下文環(huán)境(Context)來管理Aglet的基本行為。Aglets的生命周期行為包括創(chuàng)建(Create)、復(fù)制(Clone)、分派(Dispatch)、召回(Retract)、暫停(Deactive)、喚醒(Active)及清除(Dispose)等。圖3為Aglets的生命周期行為圖。
?
Aglet之間的通信可以通過消息實(shí)現(xiàn),如圖4所示。基于安全的考慮,Aglet不能直接訪問,必須通過一級(jí)Proxy對(duì)象實(shí)現(xiàn)。并且這樣做還可以使Aglet位置透明。也就是說,如果Aglet想與遠(yuǎn)端Aglet通信,則只需要在本地環(huán)境中生成遠(yuǎn)端Aglet的代理(Proxy)對(duì)象,并不需要知道對(duì)方的位置和處理網(wǎng)絡(luò)通信等。
1.2 Aglets的主要類結(jié)構(gòu)
在Aglets的編程模型中,涉及到的主要類有:com.ibm.aglet.Aglet、com.ibm.aglet.AgletProxy、com.ibm.aglet.AgletContext、com.ibm.aglet.Message、com.ibm.aglet.FutureReply。下面分別予以介紹。
(1)com.ibm.aglet.Aglet。這是一個(gè)抽象類,用于控制代理的生命周期行為。它定義了代理的基本行為方式,例如發(fā)送、創(chuàng)建等。所有在Aglets中生存的代理都必須從這個(gè)抽象類中繼承。此外,Aglet類也用于訪問與Aglet相關(guān)的一些屬性。例如,可以通過Aglet.getAgletInfor()調(diào)用得到并訪問一個(gè)AgletInfor對(duì)象,并訪問與Aglet相關(guān)的一些靜態(tài)屬性和動(dòng)態(tài)屬性。
(2)Com.ibm.aglet.AgletProxy。在Aglet系統(tǒng)里,這個(gè)類是處理Aglet類的一般方法。出于安全方面的考慮,許多Aglet類的方法或者屬性是不能直接訪問的。如果要與這個(gè)Aglet通信,則必須通過一個(gè)AgletProxy對(duì)象來實(shí)現(xiàn)。AgletProxy相當(dāng)于Aglet的一個(gè)外殼(參看圖4)。當(dāng)調(diào)用產(chǎn)生的時(shí)候,AgletProxy對(duì)象會(huì)通過SecurityManager決定是否允許這次調(diào)用。這樣還能使得Aglet的位置透明。
AgletProxy對(duì)象可以通過下列幾種方式獲取:
?、僬{(diào)用AgletContext.getAgletProxies()獲取多個(gè)AgletProxy對(duì)象;
?、谕ㄟ^AgletID作為參數(shù)調(diào)用取得相關(guān)的AgletProxy對(duì)象;
??? ③將AgletProxy對(duì)象作為參數(shù)通過消息傳送;
??? ④將AgletProxy作為參數(shù)將對(duì)象傳送至ContexProperty。
(3)com.ibm.aglet.AgletContext。這個(gè)對(duì)象用于將Aglet所處的環(huán)境映射到一個(gè)訪問接口中,供Aglet訪問。每個(gè)Aglet對(duì)象都可以通過getAgletContext()方法訪問到該對(duì)象,并通過它調(diào)用一些系統(tǒng)功能,可以將它看做一個(gè)系統(tǒng)環(huán)境接口。
(4)com.ibm.aglet.Message。所有的Aglet通信都通過構(gòu)造Message對(duì)象來實(shí)現(xiàn)。Message對(duì)象可以傳送字符串和對(duì)象消息。Aglet之間可以通過Proxy對(duì)象發(fā)送消息,或者通過下面要介紹的FutureReply對(duì)象發(fā)送異步消息。消息接收方通過Aglet.handleMessage(Message msg)來處理消息。
(5)Com.ibm.aglet.FutureReply。這是一個(gè)接口,是用于傳送異步消息并不阻塞當(dāng)前執(zhí)行線程的一種消息傳送方式。它通過調(diào)用Proxy對(duì)象的sendAsyncMessage(Message msg)返回。
1.3 Aglets應(yīng)用設(shè)計(jì)框架
Aglets提供了一個(gè)Aglet Workbench的可視化環(huán)境,用于建立和使用基于Aglets平臺(tái)的網(wǎng)絡(luò)應(yīng)用系統(tǒng)。目前該軟件主要提供下列幾個(gè)方面的工具:
(1)Aglets框架:提供Aglets平臺(tái)的基本功能框架。
(2)ATP:Aglet傳輸協(xié)議。
(3)Tazza:可視化應(yīng)用所需的個(gè)性化移動(dòng)Agent。
(4)JDBC:訪問DB2數(shù)據(jù)庫。
(5)JoDax:訪問單位的數(shù)據(jù)。
(6)Tahiti:可視化Aglet管理界面,用于監(jiān)視和控制Aglet的執(zhí)行。
(7)Fiji:通過Fiji Applet使得用戶可以在Web上監(jiān)視Aglet Context,以便實(shí)現(xiàn)產(chǎn)生、分派、召回Aglet的功能。
2?Aglets設(shè)計(jì)行為方式分析
首先討論在Aglet系統(tǒng)里中的行為方式(Behaviour Pattern)。
在Aglet系統(tǒng)中主要有3類行為方式:遷移方式、任務(wù)實(shí)現(xiàn)方式和交互方式。
(1)遷移方式
遷移是移動(dòng)代理移動(dòng)性體現(xiàn)的方式。在Aglets中它主要處理移動(dòng)代理移動(dòng)時(shí)產(chǎn)生的各種問題,如路由和通信質(zhì)量。Aglets中有3種方式:
?、買tinerary:負(fù)責(zé)到達(dá)目的地的路由,它維護(hù)著所有目的地的列表,定義路由策略,并能處理諸如目的地不存在等異常情況。
?、贔orwarding:提供發(fā)送所有的或者特定的代理到遠(yuǎn)端機(jī)器的機(jī)制。
?、跿icket:負(fù)責(zé)管理服務(wù)質(zhì)量和權(quán)限等問題。
(2)任務(wù)實(shí)現(xiàn)方式
任務(wù)實(shí)現(xiàn)主要是把任務(wù)分解給不同的Agent去執(zhí)行。Aglets中有2種方式:
?、費(fèi)aster-Slave:一種基本的任務(wù)實(shí)現(xiàn)方式。允許主代理把任務(wù)委派給從代理,從代理移動(dòng)到指定的目的地,從而完成任務(wù)。
?、赑lan:用工作流的方式進(jìn)行策劃,讓多個(gè)任務(wù)順序或并行地在多個(gè)代理上執(zhí)行。
(3)交互方式
Aglets中有5種提供Agent之間的交流通信的方式。
?、費(fèi)eeting:提供一種方式讓二個(gè)或者多個(gè)Agent在指定的機(jī)器上運(yùn)行和交互。從Agent的編程模型來看,Agent被派到會(huì)議地點(diǎn)的計(jì)算機(jī)與相關(guān)Agent進(jìn)行交互。
?、贚ocker:存儲(chǔ)遷移暫時(shí)不需要的數(shù)據(jù),以節(jié)省帶寬。
③Messenger:用一個(gè)信使Agent在需要交互的Agent之間進(jìn)行通信。
?、蹻acilitator:通過公共通信設(shè)施進(jìn)行詢問通信。
⑤Organized Group:提供有效的機(jī)制,組合不同的Agent到一個(gè)通信網(wǎng)絡(luò)中。這種通信機(jī)制使得一個(gè)任務(wù)可以劃分給多個(gè)移動(dòng)Agent實(shí)施。
Aglets中的應(yīng)用主要在上述的行為方式下完成。上述的行為方式也決定了Aglets的類體系中的設(shè)計(jì)模式。Aglets的每一個(gè)行為方式所代表的類都是由一個(gè)或者多個(gè)模式設(shè)計(jì)而成的。例如:在AgletContext類中就體現(xiàn)了Singleton模式。
3?移動(dòng)代理系統(tǒng)的設(shè)計(jì)模式
幾乎所有面向?qū)ο蟮南到y(tǒng)結(jié)構(gòu)中,都會(huì)用到已知的模式或是已知模式的組合。下面介紹Aglets應(yīng)用設(shè)計(jì)中幾種主要的模式。
(1)Aglets對(duì)象結(jié)構(gòu)中的模式
Aglets中類的設(shè)定都能體現(xiàn)出一定的設(shè)計(jì)模式。下面是幾個(gè)明顯的模式應(yīng)用的實(shí)例。
①Proxy模式:出于安全等因素的考慮,在Aglets中不能直接訪問Aglet對(duì)象,必須通過AgletProxy訪問,同時(shí)還使得Aglet的位置透明。這種模式被稱為Proxy的構(gòu)造模式。
?、贛ediator模式:在Aglets中,各個(gè)Aglet之間的通信通過Message對(duì)象來實(shí)現(xiàn)。對(duì)于Message的實(shí)現(xiàn)和處理被封裝在Aglet的實(shí)現(xiàn)中。這種模式使通信顯得松散,實(shí)際上是一種Mediator模式的應(yīng)用實(shí)例。
?、跾ingleton模式:Aglets中的AgletContext對(duì)象是一個(gè)全局的對(duì)象,封裝了系統(tǒng)功能。這樣的對(duì)象只能有一個(gè)全局實(shí)例,因此在Aglets中通過系統(tǒng)內(nèi)部的一次實(shí)例化完成。這是一個(gè)Singleton模式的應(yīng)用。
????④Bridge模式:FutureReply接口用來處理異步傳送的消息。它應(yīng)用了一個(gè)Bridge的模式,這個(gè)模式使得FutureReply的接口和實(shí)現(xiàn)無關(guān)。
(2)Aglets的行為方式中的模式
???? Aglets的行為方式都是多個(gè)模式的組合。下面分析Aglets中幾個(gè)具有代表意義的行為方式和結(jié)構(gòu)方式中使用的模式。
?、龠w移方式:這里可以將遷移方式理解為Aglet對(duì)象中對(duì)Aglet平臺(tái)的一種遍歷。因此在這個(gè)設(shè)計(jì)中,Aglets實(shí)際上應(yīng)用了Visitor模式。
?、谌蝿?wù)實(shí)現(xiàn)方式:通過Aglet實(shí)現(xiàn)任務(wù),也就是Aglet功能的體現(xiàn)。Aglet的主-從任務(wù)方式體現(xiàn)在類結(jié)構(gòu)中。這里的結(jié)構(gòu)模式是一種Bridge模式,這種結(jié)構(gòu)方式使得從代理可以不受主代理的限制,獨(dú)立地實(shí)現(xiàn)和替換。Plan的行為模式是一種Command模式,它構(gòu)造一個(gè)任務(wù)列表。
?、劢换シ绞?主要是Message方式,應(yīng)用了Mediator模式。這種模式使得對(duì)象之間形成松耦合關(guān)系。其他一些交互方式或多或少都是在Message基礎(chǔ)上實(shí)現(xiàn)的。
(3)應(yīng)用模式改進(jìn)設(shè)計(jì)
脫離應(yīng)用而單純地描述模式會(huì)陷入一種誤區(qū)。實(shí)際上是否應(yīng)用設(shè)計(jì)模式是根據(jù)設(shè)計(jì)對(duì)象的要求來定的,并且在設(shè)計(jì)的過程中逐漸加入模式的應(yīng)用。在應(yīng)用設(shè)計(jì)模式時(shí),必須盡量根據(jù)現(xiàn)有的模式進(jìn)行應(yīng)用,而不是去發(fā)現(xiàn)新的模式。事實(shí)上發(fā)現(xiàn)新的模式在現(xiàn)有情況下是非常困難的。
Aglets的設(shè)計(jì)總體來說是十分成功的。由于種種原因,本文并沒有對(duì)Aglets的設(shè)計(jì)模式作完整的分析。通過分析Aglets的主要設(shè)計(jì)模式可以得出這樣的結(jié)論:盡管是移動(dòng)代理的系統(tǒng),也仍然是在一個(gè)OO環(huán)境中的設(shè)計(jì)應(yīng)用。因此,需要利用基于OO的設(shè)計(jì)方法來進(jìn)行有關(guān)基于移動(dòng)代理平臺(tái)的應(yīng)用系統(tǒng)。從這一點(diǎn)來看,通過應(yīng)用設(shè)計(jì)模式來改進(jìn)應(yīng)用框架體系設(shè)計(jì)顯得非常重要。
4? 結(jié)束語
設(shè)計(jì)一個(gè)復(fù)雜系統(tǒng)時(shí),設(shè)計(jì)模式非常重要。它可使設(shè)計(jì)者避免在同一類問題處理時(shí)耗費(fèi)大量的精力去進(jìn)行重復(fù)的思考。移動(dòng)代理系統(tǒng)的特點(diǎn)決定了它是一個(gè)負(fù)責(zé)的多對(duì)象系統(tǒng)。在這樣的系統(tǒng)中,如何設(shè)計(jì)類和對(duì)象的結(jié)構(gòu)、行為、創(chuàng)建等是非常重要的。在設(shè)計(jì)移動(dòng)代理應(yīng)用體現(xiàn)框架的時(shí)候,合理地分析和應(yīng)用設(shè)計(jì)模式對(duì)于系統(tǒng)的整體性能和設(shè)計(jì)成本等都具有重要意義。
Aglets是一個(gè)較為成功的移動(dòng)代理系統(tǒng)。分析Aglets的設(shè)計(jì)模式,理解移動(dòng)代理的設(shè)計(jì)和應(yīng)用都具有重要意義。在未來的工作中,清楚地知道選擇策略和設(shè)計(jì)的關(guān)系尤為重要。因此,需要繼續(xù)研究移動(dòng)代理系統(tǒng)中的設(shè)計(jì)模式。
?
參考文獻(xiàn)
1? 張?jiān)朴?移動(dòng)Agent及其應(yīng)用.北京:清華大學(xué)出版社,2002
2? Gamma E,Helm R,Johnson R et al.設(shè)計(jì)模式:可復(fù)用面向?qū)ο筌浖幕A(chǔ).北京:機(jī)械工業(yè)出版社,2000