时间:2024-05-04
生桂勇
摘 要: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.
我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!