【ACCESS精品源码栏目提醒】:文章导读:在新的一年中,各位网友都进入紧张的学习或是工作阶段。
网学会员整理了ACCESS精品源码-分布式锁 - 技术总结的相关内容供大家参考,祝大家在新的一年里工作和学习顺利!
—80— 分布式锁 周 梅 电子科技大学计算机学院成都 610054 摘 要在分布式组态系统中各终端上的组态文件可能存在不一致问题。
该文设计一种基于集群系统的组态文件分布式锁。
使用互斥方法实现对组态文件的修改保证多终端上组态文件的一致性。
采用激活数据包的方法避免接收请求被阻塞保证了整个系统的可靠性和稳定性。
关键词组态软件分布式锁互斥 Design and Implementation of Distributed Lock ZHOU Mei School of Computer University of Electronic Science and Technology of China Chengdu 610054 【Abstract】There are perhaps different configuration files in the terminals in distributed configuration system. This paper designs a configurationfile Distributed Lock based on the assembled system. It uses incompatible method to revision configuration files and keeps the coherence ofconfiguration files in all the terminals. Activation data packet is used to avoide the receiving request being blocked blocked and to keep the reliableand stability of all the system. 【Key words】component-based software distributed lock incompatible 计 算 机 工 程Computer Engineering第34卷 第16期Vol.34 No.16 2008年8月August2008·软件技术与数据库· 文章编号1000—3428200816—0080—02文献标识码A 中图分类号TP3111 概述 传统组态软件一般分为组态设计系统和组态运行系统。
组态设计系统可以按实际工业流程需要选择工控功能模块、设置各个模块间的关联和数据流向等系统参数从而建立一套完整的控制系统。
组态运行系统建立在组态设计系统的基础上按设计系统设定的参数启动相应工控功能模块并负责模块之间数据的传输和并发控制等。
在没有一致性策略的情况下多个终端各自独立地进行组态设计、修改本地组态文件此时会出现相同组态文件的多个版本导致多个计算机终端组态运行系统不一致。
目前主流组态软件的解决方法是在组态完毕后由工程师手动比较组态文件。
该方法增加了维护难度可能造成潜在错误。
一种有效的解决办法如下多个终端通过网络互联终端在组态前获取一个组态文件锁要求其他组态的终端不能对此文件进行修改在组态完毕后通过文件传输通告其他终端并释放锁保证组态文件一致性。
本文基于上述策略提出了一种分布式锁的解决方法。
集群系统具有高可扩展性和容错性用户可根据需要增加工作站的数目能迅速发现节点故障。
在组态软件具体应用中多个终端实例组成一个计算机集群协同完成组态设计及组态运行工作1因此集群系统符合现在工业自动化的应用需求。
组态文件分布在各个终端上发起者与参与者对组态文件的锁操作是一个不可分割的整体。
本文分布式锁操作具有与分布式事务类似的特性2。
笔者基于分布式系统特性设计了一个分布式互斥锁协议提出解决网络阻塞的方法以避免出现死锁。
2 系统设计 本文设计的分布式锁协议在逻辑上分为底层的集群系统和上层的分布式锁应用。
分布式锁应用基于集群系统完成分布式锁操作。
集群技术与集群系统是实现高性能计算的新途径。
常见的集群架构分为Web/Internet集群系统和并行运算集群系统2种。
资源管理和负载平衡是集群技术的关键。
集群系统可分为高性能科学计算群集、负载均衡群集、高可用性群集3类。
分布式计算是集群技术的理论基础包括中间件技术、网格技术、移动Agent技术等3。
分布式操作如分布式文件和分布式命令是指相关操作同时在整个集群节点或指定的一组节点上并行执行。
分布式命令功能通常由分布式Shell提供。
此Shell一般称为dshdistributed shell或pshparallel shell可以通过rsh或ssh实现分布式Shell。
分布式文件主要用于集群中配置文件的同步。
因为集群系统由多个节点组成所以需要将集群系统的一个配置发布到每个节点或一组节点。
比如要使每个节点上的Apache都支持CGI就要把/etc/httpd下的配置文件发布到每个节点的/etc/httpd中。
集群系统的配置管理是把一个或多个配置文件发布到指定节点上。
现有很多开放
源码的工具可以帮助完成集群系统的分布式文件功能如rdist和cfengine。
分布式锁应用的设计重点是分布式锁协议的设计。
本文定义锁的申请者为持有者集群中的其他活动成员为锁的参与者。
借鉴分布式事务处理的两阶段提交协议本文分布式锁协议分为2个阶段1锁请求阶段。
持有者向所有参与者发送锁请求参与者接收锁请求后立刻申请锁并发送回作者简介周 梅1983女硕士研究生主研方向计算机 应用 收稿日期2007-10-30 E-mailkiki.zhougmail.com —81—应包给持有者。
只要有一个参与者申请锁失败或在规定时间内未对持有者做出响应则锁操作失效。
2执行阶段。
持有者确认所有锁请求成功后向参与者发出锁操作命令参与者进行锁操作。
如果参与者没有在限定时间内收到命令包则不进行锁操作并回滚之前的锁请求。
集群系统和分布式锁应用通过共享内存进行交互共享内存中存放记录了当前集群成员节点信息及状态的主机表该表由集群系统维护。
通过一个全局进程锁上层分布式锁和集群管理系统可以互斥地访问主机表。
由集群系统维护当前节点状态将节点的增删、容错性和扩展性等操作封装在底层集群系统中分布式锁操作端无须关心当前集群环境只要通过共享内存访问当前主机表获取集群成员信息。
上述设计降低了系统的实现复杂度使其具有灵活可扩展的结构。
3 组态文件锁的定义及实现形式 锁的基本语义如下持有者得到组态文件锁后其他参与者不能再对文件上锁上锁后的文件只能由锁持有者开锁其他人不能开锁。
根据锁语义本文协议采用排他锁。
由于组态软件的一个目录下存放着多个组态文件因此采用的锁形式如图1所示。
组态文件锁文件组态文件组态文件组态文件组态文件组态文件 图1 锁形式 每个目录下存放一个锁文件锁文件管理目录下各个组态文件锁。
锁以文件记录形式存在通过互斥打开锁文件并向锁文件写入锁记录实现相应锁操作。
互斥打开锁文件的动作定义为锁请求写入锁记录的动作定义为具体的锁操作。
上锁时写入持有者的账号和ID开锁时需要查看持有者账号和ID是否正确以保证锁的可持久性。
4 分布式锁协议 锁操作包括上锁和开锁。
一次锁操作包括一系列基本子操作如打开锁文件写入锁记录关闭锁文件等构成一个锁操作的子操作序列是一个不可分割的整体。
根据设计的两阶段协议持有者和参与者的状态变换分别如图2、图3所示。
锁操作失败在设定时间内收到所有参与者请求成功的消息收到某一参与者的锁请求失败回应等待锁请求回应 图2 分布式协议中持有者的状态变换 准备状态锁操作失败等待锁命令状态收到锁操作命令超时发送锁请求回应 图3 分布式协议中参与者的状态变换 分布式锁协议由持有者发起通过持有者和参与者的一次消息交换及持有者的一次命令完成分布式锁操作。
对持有者而言申请上锁操作的过程算法如下 向所有参与者发送上锁请求 Set_timer 等待接受参与者回应 IF超时有失败回应包 返回上锁失败 ELSE 发送远程上锁命令包 返回上锁成功 对锁参与者而言上锁处理过程如下 For 等待接受持有者上锁请求 IF接收到远程上锁请求 IF 已经有上锁请求 发送上锁请求失败应答报 continue Settimer 本地参与者上锁请求 发送partner上锁请求应答包 continue IF接收到上锁命令包 上锁命令与上锁请求匹配 本地参与者上锁操作 关闭定时器 ELSE continue IF远程上锁请求定时器超时 回滚对应的远程上锁请求 在上述上锁处理协议过程中Set_timer用于设置Timer的值。
对持有者而言在发送锁请求信息后的限定时间内若未收到全部参与者的请求回应由于网络故障等原因或参与者请求失败则认为锁操作失败。
假定参与者成功申请锁请求向参与者发送锁请求回应包在限定时间内若没有收到持有者第2阶段的命令包则进入回滚处理清除注册的上锁请求并关闭锁文件。
开锁操作与上锁操作流程一致只是写入的锁记录不同。
锁文件是互斥访问的在同一时刻只能被一个请求打开如果在处理请求的过程中收到其他请求则认为请求失败并向相应的持有者发送请求失败包。
一个动作序列如下1用户1锁请求包到达2Set_ 下转第84页 2012-05-182012-05-182012-05-182012-05-182012-05-182012-05-18 —84—经对该字段进行过更新发生了冲突。
此时可以调用针对该字段的冲突消解逻辑来解决冲突如果不存在冲突消解逻辑则远程数据库事务回滚并通知移动数据库事务回滚。
如果并发有若干个上载事务等待提交远程数据库服务器根据预先定义的冲突消解策略进行处理后将所有修改提交如果不能消解该冲突则将最先的修改提交后续的修改通知移动数据库回滚5。
1.2.5 模型实现 本文采用JADEJava Agent DEvelopment框架来实现基于MA的数据库访问模型JADE是一个纯Java语言编写的、兼容FIPAFoundation for Intelligent Physical Agent标准的Agent平台。
实现非实时性访问模型数据同步MA的主要代码如下 public class SyncDataAgent extends Agent implements Serializable protected void setup //初始化SyncDataAgent MA InitSyncDataAgent //查找移动数据库表中被修改的行 addBehaviornew GetChangedRows //查找移动数据库表中增加的行 addBehaviornew GetNewRows //查找移动数据库表中被删除的行 addBehaviornew GetDeletedRows private class GetChangedRows extends OneShotBehavior public void action //取得上次同步时间time_old //对于每张表的每行数据取出时间戳time_stamp if time_stamp time_old //将该行信息添加到上载流中 public boolean donereturn true MA的其他行为代码与上述代码类似。
2 模型应用 石油勘探工作移动性很强工作地点网络质量通常较差是典型的弱连接环境。
传统C/S模型基于长连接的多次交互不适合这种弱连接环境。
本文模型已应用于中石化胜利油田移动勘探信息平台一些实际移动应用辅助油田勘探工作在此基础上进行。
在实际应用中根据移动应用对实时性的不同要求将实时性访问模型和非实时性访问模型相结合。
在实时性访问模型应用中用户可以查询油井的实时钻井状态数据。
在非实时性访问模型应用中移动应用允许用户根据需要在远程数据库中定制相关勘探数据每次数据同步过程仅涉及发生变化的数据行减少了传输数据量。
3 结束语 实时性移动应用远程数据库访问模型利用MA作为访问远程数据库的手段避免了C/S模式的长连接、多次交互等缺点。
非实时性移动应用远程数据库访问模型在移动设备上引入小型数据库MA负责移动数据库和远程数据库之间的数据同步克服了传统C/S模式数据库同步方法在移动环境下的缺点。
实际应用结果表明上述模型克服了弱连接环境带来的问题。
本文分析了模型结构、内部交互过程和部分实现。
如何提高模型安全性、减少冲突发生有待进一步研究。
参考文献 1 周龙骧 刘添添. 移动Agent综述J. 计算机应用与软件 2003 2011: 19-23 27. 2 Vasiu L Qusay H M. Mobile Agent in Wireless DeviceJ. Computer 2004 372: 104-105. 3 Marques P J Silva L M Silva J G. A Flexible Mobile-Agent Framework for Accessing Information Systems in Disconnected Computing EnvironmentsC//Proceedings of the 11th International Workshop on Database and Expert Systems Applications. London England: s. n. 2000. 4 Wang Yan Law K C K. A Mobile Agent Based System for Distributed Database
Access on the InternetC//Proceedings of the International Conference on Communication Technology. Beijing China: s. n. 2000. 5 Stefano A D Bello L L Santoro C. A Distributed Heterogeneous Database System Based on Mobile AgentC//Proceedings of the 7th IEEE International Workshops on Enabling Technologies: Infrastructure for Collaborative Enterprises. Stanford California USA: IEEE Press 1998.上接第81页 timer3阻塞接收锁请求或锁命令timer已到达4用 户2锁请求包到达。
在上述动作序列中进行到第3步时用户1的命令包已到达接收时限由于被阻塞在网络端口上因此无法进行超时处理。
如果此时再接收用户2的请求会因为已存在用户1的锁请求而返回失败而用户1的操作也已失败。
解决上述问题的方法是在设置Timer时设置一个回调函数。
若Timer达到设定时限回调函数将自动向网络端口发送一个激活数据包使相应超时处理可以被执行。
该数据包只激活阻塞等待的网络端口不会影响锁协议的正常工作且开销很小。
5 结束语 本文基于组态软件中组态文件存储的分布性提出分布式 组态文件锁并已在实际应用得到检验使用本文分布式锁的集群系统能够自适应地处理集群拓扑结构的改变实现同步更新组态信息。
笔者设计的分布式锁协议不但能确保文件的互斥操作而且能避免由于网络故障造成的阻塞现象因此能有效满足组态软件的具体应用需求。
参考文献 1 王建宇. 集群技术的佼佼者TruClusterC//国际高新技术研讨会论文集. 北京: 中国计量出版社 2001. 2 Coulouris G Dollimore J. 分布式系统概念与设计M. 金蓓弘 译. 北京: 机械工业出版社 2004. 3 胡章平. 集群系统与分布式计算J. 电脑知识与技术-学术交流 2006 2: 26 188. 2012-05-182012-05-182012-05-182012-05-182012-05-182012-05-18 专 业 推 荐 ↓ 精 品 文 档
上一篇:
2011年化妆品B2C行业分析及趋势_电子商务_中国站长站 C
下一篇:
bc80e7a0-d1f2-4595-b21d-01a76798e87a