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