设为首页 加入收藏
   
     
   
科技•信息
 
支持多版本主动服务的主动网络执行环境
双击自动滚屏 发布者:admin 时间:2011-2-25 17:37:43 阅读:310次 【字体:

支持多版本主动服务的主动网络执行环境

 

  摘 要:
  执行环境是主动网络中各种应用、移动代码的编制、管理和运行的基础,本文提出了一种可以同时运行多版本主动程序和驻留多版本主动服务的主动网络执行环境。这个执行环境中的可编程单元在功能上按协议子树划分。在执行环境里,主动节点的功能易于扩充和升级。主动程序通过执行环境提供的接口可以访问自己所需要的特定版本的主动服务程序,执行环境对不同版本的主动服务程序的同时运行进行管理和版本名字映射。
  
  关键词:主动网络;执行环境;多版本并发;版本解析
  
  1. 引 言
  
  主动网是一种中间节点可编程,根据功能需要能动态扩充的新型网络结构,方便网络协议的调试和部署。主动程序和主动服务可以由用户和管理员动态通过网络驻留到网络设备上进行运行,这样可以及时地对网络设备进行升级与程序更新[8]。随着网络应用的逐步增多,主动网络也需要逐步升级和更新。其具体体现在主动程序和主动服务被逐步部署到主动网络系统中。因此有可能网络中各个节点驻留的主动服务的版本并不相同,网络中正在传输的主动包里包含的主动程序的版本也不尽相同。一般来说,一定版本的主动程序需要调用一定版本或兼容版本的主动服务,而且往往不同的主动程序在同一个主动节点上运行的时候要求不同版本的主动服务。本文在分析了主动网络原型-Softnet上,提出了一个支持多版本主动服务并发执行的执行环境。其目的是为了支持并管理不同版本的同一个主动程序和服务的并发执行。
  
  1984年Saltzer和Reed等的端对端观点(end-to-end argument)[1],提出了网络计算或功能的放置问题,对层次协议的设计起到了很大的作用。网络互联的性能取决于底层网络设备的转发性能和上次协议的性能。随着互联网络的逐步发展,网络设备的性能有了大幅度的提高,从kbps级发展到现在Gbps级,但网络协议由于需要标准化等一系列问题而发展迟缓,协议的更新大概需要10年左右。而且网络设备的更换也会带来较大的成本。主动网络[2]提出了一种反传统的中间节点可编程网络,网络计算或功能的放置有了很大的改变,计算可以动态部署到执行环境中执行。
  
  主动网是一种中间节点可编程,根据功能需要能动态扩充的新型网络结构,方便网络协议的调试和部署。主动程序和主动服务可以由用户和管理员动态通过网络驻留到网络设备上进行运行,这样可以及时地对网络设备进行升级与程序更新。
  
  随着网络应用的逐步增多,主动网络也需要逐步升级和更新。其具体体现在主动程序和主动服务被逐步部署到主动网络系统中。因此有可能网络中各个节点驻留的主动服务的版本并不相同,网络中正在传输的主动包里包含的主动程序的版本也不尽相同。一般来说,一定版本的主动程序需要调用一定版本或兼容版本的主动服务,而且往往不同的主动程序在同一个主动节点上运行的时候要求不同版本的主动服务。因此,需要主动节点支持多版本主动服务并发执行和驻留。其目的是为了支持并管理不同版本的同一个主动程序和服务的并发执行。
  
  定义一:主动服务(Active Service)[6],驻留在主动节点上的一块程序,可以提供一定的功能。有可能是一直在运行中后台程序,也有可能是一个程序包,可以被主动程序调用,主动服务又称为软设备。
  
  定义二:主动包(Active Packet),主动包包括包头(AP Header)、主动程序代码(ActiveCode)、程序所用参数(Parameters)和负载(Payload)四部分。其中参数是指需要随着主动包一起移动的,并由主动程序在运行时调用和产生的少量数据。负载是和传统网络包中和负载基本相同的概念,一般来说是大块需要传输的数据。
  
  定义三:主动程序(Active Application),主动程序是包含在主动包里的程序,在主动包通过主动节点的时候运行,它可以调用主动节点提供的各种服务,可以访问一定的资源,运行完毕,主动包可能被丢弃,可能被更改并转发,也有可能派生多个主动包。
  
  2. 主动服务程序间的依存关系
  
  在Softnet主动网络系统中,我们将主动服务程序按协议子树[3]进行划分。图2 是网络协议的分层结构图,圆圈代表协议,虚线代表协议的层次划分,从下到上形成一棵协议树[9],图中协议树用a[b[d],c[e,f]]表示。按协议层次划分是把协议树按层分成相应的可编程单元PU,PU分上下两个出口和两个入口,类似于传统网络计算或功能。
  
  按协议的处理路径把图2分成a[b[d]],a[c[e]],a[c[f]]三棵子树,Ia代表协议a的标识,在包中,协议标识和标识位置是不可分的,用Ai代表第i层协议标识位置值,{A1=Ia,A2=Ib,A3=Id}代表子树a[b[d]]的协议子树标识(protocol-subtree identification, PI)。
  
  协议子树的特点和划分原则为:
  
  (1) 协议子树之间没有公共的叶子节点;
  (2) 协议子树有共同的根结点,根结点为协议树的根结点;
  (3) 协议子树可以有共同的分枝点;
  (4) 协议子树可以有两个以上的PI;这里每棵子树定义为一个PU,a[c[e]]和a[c[f]]都是协议子树a[c[e,f]]的子树,所以a[c[e,f]]可以有{A1=Ia,A2=Ic,A3=Ie}和{A1=Ia,A2=Ic,A3=If}两个PI,但a[c[e,f]]和a[c[e]]不能分为两个PU而在同一个执行环境里存在。
  
  设协议子树标识P={PI0,PI1,…,PIn},PU标识D={DI0,DI1,…,DIm} (n、m为自然数,对任意一个PIi∈P,存在唯一的一个DIj∈D与PIi对应;对DIj∈D,除PIi之外,可以存在PIk∈P (PIk≠PIi)与DIj对应。
  
  图3是协议子树标识和PU标识的对应关系,图3(A)是传统网络协议协议子树标识和PU标识的对应关系,即所有的协议子树标识和一个PU标识DI0对应。经过协议子树的划分,可以得到图3(B)的对应关系,即多对一关系,我们按PU标识对图3(B)进行分类得到{PI0,PIn},{PI1,PI2},…;由于多对一的关系,每类之间没有公共元素。
  
  3. 多版本主动服务程序的名字解析
  
  在多版本主动服务程序的动态名字解析中,主动程序中使用的显示名字在主动网络程序执行的时候被动态地由实际的Java类名所替换,并且不同版本的主动服务程序都需要提供相应的访问接口以提供给主动程序来访问。
  
  3.1 主动服务程序的名字定义
  
  定义四:显示名字,指主动服务程序类的通用名字,不带任何版本号。
  
  定义五:版本名字,某个特定版本的主动服务程序类名,只带有主版本号,这样就确定了本版本主动服务程序所能提供的相关功能和其所依赖的的其他主动服务程序。
  
  版本名字::=显示名字 + 主版本号定义六:实际名字,带有主版本号和次版本号的主动服务程序类,这个类具体实现了本版本主动服务程序的相关功能。此版本号不同的同版本主动服务程序类只是实现上的不同。
  
  实际名字::=版本名字 + 次版本号3.2 名字解析的步骤从显示名字到具体的实际名字的解析需要如下两个步骤:
  
  1) 名字映射显示名字必须映射到版本名字,版本名字是指只带有主版本号的类名。这表示实现了特定的部分协议或一定功能的主动网络服务版本。版本名字是主动网络服务的基础,根据版本名字就可以知道当前主动网络服务所能提供的功能。在具体实现上,版本名字所表示的类是实际实现类的父类。
  
  2) 版本解析版本名字通过版本解析,得到实际名字。不同阶段对同一版本主动服务程序的不同实现由次版本号来区分。实现这个版本主动服务的程序可能存在多种版本。例如,每个实际版本表示调试或优化阶段的不同代码。版本解析的功能就是找到特定的带实现名字的程序来实现这个版本主动服务程序所要求的功能。
  
  3.3 执行环境中的实现
  
  在有些操作系统中,动态装载器可以将代码片断装载到正在运行的应用程序中去。这些代码片断一般以动态链接库的方式存在。这些库采用了一个标准的名字约定来表示版本和兼容信息。在Java语言里,实现了以单个类为粒度的动态装载。但是,这里没有名字约定和接口兼容信息。我们的动态类装载器将添加对名字映射和版本识别的支持。而且,还要支持对通配符所表示的版本名的支持。在我们的系统中,通配符表示的版本是最新的稳定版本。
  
  我们利用主版本和次版本两个版本号来标示不同版本的主动网络服务的Java类,其格式为:类名_主版本号_次版本号类名和主版本号相同的主动网络服务类在接口和功能上一致。随着此版本号的不同,表示着这个主动网络服务类在内部的具体实现算法上有不同,但却对外提供了同样的服务接口。次版本号可以使用通配符(*),这样表示的是任意一个可以运行的相同主版本号的主动网络服务。这时主动节点将会向代码服务器下载最新稳定版本的代码。如果同一个主动网络服务类的主版本号不一致,则表示它们在接口和功能上有较大的不一样,一般来说不能混用。但是主动网络服务的提供者应该尽量保证向后兼容。
  
  4. 主动程序访问多版本的主动服务
  
  主动包在到达主动节点后,其中的主动程序被主动节点提取。主动节点为这个主动程序建立一个临时的执行环境,这个临时的执行环境将提供给主动程序访问相应的资源的接口,包括CPU,存储器,网络和主动节点所提供的主动服务。如果这个主动程序所需的特定版本或兼容版本的主动服务程序代码在主动节点的本地代码库找不到,则主动节点将派生一个主动代码下载程序从特定的代码服务器来下载所需的代码。
  
  我们的主动网络系统采用Java来实现,Java的类装载器ClassLoader[7]是Java虚拟机用来装载class文件,定义类和接口,提供软件组件之间的名字空间分离,解决不同类和接口之间的符号引用。利用Java类装载器的名字空间分离方法,我们可以用不同的类装载器装载不同的主动程序,这样可以防止恶意程序访问其它主动程序和执行环境的数据。可以较好地提高控制主动网络系统的安全性。
  
  对不同版本的主动服务程序,我们采取相同的装载器。这是因为不同版本的主动服务程序是由同一个软件提供者所写,所以它们相互之间可以信任,不会造成访问冲突和安全性问题。同时运行中的不同版本的主动服务程序利用一个统一包装的接口提供不同的访问API,在Java中,这个是利用一个可以共享访问的Java接口来实现的。
  
  图5表示了利用Java不同的ClassLoader来装载不同类型的程序,并为主动程序提供访问主动服务程序的接口的示意图。ClassLoader下面列出的是这个ClassLoader可以装载的一些Java类的名字。实线箭头表示继承,虚线箭头表示Java中的实现某个接口。
  
  EE,FansAA,EE_ActiveService是抽象类,这几个抽象类由commonClassLoader装载。MyRealActiveService是由commonClassLoader装载的接口。FansEE,MyRealActiveServiceImpl是由FansClassLoader装载的一般Java类。TestAA1是由TestAA1ClassLoader装载的一个主动程序。这个TestAA1ClassLoader是shareClassLoader的子类,而shareClassLoader是commonClassLoader的子类。我们可以知道,MyRealActiveServiceImpl和FansEE可以相互访问,也就是由管理员发布到系统的主动网络服务和执行环境之间可以相互访问,在这种机制下,利用主动网络服务可以提升主动网络节点的功能。
  
  根据Java中ClassLoader的继承结构,一个类只能访问由相同的ClassLoader装载的和这个ClassLoader的父ClassLoader所装载的类。因此,在我们的结构中,TestAA1只能访问EE,FansAA,EE_ActiveService,MyRealActiveService这些抽象类和接口,不能直接访问FansEE,PacketManager,MyRealActiveServiceImpl等需要保护的类。而且TestAA1不能自行无限制地生成新的主动网络服务对象,只能是通过EE所提供的方法来使用所需要的主动网络服务。例如主动程序必须调用FansAA的getActiveService方法来取得所需主动网络服务的引用。这个方法只是简单地调用了EE的getActiveService方法。EE的这个getActiveService方法是一个静态方法,这个方法通过一个访问控制表限制主动程序对所需主动网络服务的访问,这个方法也要管理所有主动网络服务的一个列表。随着主动网络服务逐渐加入到这个主动网络节点中来,同时这些服务也加入到这个列表。主动网络服务的版本信息也同时加入到这个列表中。
  
  当主动网络程序在执行环境中执行时,如果需要访问特定的主动网络服务,必须指定需要访问的主动网络服务的名字和版本号。如果对主动网络服务的版本没有特殊的要求,则无需指定,这时执行环境将自动选择主动网络服务最新的稳定版本。例子程序片断如下: TestAA1ClassLoaderTestAA1TestAA2ClassLoaderTestAA2FANS ClassLoaderMyRealAPIImplFansEEPacketManagerShare ClassLoaderSome classesmaybe shared by AAsBootstrap ClassLoaderBootstrapJava classes (JRE)Common ClassLoaderMyRealAPIEE_APIEEFansAA图5. 主动程序访问主动服务/**调用父类的方法来利用名字取得特定版本的主动服务。
  
  * MyRealAS是一个主动服务的名字,由主动网络的所有者发布。
  3.1是主动网络程序的版本* 而实际上,主动执行环境中运行的主动服务程序可能有3.1,3.2两个版本。
  * 用户的这个主动程序就可以根据这个名字来使用这个3.1版的主动服务。
  */EE_ActiveService a = getActiveService ("MyRealAS","3.1");/**进一步检查这个主动服务是否是我们需要的主版本。
  */if (( a!=null ) && (a instanceof MyRealAS_3 )) {/**调用这个个主动服务的方法来完成特定的功能*/((MyRealAS_3) a).realproc();}
  
  5. 结论
  
  主动网络的一个重要特点就是实现协议的调试和动态更新,因此随着主动服务在实际的主动网络系统中进行的逐步调试和部署,必然涉及到不同版本的主动服务共存的情况。而在现有各个主动网络原型系统中均未对此作相应的研究。我们在原有主动网络系统中添加对多版本主动服务并发的支持。这样就提供了一个更加开发的测试与调试网络协议的平台,可以加快网络协议的更新。
  
  下一步的研究工作主要包括建立较完善的主动代码服务器系统,提供根据不同版本代码之间依存关系的打包下载方法,其中包括利用可靠多播来加快主动服务程序在整个主动网络中的更新。

上一篇|下一篇

 相关评论

暂无评论

 发表评论
 昵称:
 评论内容:
 验证码:
  
打印本页 || 关闭窗口
 
 

咨询电话: 13891856539  欢迎投稿:gmlwfbzx@163.com  gmlwfb@163.com
617765117  243223901(发表)  741156950(论文写作指导)63777606     13891856539   (同微信)

All rights reserved 版权所有 光明论文发表中心 公司地址:西安市碑林区南大街169号-6
CopyRight ©  2006-2009  All Rights Reserved.


  制作维护:中联世纪  网站管理
访问 人次
国家信息产业部ICP备案:陕ICP备17019044号-1 网监备案号:XA12993