您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > 基于Zookeeper的锁开发手册
基于Zookeeper的锁应用开发手册1PAAS平台基于Zookeeper的锁应用开发手册版本1.0基于Zookeeper的锁应用开发手册2修订历史日期版本描述修改人2013-10-251.0基于Zookeeper的锁应用开发手册苏晓辉基于Zookeeper的锁应用开发手册3基于Zookeeper的锁应用开发手册................................................................................................41概述..............................................................................................................................................41.1前言...............................................................................................................................41.2目的...............................................................................................................................41.3范围...............................................................................................................................41.4术语和缩写语...............................................................................................................42排他锁...........................................................................................................................................53共享锁...........................................................................................................................................64数据库锁.......................................................................................................................................75总结和展望...................................................................................................................................86附件代码.......................................................................................................................................97参考资料.....................................................................................................................................36基于Zookeeper的锁应用开发手册4基于Zookeeper的锁应用开发手册1概述1.1前言Zookeeper是Hadoop的正式子项目,它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、名字服务、分布式同步、组服务等。Zookeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。1.2目的本文档的目的是帮助PAAS平台开发人员快速使用锁API,开发分布式系统中模块之间需要协同执行的相关的应用程序。本文第二、三、四章分别介绍排他锁、共享锁和数据库锁的功能和使用。最后,第五、六、七章给出附件代码、总结及展望和参考资料。1.3范围本文档适用于PAAS系统整个项目周期中对模块之间需要协同执行的应用程序开发的指导和约束。要了解Zookeeper的使用详情,参考Zookeeper3.4.5官方文档。1.4术语和缩写语术语说明ZookeeperZookeeper是Hadoop的正式子项目,它是一个针对大型分布式系统的可靠协调系统。PAASPlatform-as-a-Service的缩写,意思是平台即服务。把服务器平台作为一种服务提供的商业模式。SAASsoftware-as-a-Service的缩写。国外称为SAAS,国内通常叫做软件运营服务模式,简称为软营模式。基于Zookeeper的锁应用开发手册52排他锁排他锁的实现机制是当一个线程获取锁后,另一个线程无法获取该锁,并报出异常,这里的线程可以在不同的JVM中;目前支持重入特性,在同一线程中的不同地方(不同的方法中)可以重复获取同一把锁。排他锁的使用场景是当一个线程需要对分布式系统中的某些资源独占,不希望其它线程对该资源进行操作。排他锁使用范例如下代码所示,如果代码lock.lock()获取锁key1锁,则进入独占资源操作代码,否则进入异常处理代码,最后释放锁lock.close()。MutexLocklock=null;try{lock=newMutexLockImplZooKeeper(127.0.0.1:2181,key1);lock.lock();//独占资源操作代码}catch(LockExceptione){//异常处理代码}finally{try{if(lock!=null)lock.close();}catch(LockExceptione){}}基于Zookeeper的锁应用开发手册63共享锁共享锁有读锁和写锁两种状态,共享锁的实现机制是当一个线程获取锁的读状态后,另一个线程也可以获取该锁的读状态,但是另一个线程无法获取该锁的写状态,并抛出异常;当一个线程获取锁的写状态后,另一个线程无法获取该锁,并抛出异常。这里的线程可以在不同的JVM中;目前支持重入特性,在同一线程中的不同地方(不同的方法中)可以重复获取同一把锁。共享锁的使用场景是当一个线程需要对分布式系统中的某些资源进行读取操作时,其它线程也可以读取该资源,但是不能进行写操作;当一个线程需要对分布式系统中的某些资源进行写操作时,不希望其它线程对该资源进行操作。共享锁使用范例如下代码所示,如果代码lock.read()/lock.write()获取锁key1锁,则进入独占资源操作代码,否则进入异常处理代码,最后释放锁lock.close()。SharedLocklock=null;try{lock=newSharedLockImplZooKeeper(127.0.0.1:2181,key1);lock.read();//lock.write();//独占资源操作代码}catch(LockExceptione){//异常处理代码}finally{try{if(lock!=null)lock.close();}catch(LockExceptione){}}基于Zookeeper的锁应用开发手册74数据库锁目前数据库锁支持4种标准的数据库隔离等级,包括ReadUncommit、ReadCommit、NoRepeating和Serialize,目前不支持锁的重入功能。数据库锁的使用场景是需要提供数据库事务ACID特性的地方。数据库锁使用范例如下代码所示,如果代码readLock(group1,table1)/writeLock(group1,table1,ID)获取数据库表锁或行锁,否则进入异常处理代码,最后释放锁release()。DBLockImplZooKeeperlock=null;try{lock=newDBLockImplZooKeeper(127.0.0.1:2181);//ornewDBLockImplZooKeeper(127.0.0.1:2181,IsolateLevel.READCOMMIT);//ornewDBLockImplZooKeeper(127.0.0.1:2181,3,100,10000,IsolateLevel.READCOMMIT);l.readLock(group1,table1);//操作代码l.writeLock(group1,table1,ID);//操作代码}catch(LockExceptione){//异常处理代码}finally{try{if(lock!=null)l.release();}catch(LockExceptione){}}基于Zookeeper的锁应用开发手册85总结和展望将来可能还需要实现两阶段关闭(twophasetemiate)锁来协同多个模块完成同一个工作,最后各模块要么一起成功,要么一起失败。基于Zookeeper的锁应用开发手册96附件代码SharedLock.java//(c)CopyrightBeyondPAAScontributorsandothers2013packagecom.beyond.paas.tool.lock;/***SharedLockisinterface.*@authorsuxiaohui*@CreateDate2013-10-18*/publicinterfaceSharedLock{/***Togetwritelock*@throwsLockException*/voidwrite()throwsLockException;/***Togetreadlock*@throwsLockException*/voidread()throwsLockException;/***Toreleaselock*@throwsLockException*/voidclose()throwsLockException;}SharedLockImplZooKeeper.java//(c)CopyrightBeyondPAAScontributorsandothers2013packagecom.beyond.paas.tool.lock;importjava.io.IOException;importjava.util.ArrayList;importjava.util.Collections;importjava.util.Comparator;importjava.util.HashSet;基于Zookeeper的锁应用开发手册10importjava.util.List;importjava.util.Set;importjava.util.UUID;importorg.apache.zookeeper.CreateMode;importorg.apache.zookeeper.KeeperException;importorg.apache.zookeeper.ZooKeeper;importorg.apache.zookeeper.ZooDefs.Ids;/**
本文标题:基于Zookeeper的锁开发手册
链接地址:https://www.777doc.com/doc-4275913 .html