生桂勇
摘 要:Agent作為一種全新的分布式計算模型,其優越的性能受到越來越多的重視。Java語言的平臺獨立性、對象序列化及動態類裝載等機制,為設計和研究基于Agent的分布式計算提供了獨特的作用。首先分析Agent的工作原理,并設計一個應用Agent計算矩陣乘法的實例,驗證了Agent的特性。實驗結果表明,基于Agent的分布式計算在運行效率、容錯性以及平臺獨立性方面都有良好的表現。
關鍵詞:Java;Agent;線程;分布式
中圖分類號:TP311文獻標識碼:A
文章編號:1004-373X(2009)12-052-03
Distributed Computing Based on Agent
SHENG Guiyong
(Jianghai Polytechnic College,Yangzhou,225101,China)
Abstract:As a novel paradigm for distributed computing,Agent exhibits some excellent characteristics and receives attention increasingly.The platform-independent of Java language,and object serialization mechanisms such as dynamic loading category provide a unique role for the design and research of Agent-based distributed computing.This paper first analyses the working principle of Agent,then designs an example of calculation of matrix multiplication by using Agent to verify the characteristics of the Agent.The results show that Agent-based distributed computing in operating efficiency,fault tolerance,as well as the platform-independent has good performance.
Keywords:Java;Agent;thread;distributed
0 引 言
支持分布式應用軟件開發的環境及工具層出不窮,它們在一定程度上為分布式應用軟件設計和開發提供了方便,但它們也在很多方面,尤其是在面向對象、安全性和可移植性等方面存在著不足。現代網絡技術的高速發展,特別是Internet的日益普及,推動了分布式計算的研究。移動Agent作為全新的分布式計算工具,通過將自身代碼、狀態傳送到遠程主機,而遠程主機本地執行的方式克服了client/server結構的不足之處,因此成為分布式計算的主要發展方向之一。最初實現移動Agent的工具語言主要是Tcl、Scheme等。Java的出現改變了這一切,由于Java語言的平臺無關性、多線程及對象序列化機制等特點使之成為實現移動Agent的首選語言。目前,大部分商業性和研究性的移動Agent系統都是基于Java語言,例如IBM公司的Aglets和General Magic公司的Odyssey等,Java為網絡世界帶來了可靠的面向對象的程序設計方式。
討論Agent的機制和實現,并把Agent用于矩陣的分布式計算。分析表明,基于Agent的分布式計算在運行效率、容錯性以及平臺獨立性方面都有良好的表現。
1 Agent
目前,仍然沒有一個關于Agent的統一定義,就像什么是智能一樣。一般認為Agent是一種在分布式系統或協作系統中能持續自主發揮作用的計算機主體,即軟件智能體。它具有以下基本特征:
(1) 自治性(Autonomy);
(2) 社會能力(Social Ability);
(3) 反應能力(Reactivity);
(4) 基于目標(Goal Directed Behavior)的自發行為(Pro-activeness)。
1.1 移動Agent
移動Agent是一種獨立的計算機程序,它可以自主地在異構網絡上按照一定的規程移動,尋找合適的計算機資源、信息資源或軟件資源,利用與這些資源同處一臺主機或網絡的優勢,處理或使用這些資源,代表用戶完成特定的任務。換句話說,它擁有一個顯著的特點,移動性(Mobility),即Agent可以從一個主機移動到另一個主機而保持其內部狀態不變,它可以攜帶數據和遠程執行的智能指令(多數情況下就是它本身)。移動Agent除了具有Agent的特征外,還具有以下優點:
(1) 節省帶寬。移動Agent移動到工作服務器端,并把最終數據傳回客戶機,可以節省通信帶寬;
(2) 節省時間。主要是因為移動Agent減少了網絡傳輸,在規模較大的數據庫操作中Agent能實現本地操作;
(3) 減少延遲。移動Agent移動到服務器端,直接傳回最終結果,避免了中間數據的傳輸延遲;
(4) 異步方式。一旦移動Agent從客戶端傳輸到另一臺主機上,這臺機器就可以與網絡斷開連接,直至想回收Agent或再次傳送Agent;
(5) 負載平衡。移動Agent能輕易地從一個平臺移動到另一個平臺,它們帶著自身代碼移動到目的機器上無需預先安裝就能運行,可以很方便地實現負載平衡;
(6) 動態配置。移動Agent可以感知環境的變化并做出反應,多個移動Agent可以動態地調整分布,以維持最優配置;
盡管上述優點沒有一個是移動Agent所惟一擁有的,但是沒有一種技術能像移動Agent一樣同時具備以上6個優點。
1.2 基于移動Agent的分布式計算模式
移動Agent模式的關鍵特征就是網絡中的任一主機都擁有處理資源、處理器和方法的任意組合的高度靈活性。方法(在移動Agent的形式下)沒有鎖定在一臺主機上,而是在整個網絡內可共享。
移動Agent模式為分布式系統的設計,實現和維護都帶來了活力,該模式有如下的優點:
(1) 減輕網絡負載。移動Agent可以將一個會話過程打包,然后將其發送到目標主機上進行本地交互。此外,當進行遠程主機的大量數據處理時,這些數據不應在網絡上傳來傳去,而應在本地處理完成;
(2) 克服網絡隱患。移動Agent技術可以從中央控制器傳送到各局部點激活,并在當地直接執行控制器的指令;
(3) 封裝協議。數據在分布式系統中進行交換時,每一臺主機都有自己的網絡協議,該協議將對傳出的數據進行編碼,對傳入的數據進行解釋。移動Agent能夠直接遷移到遠程的主機,建立起一個基于私有規程的數據傳輸通道;
(4) 具有應變能力。移動Agent具備感知其運行環境,并對環境變化做出反應的能力;
(5) 具有自然異構性。網絡計算平臺往往是異構的,由于移動Agent通常獨立于計算機和傳輸層,而僅僅依賴于其運行環境,所以移動Agent提供了系統無縫集成的最優條件;
(6) 異步自主運行。移動設備上的任務可以嵌入到移動Agent中去,然后將它通過網絡派遣出去,此后,移動Agent就獨立于生成它的過程,并可異步自主操作;
(7) 健壯性和容錯性。移動Agent具有對非預期狀態和事件的應變能力,這是更容易創建健壯和容錯性好的分布式系統。
由于移動Agent技術具有上述優點,它在電子商務、并行處理、移動計算等應用領域具有很好的發展前景。
2 Aglet
Aglet是由IBM公司用純Java開發的移動Agent技術,并提供實用的平臺——Aglet Workbench,讓人們開發或執行移動Agent系統。Aglet這個詞是由“Agent”和“Applet”合成。簡單地說,Aglet就是具有Agent行為的Java Applet對象。但Aglet同時傳送代碼及其狀態,而Applet只傳送代碼。Aglet以線程的形式產生于一臺機器上,可隨時暫停執行的工作,而后整個Aglet可以被分派到另一臺機器上,再重新啟動執行任務。因為它占有的是線程,所以不會消耗太多的系統資源。
2.1 Aglet系統框架
由Aglet的系統框架(見圖1)可以看出Aglet的執行分為若干階段。
圖1 Aglet的系統框架
首先當一個正在執行的Aglet想要將自己遷移到遠端時,會對Aglet Runtime層發出請求;接著Aglet Runtime層將Aglet的狀態信息與代碼轉換成序列化(Serialized)的字節數組。這時如果請求成功,系統將字節數組傳送至ATCI(Agent Transport and Communication Interface)層處理,這一層可使用的ATP(Agent Transports and Protocol)接口。接著,系統會將字節數組附上相關的系統信息,如系統名稱以及Aglet的id等,并以比特流方式通過網絡傳至遠端機器,遠端機器利用ATCI層提供的ATP接口,接收到傳來的字節數組及系統信息;最后Aglet Runtime層對字節數組反序列化,得到Aglet的狀態信息與代碼,此時Aglet可以在遠端機器上執行。
2.2 Aglet對象模型
Aglet系統提供了一個上下文環境(Context)來管理Aglet的基本行為,如創建(Creat)Aglet、復制(Clone)Aglet、分派(Dispatch)Aglet到遠端機器、召回(Retract)遠端的Aglet、暫停(Deactive)、喚醒(Active)Aglet,以及清除(Dispose)Aglet等,過程如圖2所示。
圖2 Aglet的對象模型
Aglet與Aglet之間的通信,是使用消息傳遞的方式來傳遞消息對象的。從安全角度考慮,Aglet并非讓外界直接存取其信息,而是通過一個代理(Proxy)提供相應的接口與外界溝通。這樣Aglet的所在位置就會透明化,也就是Aglet需要與遠端的Aglet溝通時,只在本地主機的上下文環境中產生對應遠端Aglet的代理,并與此代理溝通即可,不必直接處理網絡連接與通信的問題。
3 矩陣乘法的分布式計算實例
為驗證Agent的特性,設計一個應用Aglet計算矩陣乘法的實例。
首先,對任務進行分解,并創建一個主Agent;然后主Agent創建從Agent,并將任務分派給它們,從Agent完成計算后把結果返回給主Agent。然而主Agent等待從Agent的回答,將計算結果拼接起來組成計算結果,并將得到的結果返回給用戶。主-從模式如圖3所示。
圖3 主-從模式
為此,在局域網中兩臺機器運行,一臺為Master,另一臺為Slave。在Master端啟動Aglet平臺創建Matrix類,并創建Calculator類,發送到Slave機器上運行。Master機器將Slave機器上運行完成后的Agent回收(結果),再與本機上的運行結果合并,并顯示結果。
Master端的Matrix類的基本算法如下:
handleMessage(msg);//處理消息,根據消息選擇執行程序
setMessage(msg);//窗口顯示消息
onCreation(obj);//設置初始化窗口
createGUI();//創建窗口
matrixrun();//本地計算部分
startTrip(msg);//遠程計算部分,發送Agent,即Calculator到遠端
Output(msg);//顯示最后計算結果
Slave端的Calculator類的基本算法如下:
onCreation(obj);//初始化
run();//計算并返回結果
矩陣的計算過程是Master端的Matrix類與Slave端的Calculator類之間的交互過程,其關系如圖4所示。
圖4 矩陣的計算
4 結 語
Java語言作為跨平臺網絡編程語言,其自身所具有的很多特點與實現Agent的需要恰好完全吻合,使其成為設計移動Agent系統的首選語言。與基于Socket或RMI實現分布式計算不同的是,Aglet通過傳遞代碼到遠程計算機而不是傳送數據到遠程計算機上進行分布式計算。隨著移動Agent技術的日益成熟,Agent必將在許多領域產生更大的影響。
參考文獻
[1]Sohda Y,Nakada H,Matsuoka S.Implementation of a Portable Software in Java[A].Java Grande/IS0PE′01[C].2001:163-172.
[2]Bubak M,Kurzyniec D,Luszczek P,et al.Creating Java to Native Code Interfaces with JANET[J].Scientific Programming,2001(1):39-50.
[3]李三紅,吳永明,馬云龍.基于Java RMI計算模型的智能查詢技術的設計與實現[J].計算機應用與軟件,2005,22(2):122-123.
[4]朱聾良,邱瑜.移動代理系統綜述[J].計算機研究與發展,2001,38(1):16-25.
[5]朱福喜.J2EE經典實例詳解[M].北京:人民郵電出版社,2003.
[6]朱福喜,傅建明,唐曉軍.Java項目設計與開發范例[M].北京:電子工業出版社,2005.
[7]余俊,耿金花,任敬喜.利用Http隧道技術實現Java的分布式對象計算[J].青島大學學報:工程技術版,2007,22(1):41-44.
[8]齊德昱,謝景明.一個基于Java虛擬機的分布式計算模型[J].計算機科學,2007,34(6):248-250.
[9]何旭.基于Java遠程類引用的面向對象分布式計算[J].四川文理學院學報:自然科學版,2007,17(5):71-73.
[10]譚昊勛,龍海洋,鄭娟.基于Java RMI的分布式計算[J].湘潭大學自然科學學報,2005,27(2):59-61.
[11]張浩,駱正虎,楊敬安.基于Java語言的移動Agent開發平臺[J].合肥工業大學學報:自然科學版,2001,24(5):907-912.