ZooKeeper 实现分布式锁?

发布于

一、原理

利用临时顺序节点 + Watcher。

二、加锁流程

  1. 在 /lock 节点下创建临时顺序节点 /lock/seq-000000001。
  2. 获取 /lock 下所有子节点,判断自己是否最小。
  3. 是最小 → 获取锁成功。
  4. 不是最小 → 监听前一个节点的删除事件,阻塞等待。

三、释放锁

  • 主动删除自己的节点。
  • 会话断开,临时节点自动删除(避免死锁)。

四、优点

  • 临时节点自动释放,无死锁。
  • 顺序节点实现公平锁。
  • Watcher 通知,无需轮询。

五、缺点

  • 频繁创建删除节点,性能不如 Redis 锁。
  • 网络抖动导致会话断开可能误释放锁。