返回列表 回复 发帖

移动Agent实现技术

文章摘要:
移动Agent可以从一个MAE移动到另一个MAE,在MAE中执行,并通过Agent通信语言(ACL)与其它MA通信或访问MAE提供的服务。移动Agent的主要作用是完成用户指定的任务,需要实现移动语义(即目标主机或路由的选择)、安全控制(保护自身)、与外界(MA服务环境以及其他Agent)的通信等功能。  
1 移动Agent的定义
  对于移动Agent的定义,不同的文献或应用系统各不相同。例如,文献[13]认为,MA是代码、数据和执行环境的封装,它可以在执行过程中在计算机网络中自治、有目的地迁移,并且能响应外部事件,在迁移过程中能保持其状态的一致性。White[23]认为移动Agent是具有移动性的Agent,Lange[27]等人认为移动Agent是一个代替人或其它程序执行某种任务的程序,它在复杂的网络系统中能自主地从一台主机移动到另一台主机,该程序能自主决定何时、何地移动。
  综合移动Agent的各种定义,我们给出MA的定义如下:移动Agent是具有移动特性(Mobility)的智能Agent,它可以自主地在网络上从一台主机移动到另一台主机,并代表用户完成指定的任务,如检索、过滤和收集信息,甚至可以代表用户进行商业活动。MA技术是分布式技术与Agent技术相结合的产物,它除了具有智能Agent的最基本特性-反应行、自治性、导向目标性和针对环境性外,还具有移动性。
2 移动Agent系统的组成
  不同的移动Agent系统的体系结构各不相同,但几乎所有的移动Agent系统都包括如下两部分: Agent和MA环境(MAE或称MA服务器、MA主机(MAH)、MA服务设施、Place、Context、Location)[28,29,30,31]。如图8所示。
<img src="http://www.china-pub.com/computers/eMook/1391/image001.gif" width=484 height=303 border=0>
MA环境为Agent提供安全、正确的运行环境,实现MA的移动、MA执行状态的建立、MA的启动、实施MA的约束机制、容错策略、安全控制、通信机制,并提供基本服务模块,如:事件服务(Event Service)、黄叶服务(Yellow Page Service)、事物服务(Transaction Service)和域名服务(DNS)等。一台主机上可以有一个或多个MAE。通常情况下,一个MAE只位于一台主机上,但当主机之间是以高速、持续、稳定可靠的网络连接时,一个MAE可以跨越多台主机而不影响整个系统的运行效率。
  Agent可以分为移动Agent(也称用户Agent,User Agent[mole])和服务Agent(也称系统Agent,System Agent或静态Agent,Static Agent)。
  移动Agent可以从一个MAE移动到另一个MAE,在MAE中执行,并通过Agent通信语言(ACL)与其它MA通信或访问MAE提供的服务。移动Agent的主要作用是完成用户指定的任务,需要实现移动语义(即目标主机或路由的选择)、安全控制(保护自身)、与外界(MA服务环境以及其他Agent)的通信等功能。
  服务Agent不具有移动的能力,其主要功能是向本地的Agent或来访的Agent提供服务。通常,一个MAE上驻有多个服务Agent,分别提供不同的服务,如文件服务、黄叶服务等系统级服务,定票服务、数据库服务等应用级服务。由于系统Agent是不移动的,并且只能由它所在MAE的管理员启动和管理,因此保证服务Agent不会是"恶意的"。来访的移动Agent不能直接访问系统资源,只能通过服务Agent提供的接口访问"受控制的(Controlled)"、"安全的(Secure)"的服务,这可以避免恶意的Agent对主机的攻击,是移动Agent系统经常采用的安全策略。另外,采用Java提供的C语言接口(C-inter-face),服务Agent可以提供和其他软件(Legacy Software)的交互接口,很容易将非Agent系统集成到Agent系统中。
3 移动Agent系统的实现技术
  移动Agent技术涉及到计算机网络、分布式系统、通信技术、操作系统、计算机语言以及人工智能等诸多领域[32],为了更好地利用好移动Agent技术,必须解决好以下关键技术问题。
3.1 移动(Migration)
  移动可分为强移动和弱移动两种。移动Agent 包括三种状态:代码状态(Program state)、数据状态(Data state)和执行状态(Execution state)[33]。代码状态指所属Agent的实现代码;数据状态包含全局变量和Agent的属性;执行状态包含局部变量值、函数参数值和线程状态等。强移动包含代码状态、数据状态和执行状态的移动,而弱移动只包含代码状态和数据状态的移动。
  强移动的语义是:在移动目的地,从Agent的断点处执行。如果MA包含多个线程,则多个线程同时从断点处运行。强移动要求Agent的实现语言提供Agent执行状态的外表化(Externalize)和内在化(Internalize)的功能,即要求MA系统提供捕捉(Extraction)执行状态、恢复(re-Insertion)执行状态的功能。目前只有少数语言能提供上述要求的功能,例如Facile[34]和Tycoon[35]。由于Agent的执行状态通常很庞大(尤其对多线程Agent),所以强移动是开销很大的操作。AgentTCL[36] 、Ara[37]和 Telescript[23]都属于强移动系统。
  弱移动只携带代码状态和数据状态,根据需要只把MA的部分执行状态存入数据状态中随Agent一起移动,传输的数据量有限,使弱移动操作的开销小,执行效率高,但它改变了移动后的执行语义。MA移动到新主机后,不再接着移动前的断点处执行,而是执行主线程的某一个入口函数(如:在MOLE中是主线程的start方法,在Aglets中是主线程的run方法)。在该函数中,根据数据状态决定应该如何执行。如果Agent包含多个线程,则移动之后,只启动包含入口函数的线程,再由它决定启动哪些线程。Aglets[31]、Mole[30]和Odyssey[38]都是弱移动系统。
  移动Agent为完成用户指定的任务,通常要依次移动到多个主机上,与该主机交互,使用该主机提供的服务和资源,这就是所谓的Multi-Hop技术 。如何实现和规划MA在多主机间的移动是移动机制和移动策略所要解决的问题。
  移动机制主要研究移动的实现方式。不同的系统采用的移动机制不同,目前MA的移动机制可以分为两大类。一类是将MA的移动路线、移动条件隐含在MA的任务代码中,其代表系统是IBM的Aglet;另一类是将MA的移动路线、移动条件从MA的任务代码中分离,用所谓的"旅行计划"表示,其代表系统是Mitsubishi公司的Concordia[39]。
  MA的移动策略是指根据MA的任务、当前网络负载和服务器负载等外界环境,动态地为其规划出移动路径,使MA在开销最小地情况下,最快、最好地完成其任务。移动策略的优劣直接影响MA的性能乃至其任务的完成。移动策略一般可以分为静态路由策略和动态路由策略。在静态路由中,主机和访问的次序在MA执行任务之前就已经由MA的设计者确定。在动态路由中,访问哪些主机及访问的次序在MA任务执行之前是无法预料的,由MA根据任务的执行情况自主的决定 ,一般由用户指定一个初始路由表,MA在按照该路由表移动的过程中可以根据周围环境的变化自主的修改路由表。动态路由方式体现出MA的反映性、针对环境性、自治性。
  目前,MA的移动机制研究的比较广泛和深入,相比之下,有关MA移动策略研究还比较少,未见有系统对MA移动策略给出一个较为精确和系统的说明。多数系统在规划MA移动路由时只考虑了软件资源(任务语义),而忽略了网络传输资源和主机处理资源等硬件资源的影响,更没有考虑MA以往的旅行经验,这显然是不全面的。IBM的Aglet给出了移动Agent的传输协议ATP,但该协议只是规定了MA在两台主机之间如何传输,并没有考虑硬件资源对移动路由的影响,也没有给出MA在多个主机之间移动的移动策略[40]。Acharya等意识到了不同硬件资源及其使用状况对MA移动的影响,但在实现MA系统Sumatra时只给出了网络延迟的监测,而没有考虑到目标主机本地资源对Agent移动的具体影响[41]。D. Rus等在监测网络负载的基础上进一步给出了网络连接以及目标主机是否可达的监测,但同样忽略了目标主机本地资源对Agent移动的具体影响[42]。Concordia[39]提出了旅行计划的概念,实现了迁移信息和Agent任务体的分离,但其旅行计划的描述能力和灵活性都不够,不能表达多种迁移方式,另外,它只是从任务语义的角度决定 MA下一步向哪里移动而不能根据网络资源、目标主机资源动态地规划MA的移动路径。Dartmouth学院的K.Moizumi等人在D'Agent的基础上开发了分布式信息查询系统Technical-Report Searcher[43],在该系统中他们将移动策略称之为TAP(Traveling Agent Problem)。在他们的解决方案中,综合考虑了网络负载、主机负载、主机上存在所查信息的概率等因素,力图在MA出发之前为之规划出一条最佳移动路径,使MA完成任务的时间最短。   TAP实际上是静态路由问题,在他们提出的"贪心算法(Greed Method)"中没有考虑到负载信息过时对其算法的影响。该系统采用一个 "网络感知模块(Network-sensing Module)"来获得网络负载信息和主机负载信息,存在集中环节,另外在"最佳"的评判标准上,也只考虑了速度而没有考虑服务价格和服务质量。
3.2 通信(Communication)
  移动Agent系统可采用的通信手段很多,有消息传递,RPC,RMI,匿名通信和Agent通信语言等。根据通信对象的不同,移动Agent的通信方式可分为以下几种[32]:
 ① 移动Agent/服务Agent的通信 该通信方式实质是移动Agent和MAE之间的通信。服务Agent提供服务,移动Agent请求服务,是一种典型的客户/服务器模式。如:移动Agent向黄页服务Agent查询有关服务。该类通信方式可以采用类似RPC、RMI的通信机制。
 ② 移动Agent/移动Agent的通信 这是一对一(Peer-to-Peer)的通信方式,通信双方的地位是平等的。为了完成特定的任务,如协作求解,MAS 必须提供同步和异步通信机制。
 ③ 组通信 也称为匿名通信。前两种通信方式的前提是,通信双方事先相互了解。然而,在有些情况下,通信的双方并不能互相确认对方的身份。例如:在基于移动Agent技术的分布式信息查询应用中,一组Agent被派遣到Internet的各个信息源上执行搜索操作,在查询的过程中,为了提高搜索的并行度,某些Agent可能又派生多个子Agent组,当这些子 Agent 和其父Agent所在组中的 Agent进行通信时,就是匿名通信。在组通信方式中,通信的一方只能确定对方所在的组,而不能确定组中具体的成员。目前支持组通信的方法有,组通信协议(Group Communication Protocols),如ISIS[44] ;共享内存(Shared Memory),如Tuple Spaces[45];事件管理等。在事件管理方式中,Agent向系统注册其感兴趣的事件,当其它Agent产生该事件时,交由注册Agent处理。
 ④ 移动Agent/用户的通信 属于智能人机接口领域。感兴趣的读者可以参看文献[46]。
根据通信发生的地点,可以把通信分为本地通信(又称节点内通信,主机内通信,Inter-Place Communication)和远程通信(又称节点间通信,网络通信,Intra-Place Communication)。特别指出的是:同一个主机内不同MAE之间的通信通常看作远程通信。
 Agent通信语言(Agent Communication Language,ACL)是实现MA与MA执行环境、以及MA与MA之间通信的高级方式。开放式MA系统的ACL系统应当具有环境无关、简洁、语法语义一致等特点。KQML/KIF和XML是两种具有发展潜力的通信语言(或协议),前者主要用于知识处理领域,后者在Internet环境(尤其是WWW)中具有很好的支持能力。在KQML语言[47,48,49]中,一条ACL消息是一个KQML表达式,其参数是符合KIF(知识交换格式)格式的术语或句子,也是词汇表中的单词。KIF是基于一阶谓词演算的前缀表达式,它提供了对简单数据、约束、规则、带量词表达式、元级信息等的编码;词汇表是一个可扩充的大字典,包含了许多领域相关的单词。直观地讲,一条KQML消息就是发送者和接收者之间的一段对话。KQML提供了对不同类型对话的支持。KQML通过通信原语使Agent进行知识交换和操作以及协作求解问题。KQML基本上是基于言语行为理论的,其最大的优点在于其开放性,即人们可以在其基本语言集之外任意增加符合自己需要、并且符合KQML规范的消息和对话。甚至KQML的语义也是开放的,它允许用户给出自己的语义解释。KQML已被许多软件互操作系统和MAS选为基本通信语言,并很有可能成为跨平台异质系统间的通信标准和语言。
  在具体的MAS中,通信的实现方式有很大差别。Tacoma通过一个携带数据的briefcase来交换数据[50]。Ara则支持C/S方式的服务调用,但没有提供异地Agent之间的通信手段[51]。Telescript中的Agent只能在会话点(Meet Place)中使用本地方法调用的方式相互通信[23]。D'Agent既支持底层的消息传递方式,也支持高层通信方式如:Agent RPC和KQML/KIF[1]。Aglets,Mole,Voyage等基于Java的系统通常采用Java对象来实现分布式事件通信和消息传递机制[31,33,52,95]。另外,Aglets预留了与CORBA/IIOP的通信接口。
3.3 编程语言(Programming Language)
移动Agent系统对编程语言有多方面的要求。Knabe等人在文献[34,53]中对移动Agent的编程语言提出四个基本要求:
 ① 支持移动:该语言必须提供机制以确定将要移动的Agent应携带哪些代码;必须提供发起"移动"操作的原语或函数。
 ② 支持异构性:用该语言编写的移动Agent应当能在一个异构的环境中任意移动,这个异构的环境可能包含不同拓扑结构的网络、不同类型的计算机硬件设备、不同的操作系统等。③ 高性能:移动Agent 的移动操作会给系统带来很大的开销,在某些情况下,移动Agent的执行效率甚至远远低于其它技术。该语言必须能快速、高效的运行。
 ④ 安全性好:该语言必须具有很好的安全性,使用该语言编写移动Agent不易受到恶意主机和其它恶意Agent的攻击。
  MA的实现语言可以采用编译型语言,也可以采用解释型语言。从支持移动、支持异构性、执行效率和安全性等多方面考虑,几乎所有的移动Agent系统都采用解释型语言。由于Java技术的快速发展和其具有良好的安全性和较高的执行效率,因而被大多数MAS所采用。
  如果采用编译型语言,MA被编译成本地代码(Native code),本地代码与具体的系统平台有关,当MA在不同系统平台之间移动时,必须重新编译源代码,另外,本地代码具有直接访问本地系统资源的权利,使得很难进行安全控制。如果采用解释型语言,MA被编译成与本地无关的代码(Machine-independent Code),由解释器解释执行,不同平台上的解释器能保证MA可以在不同系统平台之间移动执行,并且解释器在解释执行时,对访问系统资源的语句加以严格的控制,实现语言级安全性。
  选用解释型语言作为Agent的实现语言时面临是执行效率问题。编译后的本地代码执行比解释执行速度快,但目前有些解释型语言提供实时编译技术(如Java语言的Just-In-Time技术)可以显著的提高解释型语言的执行速度。从移动语义考虑,如果提供强移动(Strong migration),需要获得MA的执行状态(Execution State)。对于解释执行而言,要求解释器提供捕捉(Extraction)线程执行状态、恢复(re-Insertion)线程执行状态的功能。对采用编译执行而言,线程的执行状态用堆、栈表示,编译器必须提供捕捉堆栈和恢复堆栈的功能,目的MAS即使采用的是同一种编译器,该过程开销也十分巨大。
  解释性语言还具有延迟绑定[24]的优点,程序可以包含本地不存在的函数和类,这很好的支持了代码的移动。
  不同的移动Agent系统采用不同的语言,大体可以分为多语言系统和单语言系统。多语言系统的代表有:Ara,Tacoma和D'Agent。Ara致力于用当前现有的编程语言实现移动Agent,支持C/C++, Tcl, Java[51,54] 。Tacoma支持Tcl/Tk,C,Scheme,Perl和Python[50,55]。D'Agent支持Tcl[1,56],Scheme和Java。单语言系统多数采用Java,如:Mole,Aglet,Concordia,Voyager等。DEC研究院研制的Oblic[57]采用面向对象语言Oblic。编程语言的选择对于移动Agent系统的发展至关重要,第一个商业化的移动Agent系统Telescript的消亡就说明了这一点,过于专用的Telescript语言极大的限制了Telescript系统应用范围,使之无法经受基于Java的MAS冲击。General Magic公司重新开发了一个基于Java版本的移动Agent系统Odyssey[38],Odyssey继承了Telescript的所有思想。
3.4安全性(Security)
  MA的移动性会带来很多不确定因素,要想将MA被广泛的接受,成功地应用于商业(如:电子商务),就必须解决好MA的安全性问题。MA的安全性问题是MA成功应用的瓶颈,是移动Agent系统中最重要、最复杂的问题。
通常把移动Agent系统的安全问题分为4个部分[33]:①保护主机免受恶意Agent的攻击;②保护Agent免受恶意主机的攻击;③保护Agent免受其它恶意Agent的攻击;④保护低层传输网络的安全。
为了阻止恶意MA对主机的破坏,在主机上通常采用如下安全检测技术:
  (1)身份认证(authentication):它主要用于检查MA是否来源于可信的地方。这要求有关身份认证的详细信息需要从MA的源主机或独立的第三方传送过来。身份认证失败的MA或者被驱逐出主机,或者仅允许以匿名Agent的身份在十分有限的资源环境下运行。数字签名就是一种常用的身份认证技术。
  (2)代码验证(verification):它主要用于检查MA的代码,看它是否会执行被禁止的动作。由于有些代码只有在其被执行时才能被验证,如用于函数参数的变量的内容等,所以代码验证常常按如下步骤进行:首先检查MA是否试图破坏其执行环境,然后检查该MA实际运行所在的MA系统是否对MA的管理负责。若以上验证结果成立,则进一步检查该Agent的操作是否超出其被授权和资源限制的范围。可以采用一种称为证明携带的代码技术(proof-carrying code)来完成对来自于不安全地点的移动代码的验证,以决定对该代码的执行是否安全[10]。该技术将安全性证明(proof)附加到每条代码上并与代码一块移动。目标主机可以迅速验证这些证明并进而判定移动代码的安全性。证明或代码二者之一被窜改均会造成整个代码验证的失败,从而导致移动代码被拒绝执行。Java语言本声提供了一定程度的代码验证,即完整性验证。代码验证技术的难度很大,超出了本论文的研究范围,有关这方面的研究工作请参见文[58,59]。
  (3)授权认证(authorization):主要检查MA对主机资源的各种访问许可,这包括资源可被访问的次数和被使用的数量以及MA在该资源上进行存取操作的类型。例如,被高度信任的MA可以读、写、修改指定的资源并可无限制地访问它;而不被信任的MA则仅能对该资源进行读操作,而且只能进行有限次的访问;有些MA可能允许访问主机的计算资源;有些MA则可能被完全禁止。可以通过使用访问控制表的方法实现授权认证。
  (4)付费检查(payment for services):它主要用于检查MA对服务的付费意愿和付费能力(除非服务是免费的),这包括检查MA是否确实付费了、付费过程是否正确,以及付费者是否对所提供的服务满意等。MA在运行的过程中至少会使用服务器的计算资源,也可能进行购买物品的交易。为避免不必要的资源占用和不合理的交易,需要限制MA的权利,这也可以通过付费的方式来控制。例如,MA可以携带一定数量的电子货币,当MA在某主机上运行时,它需要根据所要求的服务的数量和质量对主机付费。这样,MA的权利受限于其所拥有的货币的多少,用尽货币的MA会消亡。当然,MA会要求主机不能随意捏造所收到的货币数量,而且要求主机确实提供了双方所协商的服务。
通过上边给出的四种方法,主机的安全性问题在一定程度上可以解决,但有关MA方面的安全问题还需要考虑,即要保证MA在传送和远程执行时的安全和完整。为保证MA在传送和远程执行时的安全性和完整性,通常采用加密技术、身份认证技术(如数字签名)等。采用诸如PGP等加密算法有助于在MA传送过程中保护其内容免遭窃听。使用身份认证技术可用于检查目标主机的合法性;数字签名技术还可用于验证信息,保证接收者不窜改收到的信息,并使处理结果返回到正确的发送者。
  对于MA的安全性问题,很多学者做出了大量的工作[60],但多数是针对具体的系统和环境,而且只是侧重于某一层面。例如ffMAIN[61]利用其实现语言SafeTCL在安全性方面的特点重点给出了代码验证的实现方法;APRIL[59]重点研究代码验证和加密技术而忽略了其他因素;基于Java语言的系统在代码验证方面往往直接使用Java的字节码校验程序而很少再对此做深入地研究等,但Java的字节码校验程序本身也存在着一定的缺陷,博士论文[58、 59]对此进行了深入地研究。
  作为第一个商业化的MA系统,General Magic的Telescript对安全性策略进行了细致的设计,它提供了本文提到的各种安全机制。IBM的Aglets[62]也是出于商用目的的,它提供了身份验证、授权认证、代码验证以及电子货币机制,但其文献中没有涉及到有关MA在网络上安全传输和加密方面的问题。Agent TCL[13]对安全性有较好的支持,缺憾是没有提供有关付费检查的功能。TACOMA[50]的数据存储模型非常灵活和高效,其下一步工作应当在安全性方面做努力。ARA系统[54]也有待于进一步加强安全机制。APRIL[63]在代码验证方面很有特色(这也是与其使用专用语言April有关的),但不知其传输的安全性情况。Mole[30,33]和Sumatra[41]除了利用Java已有的安全机制(代码验证)和缺省的安全管理器外没有再提供其他的安全机制,但Mole在容错方面(如处理孤儿线程)有自己的特色和贡献。
3.5容错 (Fault - Tolerance)
  为保证移动Agent在异质环境中的正常运行,必须考虑到服务器异常、网络故障、目标主机关机、源主机长时间无响应等异常情况的出现,并给出相应的解决方法。MA要执行的任务越复杂、经过或移动到的站点越多,则出现故障的概率也就越大。在诸如Internet这样的广域网环境中,此概率是绝对不容忽略的。像安全性一样,容错性也是移动Agent系统成功应用所需重点解决的问题。
在MA的移动和任务求解过程中有以下几个环节可能产生系统错误:
  ① 传输过程:MA是在网络上进行移动,网络传输介质的不稳定和高误码率常常会导致传输的错误,线路的中断还会导致MA的崩溃。
  ② MA服务环境:MA会经过不同的计算机系统,这些计算机系统的容错性能可能各不相同。计算机服务环境的以下行为都能造成MA的失效或崩溃:主机的恶意破坏、主机长时间停机、系统死机、系统掉电等。
  ③ MA自身代码:MA设计和实现的缺陷也会导致MA系统的突然崩溃。
MA在节点间移动和执行的过程是典型的串行过程,这种串行性使得整个过程链的容错性能等于其中最差的节点的容错性能,是典型的"灾难共享",所以要在MA移动和执行过程的各个环节上进行故障的预测、防范和故障后的恢复。容错的基本原理是采用冗余技术,而具体的冗余方法有很多种。目前在移动Agent系统中总体上来说可以采用以下几种冗余策略:
 (1)任务求解的冗余:创建多个MA分别求解相同的任务,最后根据所有或部分的求解结果、并结合任务的性质决定任务的最终结果。该方法的难点在于最后结果的冲突消解和综合。对于任务求解结果比较明确、唯一的情形(典型的,如计算作业),可以采用多数优先的原则选择求解结果,其依据是概率论,但不能排除出现概率小的结果为正确结果的情况,也无法处理几个结果都完全不同的情况(这时只能重新求解任务);当然,后两种情况出现的概率极小,通常情况下可以忽略。对于求解结果多样化的任务(典型的,如Internet上的信息搜索),首先对结论有冲突的结果进行取舍,然后将剩余结果的并集作为最后的结果,可以将并集中的结果根据出现的概率进行排序。这种方法在保证MA结果的有效性方面具有很大的优势,但会耗用大量的网络资源和计算资源。
 (2)集中式冗余:将某个主机作为冗余服务器,保存MA原始备份并跟踪MA的任务求解过程。若MA失效,则通过重发原始备份提供故障恢复。这种方法的缺点是中间结果也难以利用,可以采用检查点技术来对其进行改进。方法是:每隔一个适当的时间间隔对该MA做一次检查点操作,不断地把程序运行的中间状态保存在检查点文件之中。在MA出现故障后,利用该MA的检查点文件把MA恢复到最近一个检查点时刻的状态继续运行。这样,利用检查点采用这种步步为营的策略可以保证长时间运行的MA最终能被正确地执行完。在采用检查点技术的集中式冗余方法中,检查点文件被集中存放在某个固定的主机中。集中式冗余方法的缺点是存在集中环节,使得该容错方法本身缺乏容错性。
 (3)分布式冗余:将MA容错性的责任分布到网络中多个非固定的节点中,这些节点由冗余分配策略决定。在此也可以采用检查点技术,只是检查点文件的获取和存放位置是分布式的。这种方法能提供较理想的容错机制。
当前只有少数系统具有容错机制。Ara提供检查点机制(CheckPoint),在Agent执行中产生一系列检查点,它是Agent内部状态的一个完整的记录,当Agent由于某种原因出错时,用最近的检查点把Agent恢复到出错前的状态。Concordia提供一个持久存储管理器(Persistent Store Manager),用于备份服务环境和Agent的状态,其消息排队子系统备份将要移动的Agent,直到Agent被目的主机正确接受。Tacoma则有后台监视Agent负责Agent出错后重新启动。Mole的容错机制能保证移动Agent"只执行一次(Exactly-Once)"。文献[64]认为Agent系统正常运行的前提是在任何情况下(包括通信错误或节点失效等)Agent的任务只被执行一次。文献[64]给出了"只执行一次(Exactly-Once)"的形式化描述和实现机制。另外Mole还提供了"孤儿检测"机制[65]。
3.6管理 (Management)
)
  MA在具有高度自治的同时,还得受到一定程度的管理。这种管理主要来自于源主机,也可能来自于目标主机,这要依具体的实现而定。首先,源主机要对MA的行为负责,使其对整个系统不会产生危害;其次,源主机还要随时了解MA的当前工作情况,以避免MA的迷航或过度复制,也要随时回答MA提出的问题或协调MA的工作。目标主机也要将MA作为外来Agent进行管理,避免其过度使用本地资源,或协助其进行下一次的移动,协调其与本地Agent的交互等。
  文献[32]认为,MA的管理还应包括:孤儿检测,终止移动Agent的运行,定义Agent之间各种依赖关系。文献[65]讨论了孤儿检测算法和终止Agent运行的机制,文献[66]给出了Agent之间的多种依赖关系。
3.7 移动Agent的理论模型 (Theory Models)
  移动Agent的理论模型刻画了位置、移动、通信、安全、容错、资源控制、资源配置等基本概念,有助于从形式抽象的角度来认识移动Agent的本质特征。现有的几种理论模型是对传统并发和分布式计算形式与方法的扩充与修改,有基于代数语义的进程代数,如CSP[71]、 -演算[72]等,有基于指称语义的ACTOR模型[70],有基于状态转换语义的时序逻辑,如Unity[73],TLA[74]等。文献[137,139]综述了MA的理论模型。
  -演算及扩展( -Calculus) -演算[72]是一种描述和分析并发系统的方法,是CSS[75]的扩充。基本实体是通道名和由名字构成的进程。 -演算抽象刻画了分布、位置、动态连接、移动的概念。 -演算没有考虑安全控制原语,spi[76]进行了这方面的扩充。 -演算有很多扩充的方法,如异步 -演算[80]弱化同步原语,消除同步中的分布一致的需求。Join演算[81]的每个进程以特殊进程为根节点,构成同步化解的单一空间。高阶 -演算(HO )[模型22]通过通道传送进程实现进程移动。文献[67]中的演算基于异步 -演算引入了位置、失败、失败检测和进程移动等概念。
  环境演算 (Ambient Calculus) 环境演算受 -演算和Telescript系统[69]设计的启发,基本模型为:环境表示抽象有界的计算场所,如主叶、虚拟地址空间、对象、笔记本电脑等。计算环境嵌套组织,每个环境包括数据、计算实体(Agent)、子环境。环境受顶级Agent控制可以活动方式移动。环境演算通过环境、移动以及移动授权和认证等概念从最基础的层次上刻画移动Agent的本质。环境演算抽象刻画了名字、位置、配置、交互、移动、安全等概念。
  Seal演算(Seal Calculus) Seal演算[78]是一种同步高阶分布进程演算,可以看作是具有层次性位置移动特征和资源访问控制的 -演算。该演算的设计目的是表示与推理分布式系统的安全和移动特性。Seal演算的移动模型包含消息传递、远程计算、进程迁移等方式,而且可以刻画应用程序和硬件的移动。演算包含一个层次保护模型,每层通过仲裁(指在低层执行的可观察动作有高层作检查和控制)保证管理域的安全。另外安全策略动态地嵌入演算,可以根据操作条件变化,以适应环境的需求。Seal演算抽象刻画了名字、位置、进程、交互、移动、安全等概念。
  移动Unity (Mobile Unity) 移动Unity[77]是时序逻辑的扩展。移动Unity基于Unity[73]的非确定、公平交替并发模型,通过引入新的程序抽象扩充Unity的表示注解,来刻画移动计算的本质特征。针对新程序抽象扩展了Unity证明逻辑,用于推理移动Agent系统的特性。它能够描述和推理松耦合且环境倚赖的分布式系统,直接刻画系统重新配置与断连操作。其最显著的特点是能进行移动Agent系统的规范说明、性质检验。抽象刻画了位置、交互、移动、配置、共享等概念。
  Actor模型(Actor Model) Actor 模型[70]是基于异步消息传递的分布式处理模型。其中Actor是独立的并发进程,通过异步消息传递同其他Actor交互。一群并发的Actor组成Actor系统。Actor有邮件标识、独立执行线程和存储(收发)消息的邮件队列。Actor基本原语有send(发送消息到其他Actor),newactor(用指定行为动态生成新演员),ready(捕捉局部状态变化,释放该Actor等待接受另外消息)。扩充Actor模型还引入了一种特殊的资源模型--经济模型来刻画开放分布式系统的资源分配和使用。经济模型中使用了通用货币的概念,资源分配和使用以通用货币为单位来衡量。该模型认为:Actor占用的处理器时间、内存、硬盘、通道和网络带宽等都是要付费的资源。详细描述参看文献[79]。
  综合比较可得,环境演算和Seal演算是较充分体现移动Agent特征的理论模型,但使用它们推理系统的复杂性质非常困难。Actor模型是对象并发计算模型,因而能很好的体现Agent系统的封装性和自治性。以时序逻辑为基础的移动Unity,在描述和推理移动Agent行为方面要比其他模型充分。
  除了上述几种模型,还有一些模型。Llinda是使用进程代数形式化了Linda[82],有多个分布元组空间,每个元组空间有局部同步管理。移动Petri Net[68]通过允许场所名以标记(token)形式出现在场所中来扩充场所/转换网,支持表示进程间通信通道配置的改变。Polis[83] 是基于多元组空间的一种协作语言,提供定义、研究和控制移动实体的机制,用于描述和分析移动 Agent系统的体系结构。WAVE[84]是一种在分布、开放环境中用移动代码技术进行信息处理的模型,WAVE提供一种基于空间匹配(Spatial Mathing)技术的语言并引入了分布式知识网络(Distributed Knowledge Net,DKN)的概念。
3.8 移动Agent的协作模型 (Coordination Models)
  移动Agent在执行任务的过程中经常要和其它实体进行协作,最常见的协作对象是MAE中的服务Agent及其它移动Agent。Agent之间的协作技术已被广泛、深入地研究,各国的研究者提出了许多关于协作的理论、模型和语言,这些理论和模型已被广泛地应用到包括移动Agent系统在内的许多应用系统中。文献[85]对协作的研究作了综述。
文献[86]按照空间耦合(Spatially Coupled)和时间耦合(Temporally Coupled)的标准把当前移动Agent的协作模型分为四类:直接协作模型(Direct)、基于黑板的协作模型(Blackboard-Based)、面向集会的协作模型(Meeting-Oriented)和类Linda模型(Linda-like)。表1给出了他们的分类。
  空间耦合是指参与协作的Agent共享名字空间;时间耦合是指参与协作的Agent采用同步机制,要求参与协作的Agent在协作时必须同时存在。
  ① 直接协作模型(Direct) 在此模型中,参与协作的Agent向其他Agent直接发送消息。因为消息的发送方必须知道接收方的名字,因此该模型是空间耦合的。发送方在发送消息的时候,接收方必须作好接收的准备,两者同步通信,因此该模型也是时间耦合的。直接协作模型非常适合于客户/服务器方式的协作,因此移动 Agent和服务Agent之间的协作通常采用此模型。但是以下两个原因使它很难满足移动Agent之间的协作。第一,由于移动 Agent频繁的移动,其位置在不断的改变,消息的发送者不能确定接收者的位置,使消息不能直接到达接收者,而必须通过复杂的路由机制。第二,由于移动Agent可以被动态地创建,因此很难确定在某一时刻会存在哪些Agent。
大多数基于Java的移动Agent系统采用直接协作模式,如:Aglets,D'Agent[87]。一些中间件(如:CORBA、DCOM)也支持直接协作模式,它们封装了Agent的命名和定位,使开发人员可以直接向服务对象发送消息,而不必关心消息是如何到达的。
表1 移动Agent协作模型分类
时间(Temporal)
耦合(Coupled) 非耦合(Uncoupled)
空间(Spatial) 耦合(Coupled) DirectAglets、D'Agent Blackboard-Based Ambit、ffMain
非耦合(Uncoupled) Meeting-OrientedAra、Mole Linda-likePageSpace、TuCSoN、MARS

  ② 面向会见的模型 在此模型中参与协作的Agent聚集在同一个会见地点(Meeting Place)进行通信、交互。由于在协作的过程中参与者不必知道其他参与者的名字,因此该模型是非空间耦合的,这使协作具有很大的灵活性。该模型要求参与协作的Agent都必须到达指定的会见地点进行同步地交互,因此该模型是时间耦合的。
Ara系统实现了面向会见的协作模型[88]。管理会见的服务Agent负责建立一个会见地点,外来的移动Agent可以进入该会见地点同其中的Agent进行协作。Mole采用了OMG提出的基于事件(Even)的同步模型[33],该模型可以看作是一个复杂的面向会见模型。事件是用于同步的特殊对象,同步的双方都需要具有该事件对象的引用,这相当于进入同一个会见地点。
  ③ 基于黑板的协作模型 该模型使用一个被称为"黑板(BlackBoard)"的消息池(Repository)存放消息。消息的发送者可以向"黑板"中写入消息,接收者在需要的时候从"黑板" 中读取消息,由于"写入"操作和"读取"操作不需要同步执行,因此该模型是非时间耦合的。发送者在向"黑板"中写入消息的时候,必须给该消息加上一个唯一的标识,接收者通过该标识从"黑板" 中检索相应的消息。由于协作双方事先需要知道消息的标识,因此该模型是空间耦合的。
Ambit[77]中的每一个节点都维护一个局部"黑板",构成一个分布式黑板模型。Agent可以向局部"黑板"写入信息或从中读取信息。FfMain[89]中 "信息空间(Information Space)"用于存放数据信息,Agent通过HTTP协议向其中写入或从中读取数据。
  ④ 类Linda模型 该模型在时间和空间上都是非耦合的,是最灵活的一种协作模型。类似"黑板"协作模型,类Linda模型中也有一些存放消息的空间,这些空间被称为元组空间(Tuples),Tuples中的消息都以元组表示。与"黑板"协作模型不同的是,类Linda模型不是通过"标识"进行消息检索,而是采用所谓的"联想式(Associative Way[45])"检索。这种方式使用"部分匹配(Pattern Matching)"的机制,只用部分信息就可以检索出完整的消息。通过这种方式,参与协作的Agent不需要共享任何信息。
基于 Java的移动Agent系统Jada[90]提出了"联想式黑板(Associative BlackBoard)"的概念,维护多个对象空间(Object Space)。移动Agent使用对象空间来存放和"联想地"检索对象的引用。系统也允许移动Agent 创建私有的对象空间进行私有的交互。MARS[91,92] 对元组空间增加了可移植性(Portable)和反应性(Reactive)。元组空间的接口严格遵循JavaSpace规范,反应(Reactions)是一些与元组有关的Java方法(Java Method),当元组被匹配之后,相关的反应被执行。
4.移动Agent的技术优势

  移动Agent的移动性、自治性、反应性、导向目标性和针对环境性使移动Agent技术在许多领域中,特别是Internet领域中显示了强大的优势[93,27,94]。
  节约网络带宽、克服网络延迟:移动Agent的本质是将计算移动到数据端,直接在数据端进行本地处理,只返回最终结果,从而避免了大量中间数据在通信两端的传输。移动Agent一次可以携带多个服务请求移动到服务器端进行本地调用,避免了多次远程调用,从而节省了每次远程调用的网络延迟。因此在处理的数据量大、通信两端交互频繁、带宽不足的情况下,使用移动Agent技术可以有效的节省网络负载。[96,97]给出了移动Agent的性能评价模型,对移动的开销作了定量的分析。
  支持实时远程交互:在一些远程控制系统中,如工业控制、海底探测器控制、外太空探测器控制、有毒环境中的监控,实时性非常重要,但是网络的延迟使远程实时控制变的不太可能。将移动Agent发送到远端系统,代替人在远端完成各种控制活动,可以从根本上解决网络延迟问题。
  封装网络协议:任何网络程序都是建立在特定的协议之上,网络程序的开发要求程序设计者深刻的理解低层的网络协议;随着Internet的发展,新的协议和数据格式不断的产生,随着网络协议的升级,程序需要重新编写、编译,这些都给网络应用的开发和维护带来困难。移动Agent系统是一种中间件,位于操作系统和应用程序之间,封装了低层网络协议,提供移动、通信、容错、安全等基本功能,开发人员无须了解低层实现即可开发网络应用。当网络协议升级时,只需修改移动Agent系统中相关的功能实现而无须修改MA应用程序。
  支持异步自主执行:传统分布式系统中异步通信机制(如:异步消息队列[98])可以异步地处理多个请求,但要求提出请求的客户端必须始终在线等待并响应请求的回答,这对移动客户而言是不可行的。使用移动Agent技术,用户可以将整个任务而不是单个请求提交给多个Agent去执行,这些Agent被发送到网上之后,可以独立于发送它们的程序,异步地、自主地、协作地完成任务,它们的生命周期可以长于创建它们的程序。
  支持离线计算(断连操作):由于带宽是一种昂贵的资源,要求移动设备(笔记本电脑、PDA、手机等)始终保持网络连接在经济上是不可行的;无线通信的特性要求系统具有离线计算的能力,由于移动设备同网络的连接是通过低速、不可靠、高延迟的无线网络,要求移动设备始终保持网络连接在技术上也是不可行的。移动Agent 技术可以解决这个问题。用户派出Agent之后,可以断开网络连接,Agent在网络上自主的运行,当Agent完成任务之后,通过转接机制(Docking)监视用户是否在线,当它发现用户在线时,就返回计算结果。
  支持平台无关性:网络环境(尤其是Internet)无论从硬件或软件的角度讲都是异构的,要求网络应用程序具有跨平台、可移植的特性。移动Agent的运行只和其运行环境有关,和具体的网络结构、网络协议、计算机设备、操作系统无关,只要网络节点上装有移动Agent 运行环境,移动Agent就可以实现跨平台的移动和运行。如果所有的移动Agent系统都遵循移动Agent系统的互操作标准,就可以实现MA在任意移动Agent系统中的移动、交互、通信,真正实现平台的无关性,即所谓的"编译一次,到处移动"。
  具有动态适应性:移动Agent和其运行环境进行交互,感知环境的变化,并自主地、快速地作出反应,使整个系统始终保持在最优状态。
  提供个性化服务:随着Internet上信息数量的飞速增长,上网用户的数量和种类也在快速增加。这些用户来自不同的民族和地区,有着不同的文化背景,他们对信息的需求和使用方式有着很大的差异,这就要求对Internet进行个性化的表示和使用。使用移动Agent技术,用户可以根据服务器端提供的低层操作函数,编写满足自己特定需要的Agent,然后发送到服务器端运行,利用服务器端的数据资源或计算资源为不同的用户服务。这种方式可以有效地增加服务器功能的伸缩性。
  增强应用的强壮性和容错能力:移动Agent支持离线计算,这大大降低了网络应用对网络连接可靠性的要求。移动Agent的反应性使之能及时的感知网络节点的失效,其自主性可以使它自主地处理并修正错误,更容易建立容错能力强的分布式系统。例如,在一个网络节点失效之前,在其上工作的移动Agent可以立即感知,并完成相应的备份工作,然后移动到其它节点,继续原来的工作。
  应该指出的是,上述的优点并不是移动Agent技术所特有的,除了支持实时远程交互外,其余几点用传统的方法也可以实现,但移动Agent技术提供了一个能满足全部要求的体系框架[24]。

  


                     我是一个呼吸着现在的空气而生活在过去的人
               这样的注定孤独,孤独的身处闹市却犹如置身于荒漠
                                     我已习惯了孤独,爱上孤独
                                 他让我看清了自我,还原了自我
                             让我再静静的沉思中得到快乐和满足
                                   再孤独的世界里我一遍又一遍
                                   不厌其烦的改写着自己的过去
                                             延伸到现在与未来
                                       然而那只是泡沫般的美梦
                                 产生的时刻又伴随着破灭的到来
                         在灰飞烟灭的瞬间我看到的是过程的美丽
                                      而不是结果的悲哀。。。
***** 版主模式 *****
关于agent
该贴子是管理员从<a href=forums.cgi?forum=2>☆计算机技巧☆</a>转移过来的!

                     我是一个呼吸着现在的空气而生活在过去的人
               这样的注定孤独,孤独的身处闹市却犹如置身于荒漠
                                     我已习惯了孤独,爱上孤独
                                 他让我看清了自我,还原了自我
                             让我再静静的沉思中得到快乐和满足
                                   再孤独的世界里我一遍又一遍
                                   不厌其烦的改写着自己的过去
                                             延伸到现在与未来
                                       然而那只是泡沫般的美梦
                                 产生的时刻又伴随着破灭的到来
                         在灰飞烟灭的瞬间我看到的是过程的美丽
                                      而不是结果的悲哀。。。

移动Agent实现技术

谁有《移动Agent实现技术》一文的参考文献呀?传我一份吧。谢谢!!!

移动Agent实现技术

我目前只有电子的,特大!没有空间传

                     我是一个呼吸着现在的空气而生活在过去的人
               这样的注定孤独,孤独的身处闹市却犹如置身于荒漠
                                     我已习惯了孤独,爱上孤独
                                 他让我看清了自我,还原了自我
                             让我再静静的沉思中得到快乐和满足
                                   再孤独的世界里我一遍又一遍
                                   不厌其烦的改写着自己的过去
                                             延伸到现在与未来
                                       然而那只是泡沫般的美梦
                                 产生的时刻又伴随着破灭的到来
                         在灰飞烟灭的瞬间我看到的是过程的美丽
                                      而不是结果的悲哀。。。

移动Agent实现技术

提示: 作者被禁止或删除 内容自动屏蔽

移动Agent实现技术

3月10号左右有部分资料传上来
哈哈哈!!!!你的IP是不是?我都知道了!!!
返回列表