摘 要:隨著網(wǎng)絡(luò)和移動智能體技術(shù)的不斷發(fā)展,如何在網(wǎng)絡(luò)資源中找到自己需要的服務(wù)成為一個熱門話題。描述以一種移動的多智能體系統(tǒng),并且在進(jìn)行系統(tǒng)底層通信、智能體在網(wǎng)絡(luò)環(huán)境移動、智能體與服務(wù)器之間通信應(yīng)用CORBA。服務(wù)器接受任務(wù),派遣服務(wù)請求智能體在網(wǎng)絡(luò)環(huán)境中尋找能為自己提供服務(wù)的服務(wù)器,完成向服務(wù)器預(yù)訂服務(wù)任務(wù)。給出系統(tǒng)接受任務(wù)后派遣請求智能體的工作流程及服務(wù)器接受智能體訪問的流程。
關(guān)鍵詞:客戶/服務(wù)器;多智能體;多智能體系統(tǒng);移動智能體;CORBA
中圖分類號:TP393 文獻(xiàn)標(biāo)識碼: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
通用對象請求代理體系結(jié)構(gòu)The Common Object Request Broker Architecture(CORBA)是由對象管理組織(OMG)為解決分布式環(huán)境中,硬件和軟件系統(tǒng)的互聯(lián)而提出的一種解決方案;包括 ORB(對象請求代理)、對象服務(wù)、公共設(shè)施、域接口和應(yīng)用程序組成,其核心部分是ORB。ORB提供了一種跨平臺的通訊機制,對象可以透明的發(fā)出請求和接收響應(yīng)\\[1\\]。
移動Agent是一個能在異構(gòu)網(wǎng)絡(luò)中自主地從一臺主機遷移到另一臺主機,并可以與其他Agent或資源進(jìn)行交互的程序,他是Agent技術(shù)與分布式計算技術(shù)的混合體\\[2\\]。本文描述的是移動多Agent系統(tǒng)在接受用戶服務(wù)尋求命令后,通過互聯(lián)網(wǎng)尋找能夠為自己提供服務(wù)的最有利服務(wù)器,在最后向最有利服務(wù)器訂購服務(wù)。這里用Java開發(fā)系統(tǒng),在底層使用CORBA進(jìn)行Agent與系統(tǒng)的通信及Agent在網(wǎng)絡(luò)中的移動。由于底層使用的CORBA對系統(tǒng)是透明的,所有的上層派遣Agent的信息(目的、信念、愿望等)都是作為調(diào)用CORBA對象的參數(shù),CORBA對象可以進(jìn)入ORB通道,并在通過ORB通道移動到目的地服務(wù)器端。服務(wù)器端接待到訪的以Agent信息為參數(shù)的CORBA對象時,通過與CORBA的接口將其中的Agent信息抽取,重新構(gòu)建出由自己服務(wù)器實現(xiàn)語言的對象。
1 CORBA的體系結(jié)構(gòu)
CORBA規(guī)范充分利用現(xiàn)今軟件技術(shù)發(fā)展的最新成果, 在基于網(wǎng)絡(luò)的分布式應(yīng)用環(huán)境下實現(xiàn)應(yīng)用軟件的集成,是面向?qū)ο蟮能浖诜植?、異?gòu)環(huán)境下實現(xiàn)可重用、可移植和互操作。其特點總結(jié)為以下幾個方面\\[3\\]:
(1) 引入中間件(MiddleWare)作為事務(wù)代理,完成客戶機(Client)向服務(wù)對象(Server)提出業(yè)務(wù)請求(引入中間件概念后的分布式計算模式);
(2) 實現(xiàn)客戶與服務(wù)對象的完全分開,客戶不再需要了解服務(wù)對象的實現(xiàn)過程以及具體位置;
(3) 提供軟總線機制,使得在任何環(huán)境下、采用任何語言開發(fā)的軟件只要符合接口規(guī)范的定義,均能夠集成到分布式系統(tǒng)中;
(4) CORBA規(guī)范軟件系統(tǒng)采用面向?qū)ο蟮能浖崿F(xiàn)方法開發(fā)應(yīng)用系統(tǒng),實現(xiàn)對對象內(nèi)部細(xì)節(jié)的完整封裝,保留對象方法的對外接口定義。
在以上特點中,最突出的是中間件的引入,在CORBA系統(tǒng)中成為對象請求代理ORB(Object Request Broker)和采用面向?qū)ο蟮拈_發(fā)模式。圖1解釋Client(客戶)端與Object Implementation(對象服務(wù)實現(xiàn))端的所有請求與服務(wù)的方法。
在圖1中Client端可以通過Dynamic Invocation接口或OMG組織定義的IDL stub(接口定義語言)向Object Implementation(對象服務(wù)器端發(fā)出服務(wù)請求)。Client端也能夠直接與ORB就一些功能進(jìn)行交互。借助OMG組織的IDL框架或dynamic skeleton(動態(tài)框架)接受來自Client端的服務(wù)請求。Object Implementation 端立即可以調(diào)用Object Adapter(對象適配器)也可以通過ORB來對Client端的請求進(jìn)行服務(wù)也可以放在以后其他時間進(jìn)行服務(wù)。通過使用IDL定義的對象接口框架CORBA可以獨立于具體的程序語言。目前OMG公布的CORBA能支持多種語言,同時也可以在不同的系統(tǒng)上運行。
2 基于CORBA的多Agent框架
2.1 移動多Agent系統(tǒng)實現(xiàn)
基于CORBA的移動Agent結(jié)構(gòu)如圖2所示,用戶通過用戶接口與系統(tǒng)做信息交流\\[2\\]。用戶通過用戶接口把本次工作任務(wù)及預(yù)期要達(dá)到的目的通知工作任務(wù)模塊,接下來就由任務(wù)模塊根據(jù)用戶提交的任務(wù)及結(jié)果期望參考自己已有的知識和當(dāng)前的網(wǎng)絡(luò)環(huán)境情況來完成本次任務(wù),并把結(jié)果反饋各用戶。決策庫里存儲著先前人們對于這方面問題的處理經(jīng)驗及策略,以供功能模塊參考該庫里相關(guān)問題的處理策略來解決本次任務(wù)。在功能模塊得到了決策庫里以前與本次任務(wù)類型相似的處理經(jīng)驗后,就可以決定本次任務(wù)解決的具體辦法:派遣單Agent到指定服務(wù)器;派遣多請求Agent到網(wǎng)絡(luò)上去查找相關(guān)服務(wù)器,同時打開自己的服務(wù)器,接受相關(guān)沒有訪問的服務(wù)器派遣Agent過來訪問;
單純的打開自己服務(wù)器,接受請求服務(wù)的服務(wù)器發(fā)過來的請求Agent。
在得到本次任務(wù)的具體解決辦法后,接下來系統(tǒng)就根據(jù)解決辦法來派遣請求Agent、接待外來請求Agent的訪問并為其提供相應(yīng)的服務(wù),并重點對派遣請求Agent和檢測控制系統(tǒng)進(jìn)行介紹。
2.2 派遣服務(wù)請求Agent
功能模塊訪問知識庫,知識是對于各種問題在求解時對得到的結(jié)果進(jìn)行評價的函數(shù),評價函數(shù)是用戶事先根據(jù)自己所需的服務(wù)制定的,對于比較關(guān)心的服務(wù)特征由服務(wù)器提供的相應(yīng)服務(wù)的評價函數(shù)。服務(wù)結(jié)果評價函數(shù)是用來作為構(gòu)造請求Agent的一部分,當(dāng)用戶請求Agent被派遣到目的地,在得到目的地服務(wù)器相關(guān)服務(wù)代價參數(shù)時對該服務(wù)進(jìn)行評價。服務(wù)評價函數(shù)根據(jù)服務(wù)的類型不同進(jìn)行分類存儲在知識庫里。在得到任務(wù)的評價函數(shù)后,功能模塊就會查找地址庫里的相關(guān)任務(wù)以前的處理地址。地址庫里存儲著以前成功提供過服務(wù)的地址,存儲的服務(wù)器地址信息包括:服務(wù)器提供服務(wù)種類、提供滿意服務(wù)的概率、服務(wù)器的網(wǎng)絡(luò)速度、服務(wù)代價與市場上提供的同類服務(wù)的代價的比率、服務(wù)器聯(lián)通的概率。若從決策庫得到的本次任務(wù)的處理決策是派遣多個任務(wù)請求Agent時,功能模塊除了會從地址模塊得到部分地址,同時,功能模塊還會隨機地選擇一些以前并未在地址庫中出現(xiàn)的網(wǎng)絡(luò)地址派遣Agent。在系統(tǒng)完成本次任務(wù)后,會用根據(jù)這些隨機產(chǎn)生的網(wǎng)絡(luò)地址在本次任務(wù)解決中的貢獻(xiàn)狀況,對地址庫進(jìn)行更新;同時,功能模塊還會根據(jù)從地址庫中選擇的地址服務(wù)器,地址服務(wù)器在本次人物求解中的貢獻(xiàn)狀況,對該地址服務(wù)器的相關(guān)信息進(jìn)行更新。
當(dāng)系統(tǒng)模塊完成對構(gòu)造派遣Agent所需相關(guān)信息的收集工作,就會將得到的Agent信息(目標(biāo)、信念、意愿)構(gòu)造成基本的Agent信息包準(zhǔn)備發(fā)送到客戶端,并在系統(tǒng)管理模塊注冊該Agent。系統(tǒng)管理模塊會記錄本次任務(wù)求解過程中功能模塊排出的所有Agent的工作進(jìn)展情況。當(dāng)派遣的請求Agent與目的地服務(wù)器進(jìn)行成功協(xié)商后返回系統(tǒng),功能模塊會刪除系統(tǒng)管理模塊中關(guān)于該Agent的記錄信息。
客戶端得到來自功能模塊的Agent信息包,將信息包里的Agent信息讀出,構(gòu)造成完整具有信息特征的Agent。構(gòu)造出具有完整信息特征的Agent對象后,在發(fā)送Agent對象到目標(biāo)服務(wù)器尋求服務(wù)前,客戶端會利用本地址特有的信息(如網(wǎng)絡(luò)IP)為本網(wǎng)站發(fā)送的Agent對象注明身份(如圖2所示中的Agent-A)。在得到Agent信息包里信息后,客戶端會使用IBM的Aglet\\[3\\]技術(shù)構(gòu)造出運行的Agent對象。Aglet是IBM公司提供的一種用Java語言編寫的移動Agent應(yīng)用平臺,用戶可以用Aglet平臺作為基礎(chǔ)構(gòu)建自己移動Agent平臺。
由于Aglet平臺是用Java語言開發(fā)的平臺,Aglet平臺使用的是JKQML(Java-based Knowledge Query Manipulation Language),必須由JKQML-CORBA接口實現(xiàn)。Agent對象進(jìn)入JKQML-CORBA接口,用來把自身的信息代碼編譯成符合CORBA規(guī)范的形式,并作為參數(shù)在ORB通道中傳輸。當(dāng)Agent對象以參數(shù)的形式構(gòu)造CORBA對象后,這種帶有Agent特性的CORBA對象就可以直接進(jìn)入ORB,并通過ORB到達(dá)目的地。當(dāng)CORBA對象進(jìn)入網(wǎng)絡(luò),就可以通過網(wǎng)絡(luò)來找到自己的目標(biāo)地址,在ORB中移動的CORBA對象到達(dá)自己的目標(biāo)服務(wù)器地址后,就可以通服務(wù)器進(jìn)行自己任務(wù)的協(xié)商,以得到服務(wù)器對于自己所期望的相關(guān)服務(wù)。
2.3 接待外來服務(wù)請求Agent對象
當(dāng)以Agent信息作為參數(shù)的CORBA對象通過ORB來到目標(biāo)服務(wù)器時,服務(wù)器就會接待到訪的請求服務(wù)Agent,如圖2所示的Agent-B,Agent-C,Agent-D。訪問CORBA-Agent對象通過服務(wù)器的JKQML-CORBA接口向服務(wù)器表明自己的身份(代表的服務(wù)器、尋求的服務(wù))。由于Agent對象是在以CORBA的參數(shù)形式在ORB傳輸,因此,當(dāng)CORBA對象到達(dá)目的地服務(wù)器時可以直接通過JKQML-CORBA進(jìn)行初步交流。在CORBA-Agent對象通過JKQML-CORBA接口向服務(wù)器言明本次的目的后,服務(wù)器就會根據(jù)CORBA-Agent對象尋求的請求服務(wù)類別,判斷本服務(wù)器是否能夠提供此類服務(wù)來決定是否接受該CORBA-Agent對象的訪問:當(dāng)服務(wù)器能夠提供CORBA-Agent所尋求的服務(wù)請求時,就會接受CORBA-Agent的訪問;當(dāng)服務(wù)器不能提供Agent所尋求的服務(wù)請求時就會拒絕該CORBA-Agent的協(xié)商。
3 檢測與控制系統(tǒng)
由于在多移動Agent系統(tǒng)中,系統(tǒng)不但要向外派遣移動Agent對象在Internet上尋找能夠提供自己所需服務(wù)的服務(wù)器,同時,也接待外來請求本網(wǎng)站服務(wù)的移動Agent對象。在接待外來Agent對象并與其協(xié)商進(jìn)行服務(wù)時安全問題成為研究人員關(guān)注的焦點。服務(wù)器在與外來Agent進(jìn)行協(xié)商及對其進(jìn)行服務(wù)時,應(yīng)盡量避免由于少數(shù)Agent對象對服務(wù)器資源的過度消耗而使服務(wù)器無法對其他應(yīng)用程序進(jìn)行響應(yīng),導(dǎo)致系統(tǒng)死機。本系統(tǒng)中的系統(tǒng)監(jiān)控模塊的功能是保護(hù)系統(tǒng)資源,防止外來Agent對象對系統(tǒng)資源的過度占用。如何保護(hù)服務(wù)器免受攻擊、記錄Agent對象對服務(wù)器資源的消耗是當(dāng)前移動Agent研究的熱點問題。要解決這個問題需要對服務(wù)器系統(tǒng)進(jìn)行監(jiān)控,目前用Java語言開發(fā)的系統(tǒng)監(jiān)控器產(chǎn)品還相對較少,如SOMA,J-SEAL等,但是由于是針對于不同應(yīng)用的,所以其代碼較為復(fù)雜,造成大量無用代碼消耗系統(tǒng)資源。本系統(tǒng)中采用JRes來對系統(tǒng)進(jìn)行檢測控制\\[4\\]。當(dāng)系統(tǒng)中的一個外來服務(wù)請求Agent對象通過系統(tǒng)對其身份的鑒定,并決定與其進(jìn)行進(jìn)一步的協(xié)商服務(wù)時,系統(tǒng)就會應(yīng)用JRes創(chuàng)建一個線程負(fù)責(zé)與這個Agent進(jìn)行協(xié)商,并對性線程對資源的占用情況進(jìn)行實時檢測,防止給線程對系統(tǒng)資源的過量占用,而影響服務(wù)器進(jìn)行其他工作。在JRes接口中有異常處理和資源管理2個Java接口。除初始化函數(shù)initialize() 外,所有資源管理類里的其他函數(shù)完成線程的相應(yīng)功能并且每一個函數(shù)都擁有函數(shù)副本來管理線程的相應(yīng)資源。
Initialize(pointer):初始化一個子系統(tǒng)資源記錄,記錄所有對外來請求Agent進(jìn)行服務(wù)的線程對系統(tǒng)資源可占用的最大上限。這樣做的目的是僅有一個指針能夠管理子系統(tǒng)資源;SetThreadRegistrationCallback(pointer,tCallback):對象通過類里提供的ThreadRegistrationCallback接口管理子系統(tǒng)資源。這個函數(shù)的作用是,當(dāng)有新的外來Agent進(jìn)行協(xié)商的Java線程t創(chuàng)建時 tCallback.ThreadRegistrationNotification(t) 將被調(diào)用。把新建t線程及為該線程指定的系統(tǒng)資源占用的上限在pointer子系統(tǒng)資源記錄中注冊,供以后判斷是否占用系統(tǒng)資源過度時參考。這個函數(shù)調(diào)用與setLimit(pointer,resType,t,limit,oCallback)調(diào)用連在一體進(jìn)行。這個函數(shù)的功能是為線程t指定對有限資源resType占用的最大限度limit;resourceUseExceeded(resType,t,resValue):在該線程t對這種resType占用超過設(shè)定的限度limit時,該函數(shù)就會被oCallback調(diào)用。參數(shù)resValue通過回調(diào)提供關(guān)于資源的當(dāng)前消耗量;clearLimit(pointer,resType,t):當(dāng)線程t與其協(xié)商的外來服務(wù)請求Agent對象完成本次協(xié)商后,系統(tǒng)終止該線程t,或由于該線程在與其寫上的Agent進(jìn)行協(xié)商時,對于子系統(tǒng)資源的占用量超過系統(tǒng)指定的上限時,系統(tǒng)決定終止該線程t時,清除線程t在子系統(tǒng)資源對象pointer下對resType資源的使用限定;getResourceUsage(resType,t):向管理資源子系統(tǒng)詢問關(guān)于線程t對resType資源的實際使用情況;getResourceLimit(resType,t):用來查詢線程t對resType系統(tǒng)資源的占用上限。
在資源管理策略下,解決對外來Agent服務(wù)的線程t占用過多的系統(tǒng)資源時可以拋出一個ResourceOveruseException異常。在構(gòu)建線程t對各類系統(tǒng)資源詳細(xì)的占用上限問題時爭論的焦點是允許上限值和實際應(yīng)用值之間的的差異。如果將允許占用上限設(shè)置的過高,那么會降低服務(wù)器最多可以同時接待Agent訪問的數(shù)目;若過低時會影響t與Agent之間的正常協(xié)商,降低服務(wù)器接待Agent的效率。應(yīng)用程序占用過多系統(tǒng)資源的信息可以從捕獲的異常信息中得到。對于內(nèi)存和網(wǎng)絡(luò)資源的限制值和實際使用值的描述以字節(jié)為單位進(jìn)行,而對于CPU使用時間的描述以毫秒為單位進(jìn)行。
4 結(jié) 語
本系統(tǒng)采用的CORBA體系不是某個專有產(chǎn)品,而是由OMG組織定義,能支持多種語言,從而建立在其基礎(chǔ)上的多Agent系統(tǒng)也可以支持多種主要編程語言,編程人員可以使用自己熟悉的編程語言使用上述的框架形式,可以實現(xiàn)和其他公司的Agent平臺進(jìn)行交流。其次,由于在本框架中加入感應(yīng)模塊可以實時監(jiān)控系統(tǒng),使得在Agent系統(tǒng)已經(jīng)運行的情況下,用戶再運行別的軟件是不會因為Agent平臺已經(jīng)運行而感覺到系統(tǒng)的運行速度降低,從而是一種有效的移動多Agent框架。
參考文獻(xiàn)
[1]Vinoski S.CORBA:Integrating Diverse Applications within Distributed Heterogeneous Environments\\[J\\].Communications Magazine,IEEE,1997,35(2):46-55.
[2]陶先平,呂建.一種移動Agent 結(jié)構(gòu)化遷移機制的設(shè)計和實現(xiàn)\\[J\\].軟件學(xué)報,2000,11(7):918-923.
[3]劉錦德.一個實用的移動Agent 系統(tǒng)(Aglet)的綜述\\[J\\].計算機應(yīng)用,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方面的研究工作。