0
点赞
收藏
分享

微信扫一扫

6.zookeeper分布式读写锁

迪莉娅1979 2022-02-17 阅读 121

读锁的条件?大家都可以读,之前的锁没有写锁

如何上读锁?

  1. 创建一个临时序号节点(-e -s 会话断开自动删除),节点的数据是read,代表读锁
  2. 获取当前zk中序号比自己小的所有节点
  3. 判断最小节点是否是读锁
    • 如果不是读锁,则上锁失败为最小节点添加监听。阻塞等待,zk的watch机制会当最小节点发生变化时候通知当前节点,于是再次执行第二步的流程
    • 如果是读锁则上锁成功

写锁的条件?只有得到写锁的才可以写,之前没有任何锁

如何上写锁?

  1. 创建一个临时序号节点(-e -s 会话断开自动删除),节点的数据是write,代表写锁
  2. 获取当前zk中所有的所有节点
  3. 判断自己是否是最小节点
    • 如果不是,说明前面还有,上锁失败,监听最小节点,最小节点发生变化,再次执行第二步的流程
    • 如果则上锁成功

羊群效应:上述方式只要最小节点断开,触发监听,如果并发很大对zk的压力非常大–这就是羊群效应。可以调整成链式监听解决。后一个节点只监听它前面的节点。

举报

相关推荐

0 条评论