zookeeper实现分布式锁

分布式锁是分布式系统中对同一个资源访问进行控制的方式。

排他锁(写锁):

当一个事物对某一个资源加上排他锁后,只有该事物能对这个资源进行读写操作,其余事物只能等待该事物释放这个锁后才能进行操作。

zookeeper实现方法:

1、所有客户端往一个节点A下创建临时子节点B。创建请求属于事物请求,所有的事物请求都将发送给leader,leader顺序执行写操作,所以能保证只有一个客户端能成功创建子节点B。

2、创建成功后持有锁。其余客户端创建失败后会对A节点注册子节点变更的watcher监听。

3、当获得锁的客户端释放锁后,节点B消失,触发watcher监听通知客户端。

4、其余客户端会再次尝试创建B,创建成功的获得锁,其余的继续注册watcher监听。


共享锁(读锁):

当一个事物对某一个资源加上共享锁后,该事物能对这个资源进行读操作,其余事物也只能对该事物加共享锁。直到共享锁全部释放。

zookeeper实现方法:

1、客户端在/A节点下创建[自身标识]+ [读写类型] 的临时顺序节点。

2、获取/A节点下的所有子节点。

3、

a.如果自己是读请求,并且自己序号是最小的或者比自己小的都是读请求,则获取到共享锁;如果比自己小的有写请求,则获取失败,进入等待同时向比自己小的最后一个写请求节点注册watcher。

b.如果自己是写请求,同时是最小的节点,则获取到共享锁;如果自己不是最小的则获取失败,进入等待同时向比自己小的最后一个节点注册watcher。

4、获取到锁的客户端执行完之后删除临时节点并释放锁,其余客户端接受到watcher通知后从步骤2开始循环。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值