zookeeper分布式锁的应用

2018-12-06  本文已影响11人  Cheava

2018-12-08 补充:
其实这两种方案也就是Curator提供的两种选主机制:
基于选举和基于抢占的选主方式,具体原理和使用参见以下链接
[Curator] Leader Latch 的使用与分析
[Curator] Leader Election 的使用与分析
建议直接使用Curator封装好的接口

分布式锁种类

zookeep分布式锁的种类:排他锁、共享锁
如何用 zookeeper 实现分布式锁 - world6 的博客 - CSDN 博客

锁实现

Curator已经实现的分布式锁:

实际应用

需求:集群中所有host都有池化好的相同资源,后台取资源比较耗时,而且会频繁请求这个集群来取。

基于排他锁设计

image
  1. 开始:各host在zk上竞争创建临时节点,创建成功者为主节点,同时其他候选host监听节点目录。后台取目录下的节点信息,从主节点中获取资源。当主服务主动删除节点或者会话失效时,候选host将继续竞争选主。

  2. 主节点结束: 当主节点被后台占用最后一个资源时,主动删除临时节点。

  3. 重新选主: 候选host发现节点目录有节点删除事件,如果自己有空余资源,立刻参与选主,否则继续监听节点目录。

  4. 所有节点忙: 当所有host没有空余资源时,zk目录下没有节点。

  5. 有空余节点: 当有host重新拥有资源,检查节点目录是否有节点,如果没有节点,则尝试创建,创建成功则成为主服务,否则继续监听节点目录。

基于共享锁设计

image
  1. 开始:各host在zk上竞争创建临时有序节点,后台从创建最小节点的host中获取资源,因此该host成为主节点。

  2. 主节点结束: 当主节点被后台占用最后一个资源时,主动删除临时节点。当自己重新拥有资源后,再次在zk创建临时有序节点,参加排队。

  3. 重新选主:后台从之前次小的节点host中获取资源,该host成为主节点。

  4. 所有节点忙:当所有host没有空余资源时,zk目录下没有节点。

  5. 有空余节点: 当有host重新拥有资源,再次在zk创建临时有序节点,立即成为主节点。

上一篇 下一篇

猜你喜欢

热点阅读