1 / 36
文档名称:

基于Zookeeper的锁开发手册.docx

格式:docx   大小:46KB   页数:36页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

基于Zookeeper的锁开发手册.docx

上传人:duzw466 2019/4/17 文件大小:46 KB

下载得到文件列表

基于Zookeeper的锁开发手册.docx

相关文档

文档介绍

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