一、概述
隨著Internet的不斷壯大,分布計算技術越來越受到人們的重視并得到了快速的發展,逐步形成了基于過程的分布計算技術、基于對象的分布計算技術和基于Code-on-demand的分布計算技術等幾種主流技術。而Mobile Agent的出現,即作為一種未來的分布計算模式受到了各有關研究人員的重視并逐步成為當今計算機技術研究的熱點之一。[1]但是,在基于Mobile Agent分布計算技術的研究方面,由于理解不同、缺乏相關的標準和規范作為有力的指導,不同的研究機構在研究內容、指導理論和研究方法上都還存在很大的差異。筆者使用了由日本三菱公司開發的Concordia軟件包,覺得是目前一個比較有代表性的Mobile Agent系統,現分析其體系結構及其遷移的實現如下。
一般情況下,一個Mobile Agent 系統至少應該包含Mobile Agent和Mobile Agent Server兩部分。Mobile Agent通過Mobile Agent server實現其在網絡上的移動和相應動作;而Mobile Agent server為Mobile Agent 的移動和執行提供必要的執行環境以及相應的發射、接受、恢復、安全管理和服務調用等功能或服務。為了確保Mobile Agent能夠順利地在網絡上遷移并完成相應的功能,Mobile Agent Server至少應能夠為Mobile Agent提供以下幾個主要的服務:
1 生命周期管理:即為Mobile Agent的創建、發送、傳輸、接收和執行等提供必要的條件;
2 目錄服務:提供統一的命名服務,使得Agent能夠在網絡上準確地找到所需的服務并加以利用;
3 事件服務:為Agent提供一種通訊機制,使得能夠和其它Agent或應用系統進行交互,為Agent之間的相互協作提供必要的條件;
4 持續性服務:通過相應的機制確保Agent執行的持續性。使得Agent在到達目的地之后或者出現系統、網絡崩潰等意外時,能夠準確地重新啟動;
5 安全保障:利用多種途徑保障整個系統的安全,包括Agent的安全、服務器的安全等。
二、Concordia體系結構
Concordia是一個基于Java語言、能夠高效開發和管理各種Mobile Agent 應用的完整框架,它基本上包括了上述的所有特性。該框架中包含了若干以Java語言完成的部件,這些組件能相互結合,為Mobile Agent 應用的開發和管理提供完美的環境。Concordia的體系結構如圖一所示,圖中各部件的主要功能和職責如下:[2]
管理員:它主要負責整個Concordia網絡的管理。它管理著Concordia 所提供的所有服務,并能與這些服務協同javascript:tagshow(event, '%B9%A4%D7%F7');" href="javascript:;" target=_self>工作。對它的操作主要通過其用戶界面來完成。
Concordia服務器:是安裝并運行在網絡各Concordia 節點上所有構件的總稱。在Concordia 中,一個Mobile Agent 系統至少應該包括一個Java虛擬機(JVM),一個Concordia Server和一個Mobile Agent。一般情況下,Mobile Agent系統都會有多個Concordia Server同時運行在網絡的不同節點上。Concordia Server主要包含以下幾個構件:
Agent管理器:它為Agent在網絡上的傳送和接收提供了必要的基礎設施;管理著Agent的生命周期,為Agent的執行提供一個完整的環境。其主要功能有以下幾點:
l 提供最基本的遷移功能:使得Agent的代碼和數據總是能夠準確的到達其目的地;
2 為Agent的執行提供了相應的執行環境;
3 為Agent的遠程管理提供支持;
4 為Agent 改變其路線提供了相應的方法。
隊列管理器:它負責Concordia系統中Agent的時序安排和可能重試的行為。包括在Agent等待時機以完成工作時對它們進行維護,在Agent進入或離開系統時維持它們的持續性狀態,并在Concordia系統從網絡中斷開時進行必要的重試。它為Agent登陸到Concordia節點后的執行提供了排序和管理的機制。其主要任務包括:
l 為Agent在不可靠網絡之上提供可靠的傳輸;
2 提供基本的存儲和轉發操作。
持續性管理器;它維持著Agent在網絡上遷移時的狀態。而且,它考慮到了在系統失敗情況下Agent的檢查點和再啟動(由于程序或系統故障,一個程序被終止以后,使它在某個中間位置而不是在開始位置重新開始執行的一種程序。一次再啟動可以在檢查點開始或從一個作業步開始,并且使用檢查點記錄以便重新將系統初始化)。其操作在一般情況下都是透明的,也就是說,根本無須Agent或者Administrator的控制。其包括的主要功能有:
l 為Agent和其他一些Object的持續性提供必要的支持;
2 使得系統在崩潰之后的重新啟動中能夠準確地重新啟動Agent和各種服務。
事件管理器:它管理著發送給Agent或從Agent發出的注冊和通知等事件。它能夠在Concordia網絡上把事件傳遞給網絡中其他節點上的Agent,它和Concordia一起根據需要發布事件。其主要功能有:
l 為Agent之間的協作提供相應支持;
2 為Agent之間的事件傳送提供支持;
3 實現事件的多點傳送,即多個接收者接受一個事件。
目錄管理器:它的主要責任是提供統一的命名服務,使得Agent能夠在網絡上找到所需的服務。Administrator可以根據設計人員或者服務的需要以多種途徑來設定名字服務。
安全管理器:它負責識別用戶,鑒別他們的Agent,保護服務器的資源并確保Agent及其數據對象在遷移中的安全和完整。它也負責控制Agent對其所需Java類庫的動態加載。它擁有一個用戶界面構件,能夠通過該界面來配置和監控Concordia所知的各用戶和服務的安全屬性。其關鍵功能包括:
l 執行相應的鑒定:確保能夠識別出Agent來自何處以及到底是誰在執行它;
2 執行訪問控制:確保服務器的資源不受惡意的或者錯誤Agent的攻擊;
3 加密:防止Agent被假冒和篡改。
服務接口(Service Bridge):它為開發人員提供了一種機制,使得開發出來的Agent在遷移到某一個服務器時,能夠在該服務器增加一些有關的服務,為Agent的執行提供有效的支持,這些增加的服務可以在DirectoryManager上完成相應的注冊。它的一個最主要的用途就是使得Agent能夠訪問目的服務器上的各種本地服務。它可以通過遠程管理API來執行遠程的管理。
除此之外,Concordia還為開發人員提供了大量開發Agent 的應用所需的類庫(Agent tools Library),使得Agent的設計人員無須過多了解網絡的細節和編制相關的代碼,極大的方便了開發人員。
三、Concordile中Mobile Agent的遷移
Mobile Agent的遷移與分布式對象的交互及Java Applet的下載有著很大的不同。在基于CORBA或DCOM的分布式對象系統中,一個對象能夠通過網絡遠程地調用其他對象的方法。但是,在兩個對象的交互過程,沒有任何一個是移動的。WWW中Applet的下載也僅是提供了一種從Web服務器把代碼下載到Web瀏覽器的機制,并沒有為相應狀態信息的遷移提供任何機制??梢哉f一個Applet本質上并不是從服務器上遷移到瀏覽器上的,而僅僅是代碼的下載,就象HTML頁面的下載一樣,因為下載的代碼將創建一個對象,一旦該Applet被創建,它就只能呆在該瀏覽器上而不能移動。而Mobile Agent的遷移則不同,它在遷移的過程中不但攜帶著相應的代碼,也將攜帶著有關的狀態信息,如圖二所示[3],另外,Mobile Agent還能根據用戶的要求在網絡上進行多次遷移。
在Mobile Agent的遷移過程中,其遷移計劃是由路線來決定的。例如表1就定義了一個Mobile Agent的路線。根據該路線,該Mobile Agent將首先到達服務器Server1,在該服務器上執行方法method1;然后遷移到服務器Server2并執行方法method2;最后遷移到服務器Server3,執行方法method3。
在Concordia中,路線是一個完全獨立于Mobile Agent的數據結構,在Mobile Agent的執行過程中,將在一個相對獨立的地方對該Mobile Agent的遷移進行管理。這種模式能夠為Mobile Agent遷移的定義和跟蹤提供十分簡單的機制。而且,系統還能夠允許Mobile Agent在執行過程中更改它們的路線,從而大大提高了靈活度。
Agent的源代碼 遷移中的Agent
表1 某Mobile Agent 的路線
另外,在Mobile Agent的遷移過程中還有可能遇到這種情況:即Mobile Agent遷移到某主機后發現它需要使用的一些相關類在該主機上并不存在。為了解決這個問題,Concordia使用了一種Push-Pull的方式來移動相應的代碼。
Concordia的Pull模式和瀏覽器下載Applet代碼的方式比較相似。在這種模式中,Mobile Agent在遷移過程中將攜帶一個其出發地的代碼基地(codebase),一般情況下,這個代碼基地將是一個Web服務器上的某個位置。當一臺主機的Concordia服務器發現某一個 Agent所需要的代碼在該主機上不存在時,它就向該 Agent的代碼基地發出一個網絡請求并下載相應的代碼。通常情況下,該網絡請求將是一個對 服務器的HTTP請求。
這種 Pull模式在有些情況下并不能很好的解決問題。例如,一個 Agent可能要到一個很遠的地方,此時若發現缺少相關代碼而發送網絡請求將要付出很大的代價甚至無法完成任務。為了應付這種情況, Concordia允許用戶或者開發人員在發射Agent時為它指出相關的類(related classes),這些相關的類將自動地和Agent一起遷移。除此之外,Concordia也提供了一種 Push的方式,在這種方式里,Agent使用到的一些類將和Mobile Agent一起在網絡上遷移。