ZooKeeper 实现分布式锁?
发布于
一、原理
利用临时顺序节点 + Watcher。
二、加锁流程
- 在 /lock 节点下创建临时顺序节点 /lock/seq-000000001。
- 获取 /lock 下所有子节点,判断自己是否最小。
- 是最小 → 获取锁成功。
- 不是最小 → 监听前一个节点的删除事件,阻塞等待。
三、释放锁
- 主动删除自己的节点。
- 会话断开,临时节点自动删除(避免死锁)。
四、优点
- 临时节点自动释放,无死锁。
- 顺序节点实现公平锁。
- Watcher 通知,无需轮询。
五、缺点
- 频繁创建删除节点,性能不如 Redis 锁。
- 网络抖动导致会话断开可能误释放锁。