ZooKeeper 应用场景

ZooKeeper 是分布式系统中的"瑞士军刀",它的典型应用场景包括:

  1. 服务注册与发现:服务实例动态注册,上下线自动感知
  2. 分布式锁:基于临时顺序节点实现公平锁
  3. 配置管理:集中管理配置,配置变更实时推送
  4. Leader 选举:分布式选主,Leader 崩溃自动切换
  5. 分布式队列:基于 ZK 的 FIFO 队列

【架构权衡】 ZooKeeper 的强一致性保证使它适合做协调服务(Coordination),但不适合做数据存储(Storage)。在选择 ZooKeeper 之前,需要明确它是"协调工具"而不是"数据库"。


一、典型应用场景

1.1 服务注册与发现

服务注册:
Provider 启动时 → 在 /services/{serviceName}/providers/ 下创建临时节点
Provider 宕机时 → 临时节点自动删除
Consumer 订阅时 → Watch /services/{serviceName}/providers/ 节点变化

节点内容:
{
  "url": "dubbo://192.168.1.100:20880",
  "version": "1.0.0",
  "weight": 100
}

1.2 分布式锁

基于临时顺序节点的分布式锁:

1. 获取锁
   └─ 在 /locks/ 下创建临时顺序节点

2. 判断是否最小
   └─ 是:获取锁成功
   └─ 否:Watcher 监听上一个节点

3. 释放锁
   └─ 删除自己的节点
   └─ 触发下一个节点的 Watch

1.3 配置管理

配置管理:
1. 配置存储在 ZK 节点
   └─ /config/{env}/{app}/config

2. 应用订阅配置
   └─ Watch 配置节点变更

3. 配置变更推送
   └─ ZK 推送变更通知
   └─ 应用重新加载配置

二、落地 Checklist

  • 场景评估:明确使用 ZooKeeper 的场景
  • 数据设计:设计 ZK 节点结构
  • 容量规划:评估节点数量和 Watch 数量
  • 监控部署:监控 ZK 集群健康状态