生桂勇
摘 要:Agent作為一種全新的分布式計算模型,其優(yōu)越的性能受到越來越多的重視。Java語言的平臺獨立性、對象序列化及動態(tài)類裝載等機制,為設計和研究基于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 引 言
支持分布式應用軟件開發(fā)的環(huán)境及工具層出不窮,它們在一定程度上為分布式應用軟件設計和開發(fā)提供了方便,但它們也在很多方面,尤其是在面向對象、安全性和可移植性等方面存在著不足?,F代網絡技術的高速發(fā)展,特別是Internet的日益普及,推動了分布式計算的研究。移動Agent作為全新的分布式計算工具,通過將自身代碼、狀態(tài)傳送到遠程主機,而遠程主機本地執(zhí)行的方式克服了client/server結構的不足之處,因此成為分布式計算的主要發(fā)展方向之一。最初實現移動Agent的工具語言主要是Tcl、Scheme等。Java的出現改變了這一切,由于Java語言的平臺無關性、多線程及對象序列化機制等特點使之成為實現移動Agent的首選語言。目前,大部分商業(yè)性和研究性的移動Agent系統(tǒng)都是基于Java語言,例如IBM公司的Aglets和General Magic公司的Odyssey等,Java為網絡世界帶來了可靠的面向對象的程序設計方式。
討論Agent的機制和實現,并把Agent用于矩陣的分布式計算。分析表明,基于Agent的分布式計算在運行效率、容錯性以及平臺獨立性方面都有良好的表現。
1 Agent
目前,仍然沒有一個關于Agent的統(tǒng)一定義,就像什么是智能一樣。一般認為Agent是一種在分布式系統(tǒng)或協(xié)作系統(tǒng)中能持續(xù)自主發(fā)揮作用的計算機主體,即軟件智能體。它具有以下基本特征:
(1) 自治性(Autonomy);
(2) 社會能力(Social Ability);
(3) 反應能力(Reactivity);
(4) 基于目標(Goal Directed Behavior)的自發(fā)行為(Pro-activeness)。
1.1 移動Agent
移動Agent是一種獨立的計算機程序,它可以自主地在異構網絡上按照一定的規(guī)程移動,尋找合適的計算機資源、信息資源或軟件資源,利用與這些資源同處一臺主機或網絡的優(yōu)勢,處理或使用這些資源,代表用戶完成特定的任務。換句話說,它擁有一個顯著的特點,移動性(Mobility),即Agent可以從一個主機移動到另一個主機而保持其內部狀態(tài)不變,它可以攜帶數據和遠程執(zhí)行的智能指令(多數情況下就是它本身)。移動Agent除了具有Agent的特征外,還具有以下優(yōu)點:
(1) 節(jié)省帶寬。移動Agent移動到工作服務器端,并把最終數據傳回客戶機,可以節(jié)省通信帶寬;
(2) 節(jié)省時間。主要是因為移動Agent減少了網絡傳輸,在規(guī)模較大的數據庫操作中Agent能實現本地操作;
(3) 減少延遲。移動Agent移動到服務器端,直接傳回最終結果,避免了中間數據的傳輸延遲;
(4) 異步方式。一旦移動Agent從客戶端傳輸到另一臺主機上,這臺機器就可以與網絡斷開連接,直至想回收Agent或再次傳送Agent;
(5) 負載平衡。移動Agent能輕易地從一個平臺移動到另一個平臺,它們帶著自身代碼移動到目的機器上無需預先安裝就能運行,可以很方便地實現負載平衡;
(6) 動態(tài)配置。移動Agent可以感知環(huán)境的變化并做出反應,多個移動Agent可以動態(tài)地調整分布,以維持最優(yōu)配置;
盡管上述優(yōu)點沒有一個是移動Agent所惟一擁有的,但是沒有一種技術能像移動Agent一樣同時具備以上6個優(yōu)點。
1.2 基于移動Agent的分布式計算模式
移動Agent模式的關鍵特征就是網絡中的任一主機都擁有處理資源、處理器和方法的任意組合的高度靈活性。方法(在移動Agent的形式下)沒有鎖定在一臺主機上,而是在整個網絡內可共享。
移動Agent模式為分布式系統(tǒng)的設計,實現和維護都帶來了活力,該模式有如下的優(yōu)點:
(1) 減輕網絡負載。移動Agent可以將一個會話過程打包,然后將其發(fā)送到目標主機上進行本地交互。此外,當進行遠程主機的大量數據處理時,這些數據不應在網絡上傳來傳去,而應在本地處理完成;
(2) 克服網絡隱患。移動Agent技術可以從中央控制器傳送到各局部點激活,并在當地直接執(zhí)行控制器的指令;
(3) 封裝協(xié)議。數據在分布式系統(tǒng)中進行交換時,每一臺主機都有自己的網絡協(xié)議,該協(xié)議將對傳出的數據進行編碼,對傳入的數據進行解釋。移動Agent能夠直接遷移到遠程的主機,建立起一個基于私有規(guī)程的數據傳輸通道;
(4) 具有應變能力。移動Agent具備感知其運行環(huán)境,并對環(huán)境變化做出反應的能力;
(5) 具有自然異構性。網絡計算平臺往往是異構的,由于移動Agent通常獨立于計算機和傳輸層,而僅僅依賴于其運行環(huán)境,所以移動Agent提供了系統(tǒng)無縫集成的最優(yōu)條件;
(6) 異步自主運行。移動設備上的任務可以嵌入到移動Agent中去,然后將它通過網絡派遣出去,此后,移動Agent就獨立于生成它的過程,并可異步自主操作;
(7) 健壯性和容錯性。移動Agent具有對非預期狀態(tài)和事件的應變能力,這是更容易創(chuàng)建健壯和容錯性好的分布式系統(tǒng)。
由于移動Agent技術具有上述優(yōu)點,它在電子商務、并行處理、移動計算等應用領域具有很好的發(fā)展前景。
2 Aglet
Aglet是由IBM公司用純Java開發(fā)的移動Agent技術,并提供實用的平臺——Aglet Workbench,讓人們開發(fā)或執(zhí)行移動Agent系統(tǒng)。Aglet這個詞是由“Agent”和“Applet”合成。簡單地說,Aglet就是具有Agent行為的Java Applet對象。但Aglet同時傳送代碼及其狀態(tài),而Applet只傳送代碼。Aglet以線程的形式產生于一臺機器上,可隨時暫停執(zhí)行的工作,而后整個Aglet可以被分派到另一臺機器上,再重新啟動執(zhí)行任務。因為它占有的是線程,所以不會消耗太多的系統(tǒng)資源。
2.1 Aglet系統(tǒng)框架
由Aglet的系統(tǒng)框架(見圖1)可以看出Aglet的執(zhí)行分為若干階段。
圖1 Aglet的系統(tǒng)框架
首先當一個正在執(zhí)行的Aglet想要將自己遷移到遠端時,會對Aglet Runtime層發(fā)出請求;接著Aglet Runtime層將Aglet的狀態(tài)信息與代碼轉換成序列化(Serialized)的字節(jié)數組。這時如果請求成功,系統(tǒng)將字節(jié)數組傳送至ATCI(Agent Transport and Communication Interface)層處理,這一層可使用的ATP(Agent Transports and Protocol)接口。接著,系統(tǒng)會將字節(jié)數組附上相關的系統(tǒng)信息,如系統(tǒng)名稱以及Aglet的id等,并以比特流方式通過網絡傳至遠端機器,遠端機器利用ATCI層提供的ATP接口,接收到傳來的字節(jié)數組及系統(tǒng)信息;最后Aglet Runtime層對字節(jié)數組反序列化,得到Aglet的狀態(tài)信息與代碼,此時Aglet可以在遠端機器上執(zhí)行。
2.2 Aglet對象模型
Aglet系統(tǒng)提供了一個上下文環(huán)境(Context)來管理Aglet的基本行為,如創(chuàng)建(Creat)Aglet、復制(Clone)Aglet、分派(Dispatch)Aglet到遠端機器、召回(Retract)遠端的Aglet、暫停(Deactive)、喚醒(Active)Aglet,以及清除(Dispose)Aglet等,過程如圖2所示。
圖2 Aglet的對象模型
Aglet與Aglet之間的通信,是使用消息傳遞的方式來傳遞消息對象的。從安全角度考慮,Aglet并非讓外界直接存取其信息,而是通過一個代理(Proxy)提供相應的接口與外界溝通。這樣Aglet的所在位置就會透明化,也就是Aglet需要與遠端的Aglet溝通時,只在本地主機的上下文環(huán)境中產生對應遠端Aglet的代理,并與此代理溝通即可,不必直接處理網絡連接與通信的問題。
3 矩陣乘法的分布式計算實例
為驗證Agent的特性,設計一個應用Aglet計算矩陣乘法的實例。
首先,對任務進行分解,并創(chuàng)建一個主Agent;然后主Agent創(chuàng)建從Agent,并將任務分派給它們,從Agent完成計算后把結果返回給主Agent。然而主Agent等待從Agent的回答,將計算結果拼接起來組成計算結果,并將得到的結果返回給用戶。主-從模式如圖3所示。
圖3 主-從模式
為此,在局域網中兩臺機器運行,一臺為Master,另一臺為Slave。在Master端啟動Aglet平臺創(chuàng)建Matrix類,并創(chuàng)建Calculator類,發(fā)送到Slave機器上運行。Master機器將Slave機器上運行完成后的Agent回收(結果),再與本機上的運行結果合并,并顯示結果。
Master端的Matrix類的基本算法如下:
handleMessage(msg);//處理消息,根據消息選擇執(zhí)行程序
setMessage(msg);//窗口顯示消息
onCreation(obj);//設置初始化窗口
createGUI();//創(chuàng)建窗口
matrixrun();//本地計算部分
startTrip(msg);//遠程計算部分,發(fā)送Agent,即Calculator到遠端
Output(msg);//顯示最后計算結果
Slave端的Calculator類的基本算法如下:
onCreation(obj);//初始化
run();//計算并返回結果
矩陣的計算過程是Master端的Matrix類與Slave端的Calculator類之間的交互過程,其關系如圖4所示。
圖4 矩陣的計算
4 結 語
Java語言作為跨平臺網絡編程語言,其自身所具有的很多特點與實現Agent的需要恰好完全吻合,使其成為設計移動Agent系統(tǒng)的首選語言。與基于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]朱聾良,邱瑜.移動代理系統(tǒng)綜述[J].計算機研究與發(fā)展,2001,38(1):16-25.
[5]朱福喜.J2EE經典實例詳解[M].北京:人民郵電出版社,2003.
[6]朱福喜,傅建明,唐曉軍.Java項目設計與開發(fā)范例[M].北京:電子工業(yè)出版社,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開發(fā)平臺[J].合肥工業(yè)大學學報:自然科學版,2001,24(5):907-912.