欢迎来到天天文库
浏览记录
ID:50477279
大小:32.12 KB
页数:36页
时间:2020-03-09
《基于Zookeeper的锁开发手册.docx》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、基于Zookeeper的锁应用开发手册版本<1.0>修订历史日期版本描述修改人2013-10-251.0基于Zookeeper的锁应用开发手册苏晓辉基于Zookeeper的锁应用开发手册41概述41.1前言41.2目的41.3范围41.4术语和缩写语42排他锁53共享锁64数据库锁75总结和展望86附件代码97参考资料36基于Zookeeper的锁应用开发手册1概述1.1前言Zookeeper是Hadoop的正式子项目,它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、名字服
2、务、分布式同步、组服务等。Zookeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。1.2目的本文档的目的是帮助PAAS平台开发人员快速使用锁API,开发分布式系统中模块之间需要协同执行的相关的应用程序。本文第二、三、四章分别介绍排他锁、共享锁和数据库锁的功能和使用。最后,第五、六、七章给出附件代码、总结及展望和参考资料。1.3范围本文档适用于PAAS系统整个项目周期中对模块之间需要协同执行的应用程序开发的指导和约束。要了解Zookeeper的使用详情,参考
3、Zookeeper3.4.5官方文档。1.4术语和缩写语术语说明ZookeeperZookeeper是Hadoop的正式子项目,它是一个针对大型分布式系统的可靠协调系统。PAASPlatform-as-a-Service的缩写,意思是平台即服务。把服务器平台作为一种服务提供的商业模式。SAASsoftware-as-a-Service的缩写。国外称为SAAS,国内通常叫做软件运营服务模式,简称为软营模式。1排他锁排他锁的实现机制是当一个线程获取锁后,另一个线程无法获取该锁,并报出异常,这里的线程可以在不同的J
4、VM中;目前支持重入特性,在同一线程中的不同地方(不同的方法中)可以重复获取同一把锁。排他锁的使用场景是当一个线程需要对分布式系统中的某些资源独占,不希望其它线程对该资源进行操作。排他锁使用范例如下代码所示,如果代码lock.lock()获取锁key1锁,则进入独占资源操作代码,否则进入异常处理代码,最后释放锁lock.close()。MutexLocklock=null;try{lock=newMutexLockImplZooKeeper("127.0.0.1:2181","key1");lock.lock
5、();//独占资源操作代码}catch(LockExceptione){//异常处理代码}finally{try{if(lock!=null)lock.close();}catch(LockExceptione){}}共享锁共享锁有读锁和写锁两种状态,共享锁的实现机制是当一个线程获取锁的读状态后,另一个线程也可以获取该锁的读状态,但是另一个线程无法获取该锁的写状态,并抛出异常;当一个线程获取锁的写状态后,另一个线程无法获取该锁,并抛出异常。这里的线程可以在不同的JVM中;目前支持重入特性,在同一线程中的不同地
6、方(不同的方法中)可以重复获取同一把锁。共享锁的使用场景是当一个线程需要对分布式系统中的某些资源进行读取操作时,其它线程也可以读取该资源,但是不能进行写操作;当一个线程需要对分布式系统中的某些资源进行写操作时,不希望其它线程对该资源进行操作。共享锁使用范例如下代码所示,如果代码lock.read()/lock.write()获取锁key1锁,则进入独占资源操作代码,否则进入异常处理代码,最后释放锁lock.close()。SharedLocklock=null;try{lock=newSharedLockIm
7、plZooKeeper("127.0.0.1:2181","key1");lock.read();//lock.write();//独占资源操作代码}catch(LockExceptione){//异常处理代码}finally{try{if(lock!=null)lock.close();}catch(LockExceptione){}}1数据库锁目前数据库锁支持4种标准的数据库隔离等级,包括ReadUncommit、ReadCommit、NoRepeating和Serialize,目前不支持锁的重入功能。数
8、据库锁的使用场景是需要提供数据库事务ACID特性的地方。数据库锁使用范例如下代码所示,如果代码readLock("group1","table1")/writeLock("group1","table1","ID")获取数据库表锁或行锁,否则进入异常处理代码,最后释放锁release()。DBLockImplZooKeeperlock=null;try{lock=newDBLockImplZooKe
此文档下载收益归作者所有