上一页 1 2 3
三、Concordile中Mobile Agent的迁移
Mobile Agent的迁移与分布式对象的交互及
Java Applet的
下载有着很大的不同。在基于CORBA或DCOM的分布式对象系统中,一个对象能够通过
网络远程地调用其他对象的方法。但是,在两个对象的交互过程,没有任何一个是移动的。WWW中Applet的下载也仅是提供了一种从
Web服务器把代码下载到Web浏览器的机制,并没有为相应状态信息的迁移提供任何机制。可以说一个Applet本质上并不是从服务器上迁移到浏览器上的,而仅仅是代码的下载,就象HTML页面的下载一样,因为下载的代码将创建一个对象,一旦该Applet被创建,它就只能呆在该浏览器上而不能移动。而Mobile Agent的迁移则不同,它在迁移的过程中不但携带着相应的代码,也将携带着有关的状态信息,如图二所示[3],另外,Mobile Agent还能根据用户的要求在网络上进行多次迁移。
在Mobile Agent的迁移过程中,其迁移计划是由路线来决定的。例如表1就定义了一个Mobile Agent的路线。根据该路线,该Mobile Agent将首先到达服务器Server1,在该服务器上执行方法method1;然后迁移到服务器Server2并执行方法method2;最后迁移到服务器Server3,执行方法method3。
在Concordia中,路线是一个完全独立于Mobile Agent的数据结构,在Mobile Agent的执行过程中,将在一个相对独立的地方对该Mobile Agent的迁移进行管理。这种模式能够为Mobile Agent迁移的定义和跟踪提供十分简单的机制。而且,系统还能够允许Mobile Agent在执行过程中更改它们的路线,从而大大提高了灵活度。
Agent的源代码 迁移中的Agent

表1 某Mobile Agent 的路线
另外,在Mobile Agent的迁移过程中还有可能遇到这种情况:即Mobile Agent迁移到某主机后发现它需要使用的一些相关类在该主机上并不存在。为了解决这个问题,Concordia使用了一种Push-Pull的方式来移动相应的代码。
Concordia的Pull模式和浏览器下载Applet代码的方式比较相似。在这种模式中,Mobile Agent在迁移过程中将携带一个其出发地的代码基地(codebase),一般情况下,这个代码基地将是一个Web服务器上的某个位置。当一台主机的Concordia服务器发现某一个 Agent所需要的代码在该主机上不存在时,它就向该 Agent的代码基地发出一个网络请求并下载相应的代码。通常情况下,该网络请求将是一个对 服务器的HTTP请求。
这种 Pull模式在有些情况下并不能很好的解决问题。例如,一个 Agent可能要到一个很远的地方,此时若发现缺少相关代码而发送网络请求将要付出很大的代价甚至无法完成任务。为了应付这种情况, Concordia允许用户或者开发人员在发射Agent时为它指出相关的类(related classes),这些相关的类将自动地和Agent一起迁移。除此之外,Concordia也提供了一种 Push的方式,在这种方式里,Agent使用到的一些类将和Mobile Agent一起在网络上迁移。
上一篇: 数据库的发展和现状
下一篇: 改变思路,从另一个角度使用多态
上一页 1 2 3