Skip to content

概念卡片:Zookeeper 协调服务

一句话机制:Zookeeper 是一个分布式协调服务——核心是「树形节点 + Watch 监听」,客户端在节点上创建临时节点(会话断开自动删除)+ 注册 Watcher(节点变化异步通知),靠这两个机制实现注册中心、配置中心、分布式锁、选举、队列等一切「协调」场景。

六大应用场景

场景实现方式
配置中心发布/订阅:节点存配置,客户端加 Watcher,变更后推拉结合获取新值
负载均衡动态 DNS:域名节点存 IP 列表,Watcher 监听 IP 变动
分布式协调Watcher 异步通知 + 临时节点,做集群管理/上下线
Master 选举抢建临时节点,创建成功者当 Master,失败者监听
分布式锁抢建临时节点,成功者获锁,释放/宕机删节点,其余 Watcher 抢占
分布式队列临时顺序节点,FIFO 或 Barrier 屏障

关键机制

临时节点(Ephemeral):会话断开自动删除 → 天然用于「存活探测 + 抢锁 + 选举」
Watch 监听:一次性触发,节点变化异步通知客户端 → 推拉结合

分布式锁的两个方案

方案机制问题
方式 1:抢建同一节点成功者获锁,失败者监听该节点惊群效应(释放时唤醒一堆线程抢锁)
方式 2:顺序节点每个客户端建顺序节点,只监听前一个节点无惊群,更优

⚠️ 分布式锁的隐患:客户端获锁后与 ZK 连接断开,临时节点被删,其他客户端抢到锁,但原客户端业务还在跑 → 两客户端同时访问资源(需配合「锁续期/校验」)。

不变量(必须成立的约束)

  • 临时节点的生命周期绑定会话:会话断开即删除,这是「存活探测/抢锁/选举」的基础。
  • Watch 是一次性触发:收到通知后要重新注册,否则后续变化收不到。
  • Zookeeper 的分布式锁用顺序节点 + 监听前一个节点可避免惊群效应。

踩坑案例

  • 现象:分布式锁场景下,客户端 1 获锁后网络闪断,客户端 2 抢到锁,两者同时操作资源。 原因:临时节点随会话断开被删,但客户端 1 的业务线程没感知。解决:锁内加「持有者校验」或续期心跳。

常见误解

  • 以为 Zookeeper 是注册中心专用 → 它是通用协调服务,注册只是其「配置中心/发布订阅」场景之一。
  • 以为分布式锁用「抢建同一节点」就好 → 有惊群效应,顺序节点方案更优。

关联

最近更新