APP下载

分布式系统环境下一种读写同步控制模型的实现*

2010-08-07李金忠唐卫东夏洁武王巧玲胡运全

制造技术与机床 2010年1期
关键词:同步控制中间件优先

李金忠 唐卫东 夏洁武 王巧玲 胡运全

(井冈山大学信息科学与传媒学院,江西吉安343009)

近年来,分布式并行计算已经成为解决科学研究和工程技术问题的崭新手段和方式。但在许多应用领域,由于其数据需要共享存储,且分布于网络链路上的各计算机间通常协同并行运行,因此解决分布式并行计算中的同步以确保所访问数据的一致性是一个重要问题。实践表明,分布式系统中的同步问题常常比单处理器或者多处理器系统中的同步更加困难[l]。

解决读写控制问题的策略很多,如管程、消息传递、事件等传统方法,但它们是较低级的同步机制,需要使用非常复杂的逻辑来解决,可理解性、可验证性等都不能让人满意[2]。而基于活动对象(Active Object,AO)的ProActive有着较高层次的并发特征,易于开发并行、分布式、多线程的应用程序,且易于安全地实现潜在的复杂的同步策略,可应用于不同的同步策略,且能在不阻塞正读或写的情况下为读操作或写操作指派不同的优先权。ProActive用来解决读写控制问题具有显著优势,显示出其高水平的同步能力。

基于此,本文将多个读操作和写操作分布在不同的主机上,给出了分布式系统环境下的一种读写同步控制模型。在Fedora 8操作系统下,利用ProActive中间件编写程序,通过XML部署描述器编写部署文件,配置SSH,仿真实现了该问题,使之能在多机多虚拟机上执行演示,为解决分布式并行计算中的同步问题提供了一种新方法。

1 读写同步控制模型

分布式系统是由自主计算机组成的,这些计算机一起工作,对用户来说就像是一个单一连贯的系统,其最主要目标是使用户能够方便地访问远程资源,并且以一种受控的方式与其他用户共享这些资源。维持共享数据的顺序一致性的同时能够处理共享数据上的并发操作,对于分布式系统而言是非常重要的[l]。分布式系统中,允许系统中各主机多用户同时并行读取共享存储数据,但当某个用户在写数据时,任何其他的用户既不能读也不得写该数据。它所满足的条件是:读/读允许、读/写互斥、写/写互斥,否则,将引起访问冲突,破坏数据的完整性、一致性、正确性,产生不安全性。

读写控制问题[2]是指保证一个写操作必须与其它写操作或读操作互斥地访问共享数据的同步问题。它是一类读写操作受限的同步问题。考虑到读操作和写操作争夺访问共享数据时可以具有不同的优先权,它可拓展出3种控制方式:读优先、写优先、公平竞争。对于读优先控制方式,当不断出现新的读操作时,会使得读操作结盟,长期占用垄断共享数据,导致写操作被“饿死”。而写优先控制方式中,当新的写操作继续产生时,会使得写操作结盟,长期禁止读操作,垄断共享数据,导致读操作被“饿死”。但在公平竞争控制方式中,尽管不断出现新的读操作或写操作,也只能按一定原则顺序推进执行,不会结盟垄断,也不会导致写操作或读操作被“饿死”。

图l为分布式系统环境下的一种读写同步控制模型,在该模型中,中间件层延伸到了m台主机上,且提供了相同的接口,由分布式计算来决定某台主机扮演协助者——控制器,以防止网络中的这些主机上的Readers和Writers执行操作上的冲突(写写操作和读写操作冲突)。

2 ProActive中间件

由法国的INIRA小组开发的ProActive[3]是基于并行、分布式和协同及多线程计算的网格中间件,同时是一个具有灵活性和安全性的基于主动对象模式的统一体系架构。

2.1 活动对象AO

AO是ProActive开发并行应用的一个活动和分布的基本单元,实际上是由两个对象组成:一个Body和一个标准的java对象。Body主要负责接收对AO的调用请求,并把他们加入请求队列中,和其他已经部署好的AO协同工作,且可以指定同步方式,默认情况下是FIFO.AO是在标准对象的基础上增加了位置透明、活动透明和同步三种功能。

2.2 同步性

ProActive提供一种高级同步机制的类库用于编写同步协作应用程序,通过创建ObjectForSynchronous-Call类的AO控制同步调用,结合类(如Service等)和接口(如 RunActive、Body等)及方法 isAwaited、wait-For、waitForAll、waitForAny等可容易和安全地实现潜在复杂的同步机制。

2.3 点部署

ProActive提供了基于XML部署描述器,可在本地机器或者使用 ssh、rlogin、rsh、LSF、globus、pbs等协议在远程机器上创建Java虚拟机(Java VirtualMachines,JVM),并映射虚拟节点(Virtual Node,VN)到该 JVM。一个XML部署文件指定VNS→JVMS→Machines的映射,它主要由 componentDefinition(定义、命名 VN)、deployment(指定VN包含的JVM)、infrastructure(指定启动JVM的具体参数信息)三部分构成。一个Pro-Active应用程序能够在不改变源代码的情况下,用不同的协议部署在不同的主机上,在程序运行时从部署文件获取节点部署信息。

2.4 SH配置

ProActive是通过SSHProcess来实现动态部署的,通过SSH连接实现远程计算节点的启动。为了避免运行中输入密码的问题,先要配制基于密钥的认证方式。首先生成密钥对,修改目录.ssh的权限;然后拷贝公用密钥到远程主机;次在本地主机执行ssh-agent、ssh-add等命令设置无密码SSH连接,而使其能自动登入到远程主机。更多信息请参考文献[3,6]。

2.5 IC2D(Interactive Control and Debugging of Distribution)

图形监控工具IC2D,实现对分布式应用程序的远程监控和管理,可查看、管理、控制、获取当前主机、JVM、VN和AO等信息,对每个AO的状态、AO间的通信及拓扑等都可捕获显示。有关ProActive的更多知识请参考文献[3~5]。

3 仿真实现

基于ProActive提供的高级同步机制编写程序,程序中涉及的主要类有:ReaderWriter、Reader、Writer、ReaderDisplay和AppletReader等,为使其能在多机上进行实验演示,还需编写部署文件readers.xml,且需配置SSH等,使多个读/写操作分布在不同的主机上。其中的initActivity方法的核心为:

……

try{proActiveDescriptor=ProActive。getProactiveDescriptor("file:"+ "..//..//descriptors//readers.xml");

//指定具体的部署文件readers.xml

}catch(ProActiveException e){ System.err.println("**ProActiveException**");}

proActiveDescriptor.activateMappings( );//根 据 部 署 文 件,启 动JVM,激活VNS

VirtualNode vn = proActiveDescriptor.getVirtualNode( "readers-Node");

//在所给VN指定的JVM中创建readersNode节点的AO群

try{nodes=vn.getNodesURL();}catch(NodeException e){System.err.println("**NodeException**");}

Object[]param=new Object[]{org.objectweb.proactive.ProActive.getStubOnThis(),

new Integer(ReaderWriter.DEFAULT_POLICY)};

try{ rw = (ReaderWriter)org.objectweb.proactive.ProActive.newActive(ReaderWriter.class.getName(),

param);

//以数组param中的数据作参数,创建ReaderWriter类的AO,且把这些AO部署在本地JVM的默认节点上

}catch(Exception e){e.printStackTrace();}

param=new Object[3];

param[0] =org.objectweb.proactive.ProActive.getStubOnThis();

param[l]=rw;

for(int i=0;i<3;i++){param[2]=new Integer(i);

try{

readers[i]=(Reader)org.objectweb.proactive.ProActive.newActive(Reader.class.getName(),param,nodes[i]);

//以数组param中的数据作参数,创建Reader类的AO,且把这些AO部署到nodes中指定的节点上

writers[i]=(Writer)org.objectweb.proactive.ProActive.newActive(Writer.class.getName(),param,nodes[i]);

}catch(Exception e){e.printStackTrace();}

……

4 实验与分析

实验环境:由三台同构PC机互连网络,OS为Fedora 8,IDE 采用Eclipse3.2.2,中间件ProActive,监控工具IC2D.依据ProActive提供的基于XML的部署描述器编写部署文件reader.xml,映射VN到计算节点上,使各Reader和Writer均分布于三台PC机中,如图2所示。

其中每台主机上各分布一个Reader和一个Writer,这些Reader和Writer可同时依据“读优先”、“写优先”或“公平竞争”三种策略中任意一种策略共同访问主机zhong上的共享数据区。

使用SSH协议部署在不同的节点上,同时通过IC2D监控其运行结果以仿真该读/写控制模型。图3和图4为某一瞬间的多机多虚拟节点运行结果IC2D监控快照(限于篇幅,只列出了运行结果的动态变化过程中的某一瞬间的两个监控图):启动了3台主机和4个JVM,对应于4个计算节点,创建了8个AO,这些AO之间通过RMI互相通信,且受控于活动对象ReaderWriter。主机 zhong启动 2个 JVM,生成 2个VN,创建4 个 AO:Reader、Writer、ReaderWriter和 ReaderDisplay各l个,且分布于这2个JVM中;另2台主机各启动l个JVM,生成l个VN,每个JVM中各创建2个AO:Reader和Writer各l个。图3中主机leea上的Writer当前正处于写操作状态,Reader处于等待状态;主机 lee和zhong上的 Reader、Writer均处于等待状态,这三台主机的AO间互相通信且受限于所采用的同步策略而同步地执行。图4中主机lee上的Writer当前正处于写操作状态,Reader处于等待状态;主机zhong和leea上的Reader、Writer处于等待状态。

5 结语

文献[2]是利用JAC技术在单机上解决读/写控制问题的,而本文是在文献[2]的基础上构造了分布式系统环境下的一种读写同步控制模型,在分布式系统环境下利用ProActive中间件编写程序,配置SSH和通过XML部署描述器编写部署文件实现该模型。通过仿真实验,跟踪各快照的动态变化过程,结果表明:在该模型上,无论应用哪种同步策略:“读优先”、“写优先”或“公平竞争”,不同的Reader和Writer都能以控制器所选的同步策略的规则去访问共享数据,且在该仿真程序不停顿的情况下,也可应用于不同的同步策略。

分布式系统环境下的读写同步控制模型为分布式数据库的读写建立了一个模型,为分布式系统环境下的同步机制提供了新思路。但本文仿真只是考虑了6个Reader和Writer分布在三台主机上,其规模较小。下一步的工作是增加Reader和Writer及主机的数量,在更大规模下去验证该仿真方法的健壮性、可靠性和容错性。

l 辛春生,陈宗斌等译.分布式系统原理与泛型(第2版)[M].北京:清华大学出版社,2008.

2 夏洁武,李金忠,胡运全.基于JAC技术实现读写控制的仿真研究[J].机床与液压,2009,37(5):l55 ~l56,l69

3 ProActive[ EB/OL].http://www-sop inria.fr/oasis/ProActive/.June,2009.

4 董明刚,梁正友.Windows下基于ProActive并行计算的关键技术[J].计算机工程,2006,32(l9):l05 ~l07

5 梁正友,张凌,董守斌.基于ProActive的网格应用程序开发方法[J].计算机应用,2005,25(6):l4l4 ~l4l6

6 SSH[EB/OL]/http://www.openssh.org/.June,2009.

7 唐卫东,刘昌鑫,李萍萍等.基于Open-L系统及递归表示的虚拟植物模型[J].农业机械学报,2009,40(l):l67 ~l70

8 唐卫东,李萍萍,卢章平.虚拟植物系统模型耦合构建技术[J].农业机械学报,2008,39(5):94 ~98,l07

猜你喜欢

同步控制中间件优先
40年,教育优先
RFID中间件技术及其应用研究
多端传播,何者优先?
基于Android 平台的OSGi 架构中间件的研究与应用
基于EtherCAT网络的金刚线多线切割机双主轴同步控制
站在“健康优先”的风口上
基于云模型的舵机同步控制
基于广义预测的双转动扫描系统同步控制
中间件在高速公路领域的应用
优先待遇