Java 后端面试题库 / 全部题解免费阅读理解原理,有条理地回答

怎样用 ZooKeeper 实现分布式锁?

查看完整题解

参考回答

直接回答

每个竞争者在同一个锁目录下创建临时顺序节点。编号最小的先执行需要独占的操作,其他人只监听比自己小且最接近的节点。释放时删掉自己的候选节点。

讲清原理

拿到删除事件后再次查队列。如果登记 exists Watch 时前驱已经消失,直接重查。创建响应丢失时用唯一请求标识定位已创建节点,可避免自己排两次。会话过期后失去所有权。

临时顺序节点排队,等待自己的前驱
临时顺序节点排队,等待自己的前驱

例子与易错点

A 暂停过久、锁已交给 B,A 恢复后仍可能尝试写外部资源。可让资源端记录并拒绝旧的单调围栏令牌,或者使用资源本身的版本条件保护写入。

延伸阅读 ZooKeeper 有哪些 Znode 类型? · 使用 ZooKeeper Watch 有哪些容易踩的坑? · ZooKeeper 临时节点什么时候删除?

这道题,你掌握得怎么样?

掌握程度由你主动标记,阅读和收藏不会自动改变状态。