网络中应用移动Agent进行资源查找的研究论文摘要:高效率的资源查找与准确的资源定位是p2p网络中资源共享的重要前提。本文研究了p2p网络资源查找定位技术,在分析现有查找策略不足的基础上,提出了一种基于移动Agent的相对先进的新的解决方法,同时分析了该方法的优点并给出了实现策略。论文关键词:资源查找,移动1引言p2p(peertopeer)即对等连接或对等网络,与传统的C/S网络相比,该网络中没有服务器和客户端的区别,各终端地位对等,既充当服务器,向终端提供服务,同时也作为客户端,享用其他终端提供的服务。这种新的网络模式成为当前研究热点之一。p2p网络的本质决定了网络中各终端可以平等的共享网络中的各种资源,作为这样的分布式网络,高效率的资源查找和准确的资源定位无疑是十分重要。这也是提高网络可扩展性、解决网络带宽被吞噬的关键。2采用移动agent机制的对等网络资源查找技术2.1对等网络资源的查找机制及其缺陷目前,对等网络资源查找机制通常可以分为两种,分别是集中式搜索和分布式搜索。在前者中,所有共享资源分别存放在提供资源的客户端上,有“中心服务器”存储网络中共享资源的描述信息以及回答查询信息。在这种搜索方式中,用户节点向中心服务器发出查询所需资源的信息,查到后会获得提供服务的节点地址,根据相应的地址向提供该资源的节点发出请求,然后进行对等节点连接,而进行资源下载,而不经过中央服务器。这种方式的搜索非常依赖服务器,同时中心服务器的存在会造成网络瓶颈,以致网络健壮性差。与这种方式相反的是分散式搜索,取消了中心服务器,任何一个节点的逻辑地位都是相同的,资源分布在网络各节点中,整个网络负载均衡,当一个用户需要查询文件时,首先向其相邻所有节点发送相关查询信息,相邻节点收到信息后查找本地是否有符合要求的资源,如果有,就给与响应,发回反馈信息;如果附近节点没有被请求资源,就转发收到的请求到与自己相邻的或已知的其他节点。分布式搜索虽然摆脱了集中制的弱点,但是也有自身的缺陷,在这种环境下,节点的接入与删除行为频繁发生,各节点提供的服务和保存的资源等信息不能及时更新,需要更频繁的查询,另外,这种查找方法实际是泛洪方法,需要遍历整个网络,带宽占用成指数增长,大量吞噬带宽,容易造成网络堵塞,严重影响网络质量。2.2移动Agent技术及其在资源查找上的优越性移动Agent(mobileagent)是一个能在异构网络中自主地从一台主机迁移到另一台主机,并可与其agent或资源交互的程序,实际上是它是Agent技术与分布式技术相结合的产物。Agent研究起源于人工智能领域,与现在流行的软件实体如对象、构件等相比,代理的粒度(指实体大小)更大,智能化更高。随着网络技术的发展,可以在网络中移动并执行,完成某些功能,这就是移动Agent的思想。它是一种适应大型异构网络的分布式模型,各节点主机运行代理程序,负责移动代理的接受、发送,并为移动Agent提供执行环境和相应的资源。移动Agent具有自身的行为、数据、运行状态和路线,并且将其行为、数据、运行状态和路线进行捆绑,作为一个独立的单元对象,通过其派遣和回收机制,实现在网络节点之间移动,以达到数据、信息的获取和传输的目的。利用移动Agent技术将多次的远程调用以移动Agent形式打包,将其派遣到目的主机上进行本地交互,最后再将结果返回,这样可以减轻网络负载;对那些重要的实时系统而言,系统需要对环境的变化作出时反应。常规的基于网络的集中式控制方法对网络出现延迟时常常难以满足实要求,但移动Agent技术提供了一个较好的解决方法,因为移动Agent可以从中心服务器被传送到各节点执行,并对所出现的各种情况进行及时处理,同时,这些Agent还可以执行来自中央服务器的指令,这种处理方式可以克服网络隐患。移动代理具有异步性,因此当一个移动代理被派遣到被派遣带远程主机执行资源搜索任务时,创建点主机可以继续其他的操作而不必等待,甚至不用与之保持联机状态,移动代理具有自治性。这是一个非常适合网络资源发现的性质。移动代理可以具有学习功能,随着不断的派遣处理过程不断学习。比如,移动代理可以访问其开始时并不知道的节点并将其加入历史记录,在以下的漫游中进而根据历史记录与当前的节点情况做出自主的判断.大大提高资源发现的效率。移动代理还可以迅速地被复制和派遣带网络中的任意节点在过程中即使一些代理被销毁.其他的代理也可以继续处理这可以保证资源发现任务可以被最快速的完成。基于移动代理的资源发现方法的以上这些优点是一般的P2P网络资源发现技术难以比拟的.具有明显的优越性。3基于移动agent机制的对等网络资源查找方法与模型的实现对等网络应用移动代理之后,各节点需要在网络资源查询时生成移动agent并将其派遣到各节点执行任务,agent的运行需要环境的支持,这里我们采用Aglet软件开发工具包ASDK(AgletsSoftwareDevelopmentKit)来实现agent运行平台。Aglet是由日本IBM公司用纯JAVA开发的移动Agent技术,并在1996年公布了开发平台——AgletsWorkbench,1998年又提供了人们开发或执行移动Agent系统的Aglets软件开发工具包ASDK,它提供了一个简单而全面的Aglets编程模型,并提供了动态和有效的通信机制,是很有实际应用意义的良好的移动Agent开发平台。文中的对等网络资源查找模型是建立在现有的Aglets基础上的。3.1基于移动Agent节点查询算法采用的算法用来决定移动代理在P2P网络中搜索的具体动作;具体步骤如下:(1)当某节点需要查找网络资源时,节点首先在自己的资源记录中进行本地查询,如果查询命中,则直接与资源提供者通信,建立连接;否则,创建并启动自己的移动Agent,代理将创建点的地址作为主地址,并通过创建节点的相关信息更新自身;同时,根据代理创建点前所能访问的最多的节点数作为其漫游时间参数T,确认任一节点代理能被复制的次数参数N,这两个参数用来控制网络搜索的深度和广度及最大的代理访问节点数;(2)首先给予代理一些参与网络的节点地址,要求提供的节点占地址数应小于参数N(3)移动代理能够自我复制足够多次。使得代理能被派遣到每个节点处。(4)到达每个节点后,移动代理的漫游时间参数T开始计时,根据代理本身携带的创建点相关信息更新该节点,如果来着同一创建点的代理相继到达该节点,则后一个代理自动销毁,这样可以在保持信息更新的同时避免来着同一创建点的的代理对节点的重复处理,减少网络负担。(5)如果参数N到期,则移动代理自动返回创建节点,根据在漫游中得到的所有信息更新创建点信息;如果参数N还没有到期,则移动代理继续复制足够多次并将其派遣到当前节点已知的所有节点处,访问范围逐渐减少,直到发现资源。(6)重复步骤(1)。因为网络中的节点只有发出请求和接受请求两种状态,可以用参数i、j来表示网络用节点的行为。参数i用来表示节点的状态,如果i等于0;则节点保持沉默,等待接受其他节点发送过来的agent以查找相应的资源,如i不等于0,则表示此节点发出agent,请求在其他节点中查找相应的资源。参数j用来记录当前节点所知道的网络节点信息。ijif(i=0)silent,elsequeryaddress如果某节点需要查找相应的资源,首先在它自身所保存的节点信息中查找,如查找失败,就创建并启动一个移动代理,我们仍然用两个参数T、N来描述每个移动代理的行为。参数t用来记录某个移动代理已经访问的节点个数;参数N保存此移动代理被复制的次数。当某个移动代理被发送,访问到某个节点时,首先核查相似的移动代理是否已经访过此节点,然后检查参数T、N是否满足。移动Agent访问策略图1所示:图1移动Agent访问策略按照此查找机制,下面给出移动代理类的基本框架:PublicclassMAimplementsjava.io.Serializbale{private:MAStatusstatus;//thestatusofmobileagentStringaddressId;//Idaddressofthesponsorofthemobileagentintport;//theserverportintt;//theroamingtimesexpressedbythenumbersofnodesthemobileagentvisitedpubilc:MA();//defaultconstructor,MAmeansmobileagent;…….onArrival(MobilityEventmobilityevent);//arriveddestination,executingonDispatching(MobilityEventmobilityevent);//afterexcuted,changingthedirectionOnReverting(MobilityEventmobilityevent)://returntheresult……};3.2模型框架借助Aglet软件开发工具ASDK来实现所提出的资源查找模型,它是以现有的Aglets类框架为基础的,模型的类结构如图1所示:DiscoveryAglet:即为在网络中游弋的移动代理,它由ASDK提供的类继承而来,以上节点发现算法在DiscoveryAglet中实现,而且其中的方法要求是不可重载的。但DiscoveryAglet可被继承使之能执行某些特殊的关于所搜索的节点的类型的动作。ASDK通过串行化代理程序来实现其移动性,在一个Aglet被串行化之前,它必须把为了正确地被复活而需要知道的所有状态数据都放到实例变量里,它不能把这些信息的任何一部分遗留在堆栈中,因为执行堆栈不会在Aglet的新生命中被复制,因此,当DiscoverAglet主机会通知DiscoveryAglet:它将被串行化,以便其做好准备,即它必须把它复活后继续正确的执行所需要的信息都放在实例变量中。而因为实例本身是JAVA虚拟机包含的的标准数据类型及类构成,所以DiscoveryAglet没必要串行化相关数据类信息,这保证了DiscoverAglet足够小并节省了时间和带宽资源。AgletContext:是一个ASDK所带的Context类对象,它提供了DiscoveryAglet执行环境;在一个统一的执行环境中,它提供了一个方法来维护和管理运行的DiscoveryAglet,在该环境中主机系统免受恶意Aglet的侵害,并实现不同Aglet间的通讯,在一个计算机网络中的一个节点可以运行多个服务器,每个服务器可以拥有多个Context,为了区分它们,Context必须被命名,这样我们通过组合服务器的地址和它们的名字来确认它们的身份和位置。PeerResource:是一个保存当前节点所有资源信息的类;它在被初始化后放置于AgletContext中,因此在AgletContext中的移动代理都可以访问它,PeerResource类包含了某些不可重载的方法,来提供资源的强制功能性,进而地,这种功能性被基于SNMP的某些特征扩展,PeerResource对象能通过将字符串值作为键来存储资源信息的对象,能通过给定正确的键来检索对象,并能提供键值的枚举,PeerResource能被继承,以允许某些节点的特殊类型能为某些类型的移动代理扩展特殊的功能性。PeerApplication:是一个能将以上所有软件组件打包的单机JAVA应用程序,它有可能应用ASDK所带的默认移动代理服务器Tahiti。也可能是一个能被用于操作PeerResource的固定代理。在本模型中,我们创建一个嵌入式Aglet服务器,它包含一个嵌入式移动代理服务器类和DiscoveryAglets应用的所有功能,这使得一个应用程序使用者能方便迅速的P2P应用程序和DiscoveryAglets相结合。模型的类结构图如图2所示:图2模型的类结构3.3仿真与分析这里通过仿真来分析基于移动Agent的资源查找模型的性能。设pathlengt