- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于Zk实现分布式锁
2021-09-29
最近项目涉及系统集群运转时,由于交叉配置,可能引起多台服务器运转时处理同一份数据,所以要用分布式锁把握。
下面就是基于Zk实现的一个分布式锁。
Zookeeper overview
Zookeeper给其client呈现的是按层次组织的节点(znode),组织方式与文件系统类型,如下图,每个znode中可以包含一些数据。Zookeeper中有两品种型的znode,Regular和Ephemeral。对于Regular znode,其由client显式的创建和删除;对于Ephemeral znode,其由client创建,可由client显式删除,或当创建该Ephemeral znode的session终止时由zookeeper自动删除。
关于zookeeper中的session,当client连接zookeeper时,会初始化一个session,session有一个超时时间,如在超时时间内,zookeeper没有从client收到任何信息(zookeeper会发形态检测信息),则认为client毛病了,此时zookeeper会关闭这个session(session也可由client显式关闭)。
另外,client在创建znode时还可以指定一个sequential flag,创建的znode将会拥有一个递增的序号,该序号会加到znode的名字后面。
Zookeeper API
构造一个zookeeper client实例,需要指定一个服务器列表(以逗号分割的ip:port列表),并指定session超时时间及默认的watch回调接口。
create(path, data, flags) :创建一个由path指定的znode,该znode中存储data,flag用于设置znode的类型(regular、ephemeral、sequential..),前往新建znode的名字。虽然znode具有存储功能,但猛烈不建议将其用于存储大量数据,通常znode中存储一些metadata。delete(path, version) : 假如znode的version与参数中version相同,删除由path指定的znode。exists(path, watch) : znode能否存在,假如设置watch标记,则前往的信息变化时会通知client(不存在—存在,存在—不存在两种变化都会通知)。getData(path, watch) : 猎取znode的data,可设置watch标志(当该zonde的data变化时得到通知),假如znode不存在watch不会被设置。setData(path, data, version) : 设置znode的data,与delete相同需要检查version信息。getChildren(path, watch) : 猎取子节点的名字列表,可设置watch(当创建或删除子节点时会得到通知)。sync(path) : 等待全部的pending update被执行。
Zookeeper的API接口拥有同步和异步两个版本,使用异步API时,client可为每个operation设置callback,在operation被执行后,zookeeper会执行对应的callback。
Zookeeper全部的update接口都带version信息(-1表示不检查version信息),用于实现condition update,在update前检查version能否婚配,只要在version信息婚配时,update才会被更新,有点类似与CAS。
1. 思路
处理方案照旧很简约,需要加锁的进程先尝试在zookeeper上创建一个临季节点L,假如创建成功则加锁成功,假如不成功(已存在)则在该节点上设置watch。进程通过删除L来解锁(当进程不测终止,L也会被删除,不会形成死锁),当L被删除时,其它等待锁的进程会得到通知,此时这些进程再次创建L来获得锁。
上面的方案,当竞争锁的进程比较多时,解锁时会引起Herd Effect,可对加锁规章进行限制,如按进程尝试加锁的挨次来安排锁。在zookeeper上,每个加锁的进程创建一个带SEQUENTIAL标志的临季节点,每次让序号最小的节点获得锁,这样每个节点只需要watch它前面节点的形态即可,当其前面节点被删除时,其将被通知,并获得锁。改进如下:
假如要实现读写锁,则要做进一步改进,要获得写锁的进程按上述方式竞争锁,要获得读锁的进程则watch序号比本人小的写进程,改进如下:
ZkClient Overview
1. 供应了Zk断链重连的特性::这个特性好像每个开发者都会设计,而且代码风格几乎如出一辙。在大部分Zk使
您可能关注的文档
最近下载
- 2007年考研英语一真题解析.pdf VIP
- 救护车司机培训计划.pptx VIP
- 人教版七年级上册数学第三章 一元二次方程练习题.docx VIP
- 20211121-华金证券-纺织服装行业周报:10月社零回升,消费市场回暖.pdf VIP
- 非均匀有理B样条:B样条曲面II及NURBS.pdf VIP
- 妇产科护理网络在线课程的教学设计与实践应用.pdf VIP
- 十年(2016-2025)高考化学真题分类汇编:专题40 化学反应原理综合题——反应热+速率平衡(原卷版).docx VIP
- 设备安装、维修合同模板7篇.docx VIP
- 广东六校2025届高三10月联考英语试题.pdf VIP
- 削坡减载施工方案.docx VIP
文档评论(0)