`

移动Agent技术介绍( by quqi99 )

 
阅读更多

移动 Agent 技术介绍 ( by quqi99 )

作者:张华 发表于:2011-04-07
版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明

( http://blog.csdn.net/quqi99 )

1 Agent概述

Agent的研究起源于分布式人工智能。Agent是模拟人类的行为和关系、具有一定智能并能够自主运行和提供相应服务的程序。

随着网络技术的发展,可以让它在网络中移动并执行,自主完成某些功能,这就Mobile Agent的思想 移动Agent由于具有任务异步执行、减轻网络负载、健壮性、并行处理、智能路由等特性,20世纪90年代初期以来,对许多领域产生了非常重大的影响。

1.1 Agent 与多Agent

Agent的概念出现于20世纪70年代的人工智能中,20世纪80年代后期才成长起来,在计算机领域,Agent可以看作是一种在分布式系统或协作系统中,能持续自主地发挥作用的计算机主体,即软件智能体。

分布式人工智能(DAI)是人工智能研究领域的一个重要分支,也是当前人工智能和分布式系统研究最为活跃的方向之一。分布式人工智能系统由多个Agent组成,每个Agent又是一个半自治系统,这些Agent之间以及Agent与环境之间都是并发的,需要进行交互,DAI研究工作大致分分布式问题求解(DPS)和多Agent系统(MAS)两个方向。

Agent一般具有自主性、交互性、反应性和主动性的特征。

(1)自主性:Agent具有属于自身的计算资源和局部于自身行为的控制机制,能够在外界直接操纵的情况下,根据其内部状态和感知到的外部环境,决定和控制自身的行为。

(2)交互性:能够和其他Agent进行各种形式的交互,能有效地与其它Agent协同工作。

(3)反应性:能够感知所处的环境,并对相关事件做出及时的反应。

(4)主动性:能够遵循承诺采取主动行动,表现出面向目标的行为。

另外,很多AI的研究人员认为,Agent不仅应具有以上定义的特性,而且还具有一些通常人类才具有的概念,如信念、愿望和意图等认知特性。

1.2 移动Agent

随着网络技术的发展,可以让Agent在网络中移动并执行,完成某些功能,这就是移动Agent(Mobile Agent)的思想。

20世纪90年代初由General Magic公司在推出商业系统Telescript时提出了移动Agent的概念。简单地说,移动Agent是一个能在异构网络中自主地从一台主机迁移到另一台主机,并可与其他Agent或资源交互的程序,实际上它是Agent技术与分布式计算技术的混血儿。移动Agent不同于远程执行,移动Agent能够不断地从一个网络位置移动到另一个位置,能够根据自己的选择进行移动。移动Agent不同于进程迁移,一般来说进程迁移系统不允许进程选择什么时候和迁移到哪里,而移动Agent带有状态,所以可根据应用的需要在任意时刻移动,可移动到它想去的任何地方。移动Agent也不同于Applet,Applet只能从服务器向客户单方向移动,而移动Agent可以在客户和服务器之间双向移动。

移动Agent具有很多优点,移动Agent技术通过将服务请求Agent动态地移到服务器端执行,使得此Agent较少依赖网络传输这一中间环节而直接面对要访问地服务器资源,从而避免了大量数据地网络传送,降低了系统对网络带宽的依赖。 移动Agent不需要统一的调度,由用户创建的Agent可以异步地在不同结点上运行,待任务完成后再将结果传送给用户。为了完成某项任务,用户可以创建多个Agent,同时在一个或若干个结点上运行,形成并行求解的能力。此外它还具有自治性和智能路由等特性。

1.3 移动Agent的分布式计算模式

移动Agent模式的关键特性就是网络中的任一主机都拥有处理资源、处理器和方法的任意组合的灵活性,如图1.1所示。方法(在移动Agent)的形式下)没有锁定在一台主机上,而是在整个网络内可共享。


图1.1 移动Agent的分布式计算模式

1.4 移动Agent的主要优点

降低网络负载:这一特征概括了基于移动Agent的分布式计算的特点,即将计算移往数据,而并非把数据移往计算。这样做所带来的好处是可以减少网上原始数据的流量。

克服网络延迟:在一些系统应用中,对环境做出实时反应是极为重要的,对此移动Agent技术提供了一个很好的解决方法,可以由中央处理器将移动Agent派遣到系统局部,直接执行控制器的指令,从而消除网络延迟带来的隐患。

包装不同协议:在分布式系统中进行数据交换,一个系统送出的数据必须被接受方正确解释,这就需要协议的支持,即对输出的数据进行编码,对接收到的数据进行解码。但由于效率和安全性方面等方面的原因,通常会遇到一方希望对协议进行升级的情况,这常常需要对应用进行大量改动,这对于部分原有系统来说,几乎不可能进行。对比,移动Agent可以移动到远程主机上,通过专用协议建立私有数据交换通道。

异步和主动执行功能:移动设备通常依赖昂贵而脆弱的网络连接进行工作。而有的任务,要求移动设备与网络之间必须保持持续的连接,但这可能既不经济,在技术上也不可行。要解决这一难题,可以将任务嵌入到移动Agent之中,而后者可以被派遣到网络上。之后,移动Agent便可以独立创建它的进程,异步、自主地完成所肩负的任务;移动设备则可以在这之后再连接上网络,收回Agent,取得服务结果。

动态适应环境:移动Agent具有感知运行环境和对其变化做出自主反应的能力。多个Agent可以拥有在网上各主机之间合理分布的能力,以维持解决某一特定问题的最优配置。

自然异构性:开放分布式计算各平台之间,往往从硬件到软件都是异质的。由于移动Agent往往独立于特定的主机和传输层协议,而仅仅依赖于它的执行环境(已屏蔽各平台的差异),因而为进行无缝的系统集成提供了极为有利的条件。

健壮性和容错性:由于移动Agent具有对不利的情况和事件动态做出反应的能力,因而减小了建立健壮和容错的分布式系统的难度。在一台主机被关闭以前,可以给正在运行的移动Agent发出警告,它们可在很短的时间内移动到网络上其他主机上,且继续运行。

1.5 移动Agent的应用范围

由于移动Agent所具有的优越性,使它在以下应用中具有很大的潜力。

电子商务:移动Agent非常适合电子商务。交易常常要求实时访问远程信息,如股票报价,甚至是进行实时谈判。不同的Agent拥有不同的目标,并将采取不同的策略以实现各自的目标。可以预想Agent能体现其创建者的意图,并能代表他们的各自利益进行谈判。由此可见,移动Agent技术在电子商务领域有着广阔的应用前景。

分布式信息检索:正如在前面分析移动Agent技术优越性时指出的那样,移动Agent派往数据所存放的地方将大大减轻网络负载和消除网络延迟。同时,由于Internet这样的浩如烟海的信息环境中进行分布式信息检索往往需要花费大量的时间,这时如果仍保持网络连接,则需要花费许多费用;但是通过使用移动Agent技术,使得创建移动Agent的主机可以与网络断开连接,从而节省大量的连接费用和主机机时。

信息发布:移动Agent可以帮助实现Internet的信息PUSH模型。例如,移动Agent可以将新的软件版本以及安装程序直接带到客户主机,进行自动升级和维护。

个人助手:由于具有在远程主机上运行的能力,使移动Agent具备代表其创建者在网络中完成特定任务的能力。由于不受网络连接的限制,其创建者甚至可以关掉他们的计算机。

安全中介:在合作者之间并不能彼此完全信任的情况下,各方可以将移动Agent派往一台彼此都认为安全的主机(它提供了移动Agent的执行环境)上进行协作,从而不必冒险接受对方的直接访问。

电信网络业务:对先进电信业务的支持和管理,关键在于能够对网络进行动态配置和定制用户业务。庞大的物理网络规模和用户的严格要求,使得只有依靠移动Agent技术才能有效地保证系统的灵活和高效。

工作流应用:工作流应用的特点之一是支持合作者之间的信息流动。对此,移动Agent技术能够提供很好的支持,可以将信息相关的操作封装在移动Agent中,再利用后者的移动性和自主性,让信息在机构内部有效地流动。

并行处理:在并行计算中,可以利用Agent技术把各个需要并发执行的子任务派遣到不同的主机上,以实现并发计算。

总之,Agent特别适合用于解决传统方法中要么代价过于昂贵,要么解决不了的问题,如数据、控制、专家知识和资源分布问题,使大量的数据处理可在数据源进行(因为Agent可以移动),只需交换少量的高层信息,减少了大量原始数据传送到远地的操作,提高了网络的利用率;如果需要人性化的进程,Agent具有观察能力、主动适应能力,而不是通过一些预先严格确定的接口函数与外界进行交互作用,能根据目标主动规范化自己的行为,使用用户界面达到“人性化”;如需要集成旧系统,可通过给旧系统上包装一层Agent外壳,其他系统可以调用旧系统的功能。

2 Agent框架

2.1 移动Agent平台分析比较

虽然移动Agent的实质是移动代码与代码运行挂起时所处的状态,也就是对象从一台主机移动到另一台主机上,我们自己就能实现,例如在JAVA中可以通过JAVA的序列化机制来实现,在C++中我们也可以用DCOM来实现。但是要实现移动Agent,为了加快开发节省成本我们一般要选择一个成熟的移动Agent开发平台。移动Agent开发平台为我们开发基于移动Agent的程序提供了各种公共服务。按照现有的实现技术可以将移动Agent系统分为两类:一种是基于移动代码的,例如Telescript;另一种是基于远程对象的,例如Aglet。下面对当前较为成熟的移动Agent系统平台的分析与对比如下:

1.D’Agent

D’Agent(以前称为Agent TCL)是美国Dartmouth大学研究的移动Agent系统。它从支持单一语言TCL发展到目前支持TCL,JAVA和Scheme等多种语言。D’Agent能自动捕获和恢复移动Agent的完整状态,即意味这代理可以在任意点中断执行,然后移动到其它环境中继续执行。

通讯基础: D’Agent的高层通讯机制采用RMI,KiaML等不同的通讯方式,它的服务程序是多线程的,每个代理在单独的进程中执行,这种方式简化了实现,但增加了进程间的通讯开销。

容错服务:Agent可以存储在物理介质上,以防止意外。

安全服务:D’Agent用公钥系统来对Agent进行身份认证,用静态资源管理来管理Agent对资源的访问,不但可以授权访问某种资源,还可以限制使用。

通信服务:支持异步或同步通信模式。

生命周期服务:支持复制克隆和远程创建等操作。

2.Aglet

Aglet是由日本IBM公司用纯JAVA开发的移动Agent技术,并提供了实用的平台-----Aglet Workbench,让人们开发或执行移动Agent系统。到目前为止,Aglet是上述出现实例中最为成功和全面的系统之一,主要表现在以下几个方面:

(1)提供了一个简单而全面的移动Agent编程模型。

(2)为Agent间提供了动态而有效的通信机制。

(3)提供了一套详细且易用的安全机制。

Aglet这个词是由”Agent”和”applet”两个字合成的。简单地说,Aglet就是具有Agent行为的Java applet对象。但Aglet同时传送代码及其状态,而applet只传送代码。Aglet以线程的形式产生于一台机器上,可以随时暂停执行的工作,而后整个Agent可以被分派到另一个机器上,再重新启动执行任务。因为它占用的是线程,所以不会消耗太多的系统资源。

3.Concordia

Concordia系统也是基于JAVA语言开发的一个移动Agent系统,它由Agent Manager,Security Manager, Queue Manager,Event Manager和Service Bridge模块组成。在每个网络节点上,Concordia都在运行Java虚拟机上的服务器,负责Agent的移动,持久性,安全,通讯等工作。Concordia 注重系统的安全性和容错性,系统安全保护措施是双向的,既保护节点资源又保护移动Agent本身。Concordia 对Agent的权限限制主要由使用者决定,这是它和Aglet系统的一个区别。Concordia 的通讯利用现有的TCP/IP通讯服务,其通讯模块提供的是异步通讯模式,没有提供同步通讯模式,这是该系统的一个不足之处。

4.Voyager

Recursion公司的Voyager可以看成是一个增强了的对象请求代理(ORB),同其它移动Agent系统相比,Voyager与Java语言的结合更加紧密,既可用于开发移动Agent系统,也可用于创建传统的分布式系统。Voyager是一个纯Java分布式计算平台,可用来迅速生成高性能分布式应用程序,是代表当前技术水平的一个优秀的移动Agent开发平台。

5.Grasshoper

Grasshoper是目前第一个符合MASIF标准,也是目前唯一符合MASIF和FIPA标准的,基于JAVA的移动Agent系统。 Grasshoper环境包括代理处(Agency)和域注册器,通过专有的ORB(Grasshoper ORB)互联。Agency(相当于MASIF中的Place)是代理实际的运行环境,数个Agency结合构成域,还可以通过JAVA RMI和Socket连接进行通讯。整个通讯结构实现采用插件技术,具有很好的扩充性。在容错服务方面,系统崩溃之后可以从存储介质中恢复Agent的原来执行状态.安全身份证用X. X09证书实现,传输中的安全性由SSL来保证,访问控制通过用户定制的安全管理来完成,实现了数字鉴名。通讯服务支持异步或同步的通讯,动态消息机制和多点发送:生命周期支持复制远程创建和克隆等操作。

2.2 移动Agent支撑平台Aglet

1.Aglet系统框架

Aglet的系统框架如图2.1所示:


图2.1 Aglet的系统框架

首先当一个正在执行的Aglet想要将自己迁移到远端时,会对Aglet Runtime层发出请求;接着Aglet Runtime层将Aglet的状态信息与代码转换成序列化的字节数组。这时如果成功,系统会将字节数组传送至ATCI(Agent Transport and Communication)接口,ATP是一个简单的应用层协议。接着,系统会将字节数组附上相关的系统信息,如系统名称以及Aglet的id等,并以比特流方式通过网络传至远程机器,远程机器通过ATCI层提供的ATP接口,接收到系统传来的字节数组及系统信息;最后,Aglet Runtime层对字节数组反序列化,得到Aglet的状态信息与代码,此时Aglet可以在远程机器上执行。

2.Aglet的生命周期

Aglet系统提供一个上下文环境(context)来管理Aglet的基本行为,包括创建(create)Agent、复制(clone)Agent、分派(dispatch)Agent到远端机器、召回(retract)远端的Agent、暂停(deactive)、唤醒(active)Agent,以及清除(dispose)Aglet等,其过程如图2.2所示:


图2.2 Aglet的生命周期

3.Aglet工作台及Aglet的包结构

Aglet工作台是一个可视化环境,它被用来建立使用移动Agent的网络应用。目前它提供的工具包括:

(1)移动Agent的框架。

(2)ATP-----Agent传输协议。

(3)Tazza-----可视化地开发应用所需的个性化的移动Agent。

(4)JDBC-----用于访问DB2数据库。

(5)JoDax------访问单位的数据。

(6)Tahiti-----可视化Agent的管理页面。

(7)Fiji-----通过在WEB页面上对Agent实行生命周期控制。

Aglet包含如下几个包:

com.ibm.Aglet:这个包定义Aglet的一些接口以及提供管理Agent上下文环境,以及信息的发送和接收的常用方法。

com.ibm.Aglet.event:此包实现了对象模型中的生命周期。

com.ibm.Aglet.system:主要是管理Aglet运行层的一些函数。

com.ibm.Aglet.util:提供一些公共类,如letAudioClip。

com.ibm.Aglet.patterns:包含常见的消息传递模式,如Master-Slave、Notifier-Notification等。

3 Aglet实战

3.1 案例需求

分布式计算实现矩阵乘法。

在局域网中两台机器,一台为Master,一台为Slave。Master创建Matrix类,并创建Calculator类,发送到Slave机器上运行。Master机器将Slave机上运行完成后的Agent回收(结果),再和本机上的运行结果合并,并显示出最终结果。

3.2 程序实现

package examples.Matrix;

import com.ibm.aglet.*;

import com.ibm.aglet.event.*;

import com.ibm.aglet.util.*;

import java.lang.InterruptedException;

import java.io.Externalizable;

import java.io.ObjectInput;

import java.io.ObjectOutput;

import java.io.IOException;

import java.net.*;

import java.awt.*;

import java.awt.event.*;

import java.util.Enumeration;

/**作者:张华**/

public class Matrix extends Aglet {

transient MyDialog my_dialog = null; //没有串行化

URL dgp = null;//客户端地址

String message = null;

//矩阵初始化

int matone[][]=new int[10][10];

int mattwo[][]=new int[10][10];

int matthr[][]=new int[10][10];

boolean Flag;//设置标志量

int all = 0;

AgletProxy outer;//Agent客户机地址

//设置初始窗口

public void onCreation(Object init) {

Flag=true;

setMessage("Choose remote machine and GO!");//窗口显示信息

createGUI(); //创建窗口

}

//创建窗口

protected void createGUI(){

my_dialog = new MyDialog(this);

my_dialog.pack();

my_dialog.setSize(my_dialog.getPreferredSize());

my_dialog.setVisible(true);

}

//窗口显示信息

public void setMessage(String message){

this.message = message;

}

//处理信息

public boolean handleMessage(Message msg) {

if (msg.sameKind("Finish")) {

OutPut(msg);

} else if (msg.sameKind("startTrip")){

startTrip(msg);

} else{

return false;

};

return true;

}

//报告已经返回并销毁

public void OutPut(Message msg) {

setText("output begin");

while (Flag){

waitMessage(5*10);

};

my_dialog.msg.append("/n"+msg.getArg("answer").toString()+"/n");

}

public synchronized void startTrip(Message msg) { //到达远程机器

String destination = (String)msg.getArg(); // 得到远程机器地址

// 客户端得到 Agent 的内容

try{

outer=getAgletContext().createAglet(null,"examples.Matrix.Calculator",getProxy());

}catch(Exception e){setText("wrong!");};

try{

dgp=new URL(destination); //dgp 为客户端地址

}catch(MalformedURLException e){setText("wrong!");};

try{

outer.dispatch(dgp); // 发送到客户端

}catch(Exception e){setText("wrong!");};

matrixrun(); //本机上任务开始运行

}

//本机上程序

public void matrixrun(){

setText("matrixrun begin");

for (int x=0;x<10;x++){

for(int y=0;y<10;y++){

matone[x][y]=1;

mattwo[x][y]=1;

matthr[x][y]=0;

}

};

for (int x=0;x<5;x++){

for (int y=0;y<10;y++){

for (int z=0;z<10;z++){

matthr[x][y]=matthr[x][y]+matone[x][z]*mattwo[z][y];

}

}

};

Flag=false;

String result="";

for (int x=0;x<5;x++){

for (int y=0;y<10;y++){

result=result+"A["+x+"]["+y+"]="+matthr[x][y]+" ";

}

}

//打印本机结果

my_dialog.msg.append("The result shows down:"+"/n"+result+"/n"+"Local is over!");

setText("matrixrun over");

}

}

//MyDialog 窗口

class MyDialog extends Frame implements WindowListener, ActionListener{

private Matrix aglet = null;

//下面是一些GUI组件

private AddressChooser dest = new AddressChooser();

public TextArea msg =

new TextArea("",10,20,TextArea.SCROLLBARS_VERTICAL_ONLY);

private Button go = new Button("GO!");

private Button close = new Button("CLOSE");

//创建对话窗口

MyDialog(Matrix aglet) {

this.aglet = aglet;

layoutComponents();

addWindowListener(this);

go.addActionListener(this);

close.addActionListener(this);

}

//组件的布局

private void layoutComponents() {

msg.setText(aglet.message);

GridBagLayout grid = new GridBagLayout();

GridBagConstraints cns = new GridBagConstraints();

setLayout(grid);

cns.weightx = 0.5;

cns.ipadx = cns.ipady = 5;

cns.fill = GridBagConstraints.HORIZONTAL;

cns.insets = new Insets(5,5,5,5);

cns.weightx = 1.0;

cns.gridwidth = GridBagConstraints.REMAINDER;

grid.setConstraints(dest, cns);

add(dest);

cns.gridwidth = GridBagConstraints.REMAINDER;

cns.fill = GridBagConstraints.BOTH;

cns.weightx = 1.0;

cns.weighty = 1.0;

cns.gridheight = 2;

grid.setConstraints(msg, cns);

add(msg);

cns.weighty = 0.0;

cns.fill = GridBagConstraints.NONE;

cns.gridheight = 1;

Panel p = new Panel();

grid.setConstraints(p, cns);

add(p);

p.setLayout(new FlowLayout());

p.add(go);

p.add(close);

}

//事件的处理

public void actionPerformed(ActionEvent ae){

//对“go”按钮的处理

if("GO!".equals(ae.getActionCommand())){

aglet.setMessage(msg.getText());

msg.setText("");

try{

AgletProxy p = aglet.getProxy();

p.sendOnewayMessage(new Message("startTrip", dest.getAddress()));

}catch(Exception e) {

e.printStackTrace();

}

}

// 对“close”按钮的处理

else if("CLOSE".equals(ae.getActionCommand())){

setVisible(false);

}

}

public void windowClosing(WindowEvent we){

dispose();

}

public void windowOpened(WindowEvent we){

}

public void windowIconified(WindowEvent we){

}

public void windowDeiconified(WindowEvent we){

}

public void windowClosed(WindowEvent we){

}

public void windowActivated(WindowEvent we){

}

public void windowDeactivated(WindowEvent we){

}

}

//Calculator.java

package examples.Matrix;

import java.lang.InterruptedException;

import java.io.Externalizable;

import java.io.ObjectInput;

import java.io.ObjectOutput;

import java.io.IOException;

import java.net.*;

import java.util.Enumeration;

import com.ibm.aglet.*;

/**作者:张华**/

public class Calculator extends Aglet{

AgletProxy proxy=null;

int matone[][]=new int[10][10];

int mattwo[][]=new int[10][10];

int matthr[][]=new int[10][10];

public void onCreation(Object init){

setText("creation begin");

try{

proxy=(AgletProxy)init;

}catch(Exception e){setText("wrong!1");};

}

public void run(){

setText("Calculator begin");

for (int x=0;x<10;x++){

for(int y=0;y<10;y++){

matone[x][y]=1;

mattwo[x][y]=1;

matthr[x][y]=0;

}

};

for (int x=0;x<5;x++){

for (int y=0;y<10;y++){

for (int z=0;z<10;z++){

matthr[x+5][y]=matthr[x+5][y]+matone[x+5][z]*mattwo[z][y];

}

}

};

String result="";

setText("sendonewaymsg begin");

//客户端上从5开始

for (int x=5;x<10;x++){

for (int y=0;y<10;y++){

result=result+"A["+x+"]["+y+"]="+matthr[x][y]+" ";

}

};

//将结果返回到主机

try{

Message msg=new Message("Finish");

msg.setArg("answer",result);

System.out.println(msg.getArg("answer"));

this.proxy.sendOnewayMessage(msg);

}catch(Exception e){setText("wrong!2");};

}

}

3.3 代码分析

在实现中,我们采用了主从(master-slave)模式,这是aglet支持的众多模式中的一种,它充许主aglet把任务派发(dispatch)给从aglet,从aglet携带代码与状态移动到指定的目的主机上,与当地数据资源结合进行计算后,再将计算后的结果返回给主aglet

1.首先,通知主Agent向某个从Agent发送调用命令。

//主Agent的代理

AgletProxy p = aglet.getProxy();

//向主Agent发送消息,

p.sendOnewayMessage(

new Message("AgletClient1", “atp://localhost:82”));

Aglet与Aglet之间的通信,是使用消息传递的方式来传递消息对象的。此外,基于安全上的考虑,Aglet并非让外界直接存取其信息,而是透过一个代理(proxy)提供相应的接口与外界沟通。这样做有一个好处,即Aglet的所在位置会透明化,也就是说Aglet想要与远端的Aglet沟通时,只在本地主机的上下文环境中产生对应远端Aglet的代理,并直接与代理沟通即可,不必直接处理网络连接与通信的问题。

2.进入消息循环。

public boolean handleMessage(Message msg)

{

if (msg.sameKind("Finish"))

{

processRosponseResult(msg);

}

else if (msg.sameKind("AgletClient1"))

{

processAgletClient1(msg);

}

else

{

return false;

};

return true;

}

无论是主Agent还是从Agent都要继承自Agent类,并且要覆盖超类Agent类的消息循环处理函数handleMessage(),比如说现在收到的消息为AgletClient1,那么将要执行processAgletClient1(msg)方法。

3.在消息处理函数中,首先从环境(Context)中取得从Agent在本地的代理,然后将从Agent派发到目的主机上。


图3.1 消息处理方法

4.从Agent与当地主机上的数据资源结合经过计算,并通过消息返回计算结果。


图3.2 从Agent代码片断

3.4 运行程序

1) 从网上下载Aglet框架。我下载的是:aglets-2.0.2.jar

2)解压: jar xvf aglets-2.0.2.jar ( 注意:不能安装在中文目录下 )

clip_image011

3) 执行ANT命令:

clip_image013

4)设置Java policy:


5)设置环境变量:

AGLETS_HOME= E:/java/aglets2.02

AGLETS_PATH=%AGLETS_HOME%

PATH=%PATH%;%AGLETS_HOME%/bin

6) 将编译后的代码放到 %AGLETS_HOME%/public 目录下去,如下图:


7)启动Aglet (默认用户名是anonymous, 默认密码是:aglets)

clip_image019

启动后的Agent平台如下图所示:

clip_image021

8)创建主Agent (也就是Matrix类),点击“Create”按钮后如下图:


在上图中的Aglet name处输入Matrix类的全路径名(包名加类名),然后点击Create按钮,如下图:


9)将从Aglet发送到Slave机器上去执行运行,并回收结果。

在Adress处输入从Aglet的地址:atp://localhost:4434

( 注意:因为我的是本机,所以写的是 localhost, 确保从 Agent 机器上开启 Aglet 服务 )

运行后的结果如下图所示:


10) OK

4 移动Agent技术在JEE集群统一管理中的应用设想

移动Agent的代码是可以在各个域机器上移动,并结合本地机器资源进行计算的。

1)采用移动Agent的master-slave结构可以实现集群的集中式管理。比如说,在集群主结点机器上部署一个应用之后(相当于Aglet中的主Agent), 完全可以由从Agent将应用转换成字节流之后再移动到集群各从节点机器中自动部署,这样,这可以让用户部署集群应用时只部署在一台机器上就行了,提高了用户体验。

2)如果集群主结点想要了解各从结点的各类信息(如应用本身的状态信息、JVM的堆信息、甚至操作系统的内存CPU利用率等信息)都可以通过发送从Agent到从结点机器上采集信息后再返回得到。

3)如果主结点想要控制从结点(如启、停等等),在定义好协议之后,都可以通过从Agent代码移动到从结点机器上执行协议规定的相关操作即可。

4)如果移动Agent与ALI命令行框架相结合,所有管理操作都将可以在命令行中完成。

分享到:
评论

相关推荐

    quqi.rar_mtk_mtk software_mtk平台

    在移动通信领域,尤其是入门级和中低端智能手机市场,MediaTek平台的设备因性价比高、功能全面而受到广泛欢迎。随着智能手机技术的快速发展,MTK平台的多功能下载软件也日益成为用户维护和升级设备的重要工具。 MTK...

    视频播放源代码directshow开发

    DirectShow是微软开发的一种多媒体框架,用于处理音频和视频流。它主要用于开发视频播放器、视频编辑工具等应用程序。在DirectShow中,开发者可以利用其提供的组件和接口来实现音视频数据的捕获、处理、编码和解码等...

    dm8_setup_win64_ent_8.1.1.45_20191121.iso

    国内最好的数据库达梦DM8,曲奇网盘下载链接:https://quqi.com/s/1243222/wcOZdaWgUlHrwhOk

    网络流量采样在高吞吐量链路异常检测中的应用研究

    内容概要:本文探讨了高吞吐量网络链路异常检测中流量采样技术的应用及其效果。面对现代分布式信息系统频繁遭受的网络安全威胁,特别是互联网服务提供商(ISP)面临的威胁,作者提出一种通过减少数据采样频率以降低异常检测计算复杂度的方法。文中介绍了实验环境、系统架构、采用的数据聚合与采样方法以及用于检测异常的人工智能模型(基于自编码器神经网络)。通过对一个真实中型ISP生产环境中实际网络流量数据进行研究,该研究展示了即使在较低采样频率情况下仍能保持较高的异常检测准确性,尤其是针对持续时间较长的DDoS攻击更为显著。此外,论文还验证了所提系统的有效性和应用潜力,为构建高效的网络安全监控机制提供了新思路。 适用人群:对于计算机网络安全、数据分析或机器学习有兴趣的研究人员和从业人员,特别是那些专注于提高异常检测性能和应对高流量数据流的技术人员。 使用场景及目标:适用于希望在不影响业务操作的前提下引入额外层次防护措施的企业级网络管理员;研究者可参考本文中提出的流量预处理方式来探索不同的统计分布和采样间隔设置;企业可以通过部署该类系统快速响应潜在的安全事件并降低成本。

    unity ui画线插件

    unity ui画线插件

    比例公平性的下行链路资源分配在基于OFDMA的中继网络中的应用与优化(可复现,有问题请联系博主)

    内容概要:本文研究了在基于正交频分多址接入(OFDMA)的中继网络中进行带有比例公平性的下行链路资源分配问题。作者们通过联合优化中继选择、子载波分配和功率分配问题,并采用拉格朗日对偶分解方法求解这一复杂的NP完全问题。实验结果显示所提出的算法相较于启发式算法能显著提高系统吞吐量,并带来更好的用户间公平性。 适合人群:通信工程、无线网络优化、电信行业研发工程师和研究人员。 使用场景及目标:主要应用于提升4G移动通信系统的频谱效率及缓解频率选择衰落的问题,确保多用户之间的传输速率更加公平。同时适用于研究OFDMA技术及其相关领域的学者和技术专家。 其他说明:文中提供了详细的数学模型和模拟结果图表支持理论发现,并讨论了各种假设条件下的性能对比。此外还探讨了连续松弛技巧在解决NP完全问题时的应用价值以及通过调整算法参数来获得近似最优解的方法论意义。

    [程序系统设计]MATLAB打印纸缺陷检测GUI(不同缺陷类型,GUI界面).zip

    程序系统设计]MATLAB打印纸缺陷检测GUI(不同缺陷类型,GUI界面) [程序系统设计]MATLAB打印纸缺陷检测GUI(不同缺陷类型,GUI界面) [程序系统设计]MATLAB打印纸缺陷检测GUI(不同缺陷类型,GUI界面) [程序系统设计]MATLAB打印纸缺陷检测GUI(不同缺陷类型,GUI界面) [程序系统设计]MATLAB打印纸缺陷检测GUI(不同缺陷类型,GUI界面)

    邮件分拣组态王6.55和西门子S7-200plc联机程序2023,带io表,运行效果视频 ,邮件分拣; 组态王6.55; 西门子S7-200plc; 联机程序2023; IO表; 运行效果视频,邮件

    邮件分拣组态王6.55和西门子S7-200plc联机程序2023,带io表,运行效果视频 ,邮件分拣; 组态王6.55; 西门子S7-200plc; 联机程序2023; IO表; 运行效果视频,邮件分拣组态王6.55与S7-200PLC联机程序2023版:带IO表运行效果视频

    基于关系变化和跨时间差异注意力机制的遥感影像变化检测(可复现,有问题请联系博主)

    内容概要:本文提出了一种新的基于跨时间差异(CTD)注意力机制的变化检测方法(称为CTD-Former),用于高效地提取多时相遥感图像中的变化特征。作者重新审视了自注意力机制并深入挖掘多时间相位图像间的关系变化,构建CTD变压器编码器和解码器来增强这些特征。此外,还引入了一致性感知模块(CPB)以保护变化区域的空间结构。实验结果显示,在LEVIR-CD、WHU-CD和CLCD数据集上,该模型相比于当前最优的方法表现出更好的性能。 适合人群:对深度学习、遥感图像处理、尤其是变化检测感兴趣的研究人员和技术专家,特别是熟悉变换器网络架构的从业者。 使用场景及目标:此方法适用于需要从多时相对比遥感影像中识别变化情况的任务,如环境监测、灾害评估、城市规划等领域内的应用开发,能够帮助研究者和决策者更准确地了解地面物体随时间的变化趋势。 其他说明:源代码可在GitHub仓库中获取,这为未来的研究提供了一个重要的参考平台,有助于推动该领域的进一步发展。

    [matlab程序系统设计]MATLAB的视频图像去雾(处理视频,GUI界面).zip

    该项目是个人实践项目,答辩评审分达到90分,代码都经过调试测试,确保可以运行!,可用于小白学习、进阶。 该资源主要针对计算机、通信、人工智能、自动化等相关专业的学生、老师或从业者下载使用,亦可作为期末课程设计、课程大作业、毕业设计等。 项目整体具有较高的学习借鉴价值!基础能力强的可以在此基础上修改调整,以实现不同的功能。 欢迎下载,欢迎沟通,互相学习,共同进步!提供答疑!

    temp_sh.zip

    fajslghjlghg

    2008-2020年各省每十万人口高等学校平均在校生数数据

    2008-2020年各省每十万人口高等学校平均在校生数数据 1、时间:2008-2020年 2、来源:国家统计j、统计nj 3、指标:行政区划代码、地区名称、年份、每十万人口高等学校平均在校生数 4、范围:31省

    毕业设计&课程设计 基于STM32单片机基于RFID的电动车停车管理系统(软件源码+硬件资料+部署教程+功能说明+演示视频),高分项目,开箱即用

    毕业设计&课程设计 基于STM32单片机基于RFID的电动车停车管理系统(软件源码+硬件资料+部署教程+功能说明+演示视频),高分项目,开箱即用 用户 分为老师 及 学生 管理员 管理员 登录 用户管理 电动车管理 车卡rfid 电动车进出记录 挂失申请列表 解冻申请列表 补办列表申请 用户(只能管理自己的车) 注册(注册的时候选身份,选择学生或者老师) 登录 个人信息查看 电动车管理 进出校记录 挂失申请 解冻申请 补办申请

    无人机辅助旅行商问题的深度强化学习求解方法研究(可复现,有问题请联系博主)

    内容概要:本文探讨了一种新的基于深度强化学习的方法来解决旅行商问题与无人机组合优化(Traveling Salesman Problem with Drone, TSP-D),针对当前无人机辅助卡车配送中面临的协同调度难题进行了改进。研究者提出一种混合模型(HM),整合了注意力编码器和长短期记忆网络(LSTM)解码器的优势,从而有效地记录了多个车辆的动作序列并实现了协调路径规划。该方法在各种测试用例上展现了卓越性能,并能显著提高大型问题实例的计算效率,同时在实际应用场景如最后一步送货中有潜在的巨大价值。 适合人群:对物流系统优化和无人机应用有兴趣的专业人士,特别是从事最后一公里交付方案设计和技术实施的研究人员及工程师。 使用场景及目标:本研究所提出的深度学习框架主要适用于城市环境中复杂条件下的车辆和无人驾驶飞行系统的共同优化配置,目的是为了找到最优的货物递送方案,在最短的时间内完成所有的客户服务任务并返回起点。 其他说明:实验结果显示该算法在随机位置数据集和现实情况中的优越性超过了现有传统算法,表明它不仅能在简单理想情况下发挥良好效果,同样可以在更为复杂的条件下表现出稳定的性能。

    生活垃圾处理费征收管理系统产品介绍

    北京中启航向科技发展有限公司开发的城市生活垃圾处理费智慧征管系统,是一个全方位、一体化的解决方案,旨在协助城市管理部门高效、准确地收取生活垃圾处理费。该系统利用先进的人工智能和数据分析技术,实现垃圾分类、计量和收费的智能化管理,提升城市环境卫生质量,同时优化行政资源,提高征收效率。

    水测试试纸行业剖析:欧洲是全球最大的市场,占40%的份额.pdf

    水测试试纸行业剖析:欧洲是全球最大的市场,占40%的份额.pdf

    《电力电子技术(第5版)》王兆安-第2章-电力电子器件

    《电力电子技术(第5版)》王兆安_第2章_电力电子器件

    基于STM32的直流电机加减速正反转控制串口输出控制系统(P 1100009-基于STM32的直流电机加减速正反转控制串口输出控制系统(PCB 原理图 报告 源代码 proteus lcd1602)

    基于STM32的直流电机加减速正反转控制串口输出控制系统(P 1100009-基于STM32的直流电机加减速正反转控制串口输出控制系统(PCB 原理图 报告 源代码 proteus lcd1602) 功能描述:基于STM32平台 1、实现了电机控制正转、反转的功能 2、实现了电机控制加速、减速的功能 3、实现了串口输出控制信息的功能 4、串口可以模拟WIFI 蓝牙 RS232 等带有串口的功能。 资料包含: 1、源代码工程文件 2、仿真工程文件 3、lunwen报告1W字以上 4、原理图工程文件 5、PCB工程文件 ,核心关键词:STM32、直流电机、加减速、正反转控制、串口输出、控制信息、WIFI、蓝牙、RS232、源代码工程文件、仿真工程文件、原理图工程文件、PCB工程文件。,基于STM32的电机串口控制综合系统(含正反转、加减速及多种串口通信功能)

Global site tag (gtag.js) - Google Analytics