zookeeper实现分布式锁的原理

  1. 所有抢占资源的客户端,分别在zookeeper的同一个节点(e.g: /lock)下,创建一个自己的,临时有序(-es)的节点
  2. 所有客户端均读取该节点(/lock)下的所有子节点,并判断自己创建的子节点是否是序号最小的
  3. 如果自己序号是最小的,则认为自己抢到了锁,直接执行自己的IO操作,然后删除掉自己创建的那个子节点,即释放锁
  4. 如果自己的序号不是最小的,则认为自己没有抢到锁,此时客户端在所有的子节点中,找到比自己子节点序号小的一个节点,向该节点的delete事件注册一个监听器
  5. 当delete监听器触发的时候,客户端再次确认一下自己的子节点序号是否是最小的,如果是最小的,则执行第3步,否则继续执行第4步

 

posted @ 2021-08-31 16:47  这,看不懂  阅读(111)  评论(0编辑  收藏  举报