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