摘 要:隨著網絡和移動智能體技術的不斷發展,如何在網絡資源中找到自己需要的服務成為一個熱門話題。描述以一種移動的多智能體系統,并且在進行系統底層通信、智能體在網絡環境移動、智能體與服務器之間通信應用CORBA。服務器接受任務,派遣服務請求智能體在網絡環境中尋找能為自己提供服務的服務器,完成向服務器預訂服務任務。給出系統接受任務后派遣請求智能體的工作流程及服務器接受智能體訪問的流程。
關鍵詞:客戶/服務器;多智能體;多智能體系統;移動智能體;CORBA
中圖分類號:TP393 文獻標識碼:B
文章編號:1004-373X(2008)06-111-03
CORBA-based Framework for Mobile Multi-Agent
HUANG Tao,WANG Chunmao,HU Xiaohui
(School of Electronic and Information Engineering,Lanzhou Jiaotong University,Lanzhou,730070,China)
Abstract:As the development of network and mobile agent technology,how to find the needed service from Internet resources has become a new problem.In this article we describe a mobile multi-agent system which is based on CORBA for system basic communication,agent moving and communication between agent and server.In the system,servers accept task,send service requests agent in Internet to find the servers which can offer the serviceand when agents find servers,agent will booking the server for the service.We give workflow about sendingrequest-agent and receiving visited agent.
Keywords:client/server;multi-agent;MAS;mobile agent;CORBA
通用對象請求代理體系結構The Common Object Request Broker Architecture(CORBA)是由對象管理組織(OMG)為解決分布式環境中,硬件和軟件系統的互聯而提出的一種解決方案;包括 ORB(對象請求代理)、對象服務、公共設施、域接口和應用程序組成,其核心部分是ORB。ORB提供了一種跨平臺的通訊機制,對象可以透明的發出請求和接收響應\\[1\\]。
移動Agent是一個能在異構網絡中自主地從一臺主機遷移到另一臺主機,并可以與其他Agent或資源進行交互的程序,他是Agent技術與分布式計算技術的混合體\\[2\\]。本文描述的是移動多Agent系統在接受用戶服務尋求命令后,通過互聯網尋找能夠為自己提供服務的最有利服務器,在最后向最有利服務器訂購服務。這里用Java開發系統,在底層使用CORBA進行Agent與系統的通信及Agent在網絡中的移動。由于底層使用的CORBA對系統是透明的,所有的上層派遣Agent的信息(目的、信念、愿望等)都是作為調用CORBA對象的參數,CORBA對象可以進入ORB通道,并在通過ORB通道移動到目的地服務器端。服務器端接待到訪的以Agent信息為參數的CORBA對象時,通過與CORBA的接口將其中的Agent信息抽取,重新構建出由自己服務器實現語言的對象。
1 CORBA的體系結構
CORBA規范充分利用現今軟件技術發展的最新成果, 在基于網絡的分布式應用環境下實現應用軟件的集成,是面向對象的軟件在分布、異構環境下實現可重用、可移植和互操作。其特點總結為以下幾個方面\\[3\\]:
(1) 引入中間件(MiddleWare)作為事務代理,完成客戶機(Client)向服務對象(Server)提出業務請求(引入中間件概念后的分布式計算模式);
(2) 實現客戶與服務對象的完全分開,客戶不再需要了解服務對象的實現過程以及具體位置;
(3) 提供軟總線機制,使得在任何環境下、采用任何語言開發的軟件只要符合接口規范的定義,均能夠集成到分布式系統中;
(4) CORBA規范軟件系統采用面向對象的軟件實現方法開發應用系統,實現對對象內部細節的完整封裝,保留對象方法的對外接口定義。
在以上特點中,最突出的是中間件的引入,在CORBA系統中成為對象請求代理ORB(Object Request Broker)和采用面向對象的開發模式。圖1解釋Client(客戶)端與Object Implementation(對象服務實現)端的所有請求與服務的方法。
在圖1中Client端可以通過Dynamic Invocation接口或OMG組織定義的IDL stub(接口定義語言)向Object Implementation(對象服務器端發出服務請求)。Client端也能夠直接與ORB就一些功能進行交互。借助OMG組織的IDL框架或dynamic skeleton(動態框架)接受來自Client端的服務請求。Object Implementation 端立即可以調用Object Adapter(對象適配器)也可以通過ORB來對Client端的請求進行服務也可以放在以后其他時間進行服務。通過使用IDL定義的對象接口框架CORBA可以獨立于具體的程序語言。目前OMG公布的CORBA能支持多種語言,同時也可以在不同的系統上運行。

2 基于CORBA的多Agent框架
2.1 移動多Agent系統實現
基于CORBA的移動Agent結構如圖2所示,用戶通過用戶接口與系統做信息交流\\[2\\]。用戶通過用戶接口把本次工作任務及預期要達到的目的通知工作任務模塊,接下來就由任務模塊根據用戶提交的任務及結果期望參考自己已有的知識和當前的網絡環境情況來完成本次任務,并把結果反饋各用戶。決策庫里存儲著先前人們對于這方面問題的處理經驗及策略,以供功能模塊參考該庫里相關問題的處理策略來解決本次任務。在功能模塊得到了決策庫里以前與本次任務類型相似的處理經驗后,就可以決定本次任務解決的具體辦法:派遣單Agent到指定服務器;派遣多請求Agent到網絡上去查找相關服務器,同時打開自己的服務器,接受相關沒有訪問的服務器派遣Agent過來訪問;
單純的打開自己服務器,接受請求服務的服務器發過來的請求Agent。
在得到本次任務的具體解決辦法后,接下來系統就根據解決辦法來派遣請求Agent、接待外來請求Agent的訪問并為其提供相應的服務,并重點對派遣請求Agent和檢測控制系統進行介紹。
2.2 派遣服務請求Agent
功能模塊訪問知識庫,知識是對于各種問題在求解時對得到的結果進行評價的函數,評價函數是用戶事先根據自己所需的服務制定的,對于比較關心的服務特征由服務器提供的相應服務的評價函數。服務結果評價函數是用來作為構造請求Agent的一部分,當用戶請求Agent被派遣到目的地,在得到目的地服務器相關服務代價參數時對該服務進行評價。服務評價函數根據服務的類型不同進行分類存儲在知識庫里。在得到任務的評價函數后,功能模塊就會查找地址庫里的相關任務以前的處理地址。地址庫里存儲著以前成功提供過服務的地址,存儲的服務器地址信息包括:服務器提供服務種類、提供滿意服務的概率、服務器的網絡速度、服務代價與市場上提供的同類服務的代價的比率、服務器聯通的概率。若從決策庫得到的本次任務的處理決策是派遣多個任務請求Agent時,功能模塊除了會從地址模塊得到部分地址,同時,功能模塊還會隨機地選擇一些以前并未在地址庫中出現的網絡地址派遣Agent。在系統完成本次任務后,會用根據這些隨機產生的網絡地址在本次任務解決中的貢獻狀況,對地址庫進行更新;同時,功能模塊還會根據從地址庫中選擇的地址服務器,地址服務器在本次人物求解中的貢獻狀況,對該地址服務器的相關信息進行更新。
當系統模塊完成對構造派遣Agent所需相關信息的收集工作,就會將得到的Agent信息(目標、信念、意愿)構造成基本的Agent信息包準備發送到客戶端,并在系統管理模塊注冊該Agent。系統管理模塊會記錄本次任務求解過程中功能模塊排出的所有Agent的工作進展情況。當派遣的請求Agent與目的地服務器進行成功協商后返回系統,功能模塊會刪除系統管理模塊中關于該Agent的記錄信息。
客戶端得到來自功能模塊的Agent信息包,將信息包里的Agent信息讀出,構造成完整具有信息特征的Agent。構造出具有完整信息特征的Agent對象后,在發送Agent對象到目標服務器尋求服務前,客戶端會利用本地址特有的信息(如網絡IP)為本網站發送的Agent對象注明身份(如圖2所示中的Agent-A)。在得到Agent信息包里信息后,客戶端會使用IBM的Aglet\\[3\\]技術構造出運行的Agent對象。Aglet是IBM公司提供的一種用Java語言編寫的移動Agent應用平臺,用戶可以用Aglet平臺作為基礎構建自己移動Agent平臺。
由于Aglet平臺是用Java語言開發的平臺,Aglet平臺使用的是JKQML(Java-based Knowledge Query Manipulation Language),必須由JKQML-CORBA接口實現。Agent對象進入JKQML-CORBA接口,用來把自身的信息代碼編譯成符合CORBA規范的形式,并作為參數在ORB通道中傳輸。當Agent對象以參數的形式構造CORBA對象后,這種帶有Agent特性的CORBA對象就可以直接進入ORB,并通過ORB到達目的地。當CORBA對象進入網絡,就可以通過網絡來找到自己的目標地址,在ORB中移動的CORBA對象到達自己的目標服務器地址后,就可以通服務器進行自己任務的協商,以得到服務器對于自己所期望的相關服務。

2.3 接待外來服務請求Agent對象
當以Agent信息作為參數的CORBA對象通過ORB來到目標服務器時,服務器就會接待到訪的請求服務Agent,如圖2所示的Agent-B,Agent-C,Agent-D。訪問CORBA-Agent對象通過服務器的JKQML-CORBA接口向服務器表明自己的身份(代表的服務器、尋求的服務)。由于Agent對象是在以CORBA的參數形式在ORB傳輸,因此,當CORBA對象到達目的地服務器時可以直接通過JKQML-CORBA進行初步交流。在CORBA-Agent對象通過JKQML-CORBA接口向服務器言明本次的目的后,服務器就會根據CORBA-Agent對象尋求的請求服務類別,判斷本服務器是否能夠提供此類服務來決定是否接受該CORBA-Agent對象的訪問:當服務器能夠提供CORBA-Agent所尋求的服務請求時,就會接受CORBA-Agent的訪問;當服務器不能提供Agent所尋求的服務請求時就會拒絕該CORBA-Agent的協商。
3 檢測與控制系統
由于在多移動Agent系統中,系統不但要向外派遣移動Agent對象在Internet上尋找能夠提供自己所需服務的服務器,同時,也接待外來請求本網站服務的移動Agent對象。在接待外來Agent對象并與其協商進行服務時安全問題成為研究人員關注的焦點。服務器在與外來Agent進行協商及對其進行服務時,應盡量避免由于少數Agent對象對服務器資源的過度消耗而使服務器無法對其他應用程序進行響應,導致系統死機。本系統中的系統監控模塊的功能是保護系統資源,防止外來Agent對象對系統資源的過度占用。如何保護服務器免受攻擊、記錄Agent對象對服務器資源的消耗是當前移動Agent研究的熱點問題。要解決這個問題需要對服務器系統進行監控,目前用Java語言開發的系統監控器產品還相對較少,如SOMA,J-SEAL等,但是由于是針對于不同應用的,所以其代碼較為復雜,造成大量無用代碼消耗系統資源。本系統中采用JRes來對系統進行檢測控制\\[4\\]。當系統中的一個外來服務請求Agent對象通過系統對其身份的鑒定,并決定與其進行進一步的協商服務時,系統就會應用JRes創建一個線程負責與這個Agent進行協商,并對性線程對資源的占用情況進行實時檢測,防止給線程對系統資源的過量占用,而影響服務器進行其他工作。在JRes接口中有異常處理和資源管理2個Java接口。除初始化函數initialize() 外,所有資源管理類里的其他函數完成線程的相應功能并且每一個函數都擁有函數副本來管理線程的相應資源。
Initialize(pointer):初始化一個子系統資源記錄,記錄所有對外來請求Agent進行服務的線程對系統資源可占用的最大上限。這樣做的目的是僅有一個指針能夠管理子系統資源;SetThreadRegistrationCallback(pointer,tCallback):對象通過類里提供的ThreadRegistrationCallback接口管理子系統資源。這個函數的作用是,當有新的外來Agent進行協商的Java線程t創建時 tCallback.ThreadRegistrationNotification(t) 將被調用。把新建t線程及為該線程指定的系統資源占用的上限在pointer子系統資源記錄中注冊,供以后判斷是否占用系統資源過度時參考。這個函數調用與setLimit(pointer,resType,t,limit,oCallback)調用連在一體進行。這個函數的功能是為線程t指定對有限資源resType占用的最大限度limit;resourceUseExceeded(resType,t,resValue):在該線程t對這種resType占用超過設定的限度limit時,該函數就會被oCallback調用。參數resValue通過回調提供關于資源的當前消耗量;clearLimit(pointer,resType,t):當線程t與其協商的外來服務請求Agent對象完成本次協商后,系統終止該線程t,或由于該線程在與其寫上的Agent進行協商時,對于子系統資源的占用量超過系統指定的上限時,系統決定終止該線程t時,清除線程t在子系統資源對象pointer下對resType資源的使用限定;getResourceUsage(resType,t):向管理資源子系統詢問關于線程t對resType資源的實際使用情況;getResourceLimit(resType,t):用來查詢線程t對resType系統資源的占用上限。
在資源管理策略下,解決對外來Agent服務的線程t占用過多的系統資源時可以拋出一個ResourceOveruseException異常。在構建線程t對各類系統資源詳細的占用上限問題時爭論的焦點是允許上限值和實際應用值之間的的差異。如果將允許占用上限設置的過高,那么會降低服務器最多可以同時接待Agent訪問的數目;若過低時會影響t與Agent之間的正常協商,降低服務器接待Agent的效率。應用程序占用過多系統資源的信息可以從捕獲的異常信息中得到。對于內存和網絡資源的限制值和實際使用值的描述以字節為單位進行,而對于CPU使用時間的描述以毫秒為單位進行。
4 結 語
本系統采用的CORBA體系不是某個專有產品,而是由OMG組織定義,能支持多種語言,從而建立在其基礎上的多Agent系統也可以支持多種主要編程語言,編程人員可以使用自己熟悉的編程語言使用上述的框架形式,可以實現和其他公司的Agent平臺進行交流。其次,由于在本框架中加入感應模塊可以實時監控系統,使得在Agent系統已經運行的情況下,用戶再運行別的軟件是不會因為Agent平臺已經運行而感覺到系統的運行速度降低,從而是一種有效的移動多Agent框架。
參考文獻
[1]Vinoski S.CORBA:Integrating Diverse Applications within Distributed Heterogeneous Environments\\[J\\].Communications Magazine,IEEE,1997,35(2):46-55.
[2]陶先平,呂建.一種移動Agent 結構化遷移機制的設計和實現\\[J\\].軟件學報,2000,11(7):918-923.
[3]劉錦德.一個實用的移動Agent 系統(Aglet)的綜述\\[J\\].計算機應用,2001(8):1-3,9.
[4]Czajkowski G,Von Eicken T.JRes:A Resource Accounting interface for Java\\[J\\].Proceedings of the 13th ACM SIGPLAN Conference on Object-oriented Programming,Systems,Languages,and Applications.1998:21-35.
作者簡介
黃濤男,1979年出生,河南淮濱人,碩士。主要從事人工智能、多Agnet方面的研究工作。