Aglets中的设计模式分析研究
2009-08-20
作者:胡 涛 王汝传
摘 要:对移动代理系统Aglets的应用体系结构、类结构及应用设计进行了讨论。
关键词:移动代理 Aglets系统 设计模式
随着Internet用户的急剧增加,人们对网络技术和网络应用给予了更多的关注。传统的分布式计算模式因其灵活性差、系统扩充和升级代价较高而无法适应新的分布式计算要求。新技术的发展和应用需要新的具有革命性进步的计算模式,而基于移动代理的计算模式便是这样一种很有前途的计算模式。移动代理可被看作是传统通信机制的一种扩展。由于移动代理模式的特殊优势是能明确控制代码在何处运行,因此特别适用于诸如万维网这样的动态异构网络环境。移动代理拥有很多优点,如减少网络流量、增加客户机和服务器的异步性、便于负载均衡和容错、支持移动客户和服务定制等。它在通信网络管理、智能网领域、Internet上的智能信息检索以及分布计算领域有着广泛的应用前景。
Aglet是由IBM日本公司用纯JAVA开发的移动Agent技术,它提供了Aglet Workbench平台,供人们开发和实施移动Agent系统。Agent是一个较为成功的移动代理系统,它主要提供了一个简单而全面的移动代理编程模型,为代理间提供了动态和有效的通信机制,并提供了一套详细而简易的安全机制。简单地说,Aglet就是具有Agent行为的Applet对象。
设计模式是面向对象设计的复用。研究设计模式的目的就是为了使人们更加简单、方便地复用成功的设计和体系结构。具体地讲,一个设计模式包括模式的名称、问题范围、解决方案和效果,它主要应用于基于OO的设计。目前已知的设计模式包括3类23个模式。
Aglets是一个面向对象的系统,它拥有一个比较明晰的类体系结构和一套完整的对象应用解决方案。研究Aglets的设计模式有助于人们更加充分地认识移动代理系统从理论走向应用所需要解决的问题,有利于对Aglets系统的充分应用,也有利于认识到Aglets的不足之处,为发展出更好的移动代理应用体系结构打下基础。
1 Aglets系统简介
1.1 Aglets的应用体系结构
Aglets的体系结构如图1所示。Aglet的执行分为若干阶段。首先当一个正在执行的Aglet要到达远端时,它会对Aglet Runtime层发出请求;接着Aglet Rumtime层把Aglet的状态信息与代码转化为序列化的字节数组。这时如果请求成功,系统会将字节数组传送至ATCI(Agent Transport and Communication Interface)层处理。此层提供可以使用ATP(Agent Transfer Protocol)的接口,这里ATP为一个简单的应用层协议,如图2所示。系统将字节数组附上相关的系统信息(如系统名称及Aglet的ID等)后以位流的方式通过网络传送至远端机器。远端机器利用ATCI层提供的ATP接口接收传来的字节数组及系统信息;然后Aglet Runtime层对字节数组进行反序列化操作,得到Aglet的状态信息和代码;最后Aglet在远端继续加载执行。
Aglets系统通过提供一个上下文环境(Context)来管理Aglet的基本行为。Aglets的生命周期行为包括创建(Create)、复制(Clone)、分派(Dispatch)、召回(Retract)、暂停(Deactive)、唤醒(Active)及清除(Dispose)等。图3为Aglets的生命周期行为图。
Aglet之间的通信可以通过消息实现,如图4所示。基于安全的考虑,Aglet不能直接访问,必须通过一级Proxy对象实现。并且这样做还可以使Aglet位置透明。也就是说,如果Aglet想与远端Aglet通信,则只需要在本地环境中生成远端Aglet的代理(Proxy)对象,并不需要知道对方的位置和处理网络通信等。
1.2 Aglets的主要类结构
在Aglets的编程模型中,涉及到的主要类有:com.ibm.aglet.Aglet、com.ibm.aglet.AgletProxy、com.ibm.aglet.AgletContext、com.ibm.aglet.Message、com.ibm.aglet.FutureReply。下面分别予以介绍。
(1)com.ibm.aglet.Aglet。这是一个抽象类,用于控制代理的生命周期行为。它定义了代理的基本行为方式,例如发送、创建等。所有在Aglets中生存的代理都必须从这个抽象类中继承。此外,Aglet类也用于访问与Aglet相关的一些属性。例如,可以通过Aglet.getAgletInfor()调用得到并访问一个AgletInfor对象,并访问与Aglet相关的一些静态属性和动态属性。
(2)Com.ibm.aglet.AgletProxy。在Aglet系统里,这个类是处理Aglet类的一般方法。出于安全方面的考虑,许多Aglet类的方法或者属性是不能直接访问的。如果要与这个Aglet通信,则必须通过一个AgletProxy对象来实现。AgletProxy相当于Aglet的一个外壳(参看图4)。当调用产生的时候,AgletProxy对象会通过SecurityManager决定是否允许这次调用。这样还能使得Aglet的位置透明。
AgletProxy对象可以通过下列几种方式获取:
①调用AgletContext.getAgletProxies()获取多个AgletProxy对象;
②通过AgletID作为参数调用取得相关的AgletProxy对象;
③将AgletProxy对象作为参数通过消息传送;
④将AgletProxy作为参数将对象传送至ContexProperty。
(3)com.ibm.aglet.AgletContext。这个对象用于将Aglet所处的环境映射到一个访问接口中,供Aglet访问。每个Aglet对象都可以通过getAgletContext()方法访问到该对象,并通过它调用一些系统功能,可以将它看做一个系统环境接口。
(4)com.ibm.aglet.Message。所有的Aglet通信都通过构造Message对象来实现。Message对象可以传送字符串和对象消息。Aglet之间可以通过Proxy对象发送消息,或者通过下面要介绍的FutureReply对象发送异步消息。消息接收方通过Aglet.handleMessage(Message msg)来处理消息。
(5)Com.ibm.aglet.FutureReply。这是一个接口,是用于传送异步消息并不阻塞当前执行线程的一种消息传送方式。它通过调用Proxy对象的sendAsyncMessage(Message msg)返回。
1.3 Aglets应用设计框架
Aglets提供了一个Aglet Workbench的可视化环境,用于建立和使用基于Aglets平台的网络应用系统。目前该软件主要提供下列几个方面的工具:
(1)Aglets框架:提供Aglets平台的基本功能框架。
(2)ATP:Aglet传输协议。
(3)Tazza:可视化应用所需的个性化移动Agent。
(4)JDBC:访问DB2数据库。
(5)JoDax:访问单位的数据。
(6)Tahiti:可视化Aglet管理界面,用于监视和控制Aglet的执行。
(7)Fiji:通过Fiji Applet使得用户可以在Web上监视Aglet Context,以便实现产生、分派、召回Aglet的功能。
2 Aglets设计行为方式分析
首先讨论在Aglet系统里中的行为方式(Behaviour Pattern)。
在Aglet系统中主要有3类行为方式:迁移方式、任务实现方式和交互方式。
(1)迁移方式
迁移是移动代理移动性体现的方式。在Aglets中它主要处理移动代理移动时产生的各种问题,如路由和通信质量。Aglets中有3种方式:
①Itinerary:负责到达目的地的路由,它维护着所有目的地的列表,定义路由策略,并能处理诸如目的地不存在等异常情况。
②Forwarding:提供发送所有的或者特定的代理到远端机器的机制。
③Ticket:负责管理服务质量和权限等问题。
(2)任务实现方式
任务实现主要是把任务分解给不同的Agent去执行。Aglets中有2种方式:
①Master-Slave:一种基本的任务实现方式。允许主代理把任务委派给从代理,从代理移动到指定的目的地,从而完成任务。
②Plan:用工作流的方式进行策划,让多个任务顺序或并行地在多个代理上执行。
(3)交互方式
Aglets中有5种提供Agent之间的交流通信的方式。
①Meeting:提供一种方式让二个或者多个Agent在指定的机器上运行和交互。从Agent的编程模型来看,Agent被派到会议地点的计算机与相关Agent进行交互。
②Locker:存储迁移暂时不需要的数据,以节省带宽。
③Messenger:用一个信使Agent在需要交互的Agent之间进行通信。
④Facilitator:通过公共通信设施进行询问通信。
⑤Organized Group:提供有效的机制,组合不同的Agent到一个通信网络中。这种通信机制使得一个任务可以划分给多个移动Agent实施。
Aglets中的应用主要在上述的行为方式下完成。上述的行为方式也决定了Aglets的类体系中的设计模式。Aglets的每一个行为方式所代表的类都是由一个或者多个模式设计而成的。例如:在AgletContext类中就体现了Singleton模式。
3 移动代理系统的设计模式
几乎所有面向对象的系统结构中,都会用到已知的模式或是已知模式的组合。下面介绍Aglets应用设计中几种主要的模式。
(1)Aglets对象结构中的模式
Aglets中类的设定都能体现出一定的设计模式。下面是几个明显的模式应用的实例。
①Proxy模式:出于安全等因素的考虑,在Aglets中不能直接访问Aglet对象,必须通过AgletProxy访问,同时还使得Aglet的位置透明。这种模式被称为Proxy的构造模式。
②Mediator模式:在Aglets中,各个Aglet之间的通信通过Message对象来实现。对于Message的实现和处理被封装在Aglet的实现中。这种模式使通信显得松散,实际上是一种Mediator模式的应用实例。
③Singleton模式:Aglets中的AgletContext对象是一个全局的对象,封装了系统功能。这样的对象只能有一个全局实例,因此在Aglets中通过系统内部的一次实例化完成。这是一个Singleton模式的应用。
④Bridge模式:FutureReply接口用来处理异步传送的消息。它应用了一个Bridge的模式,这个模式使得FutureReply的接口和实现无关。
(2)Aglets的行为方式中的模式
Aglets的行为方式都是多个模式的组合。下面分析Aglets中几个具有代表意义的行为方式和结构方式中使用的模式。
①迁移方式:这里可以将迁移方式理解为Aglet对象中对Aglet平台的一种遍历。因此在这个设计中,Aglets实际上应用了Visitor模式。
②任务实现方式:通过Aglet实现任务,也就是Aglet功能的体现。Aglet的主-从任务方式体现在类结构中。这里的结构模式是一种Bridge模式,这种结构方式使得从代理可以不受主代理的限制,独立地实现和替换。Plan的行为模式是一种Command模式,它构造一个任务列表。
③交互方式:主要是Message方式,应用了Mediator模式。这种模式使得对象之间形成松耦合关系。其他一些交互方式或多或少都是在Message基础上实现的。
(3)应用模式改进设计
脱离应用而单纯地描述模式会陷入一种误区。实际上是否应用设计模式是根据设计对象的要求来定的,并且在设计的过程中逐渐加入模式的应用。在应用设计模式时,必须尽量根据现有的模式进行应用,而不是去发现新的模式。事实上发现新的模式在现有情况下是非常困难的。
Aglets的设计总体来说是十分成功的。由于种种原因,本文并没有对Aglets的设计模式作完整的分析。通过分析Aglets的主要设计模式可以得出这样的结论:尽管是移动代理的系统,也仍然是在一个OO环境中的设计应用。因此,需要利用基于OO的设计方法来进行有关基于移动代理平台的应用系统。从这一点来看,通过应用设计模式来改进应用框架体系设计显得非常重要。
4 结束语
设计一个复杂系统时,设计模式非常重要。它可使设计者避免在同一类问题处理时耗费大量的精力去进行重复的思考。移动代理系统的特点决定了它是一个负责的多对象系统。在这样的系统中,如何设计类和对象的结构、行为、创建等是非常重要的。在设计移动代理应用体现框架的时候,合理地分析和应用设计模式对于系统的整体性能和设计成本等都具有重要意义。
Aglets是一个较为成功的移动代理系统。分析Aglets的设计模式,理解移动代理的设计和应用都具有重要意义。在未来的工作中,清楚地知道选择策略和设计的关系尤为重要。因此,需要继续研究移动代理系统中的设计模式。
参考文献
1 张云勇.移动Agent及其应用.北京:清华大学出版社,2002
2 Gamma E,Helm R,Johnson R et al.设计模式:可复用面向对象软件的基础.北京:机械工业出版社,2000