ZooKeeper节点类型详解
理解节点类型是使用ZooKeeper的关键基础。
持久节点与临时节点
节点类型对比:
| 类型 | 生命周期 | 使用场景 |
|---|---|---|
| 持久节点 | 永久存在 | 配置、元数据存储 |
| 临时节点 | 会话结束删除 | 服务注册、分布式锁 |
| 持久顺序 | 永久+自动编号 | 唯一ID生成 |
| 临时顺序 | 会话结束+编号 | 分布式公平锁 |
持久节点特点:
Bash
创建: create /config/data "value"
生命周期: 永久存在,除非主动删除
用途: 存储配置、命名空间结构
临时节点特点:
Bash
创建: create -e /services/instance "address"
生命周期: 绑定创建会话
会话结束: 自动删除
用途: 服务注册、临时锁
临时节点关键约束:
| 约束 | 说明 |
|---|---|
| 不能有子节点 | 临时节点不允许创建子节点 |
| 会话绑定 | 创建会话断开后删除 |
| 自动清理 | 无需手动维护 |
使用场景:
| 场景 | 推荐类型 |
|---|---|
| 配置存储 | 持久节点 |
| 服务注册 | 临时节点 |
| 分布式锁 | 临时顺序节点 |
| 任务队列 | 持久顺序节点 |
注意:临时节点不能有子节点,设计时需考虑。
顺序节点特性
顺序节点机制:
text
创建时自动添加10位序号后缀
序号在同一父节点下递增
格式: node-0000000001
创建顺序节点:
text
# 创建持久顺序节点
create -s /queue/task- "data"
# 返回: /queue/task-0000000001
# 创建临时顺序节点
create -e -s /locks/lock- "owner"
# 返回: /locks/lock-0000000001
序号特点:
| 特性 | 说明 |
|---|---|
| 长度 | 固定10位数字 |
| 范围 | 0到2147483647 |
| 递增 | 父节点下全局递增 |
| 唯一 | 同父节点下唯一 |
顺序节点应用:
| 应用 | 原理 |
|---|---|
| 分布式锁 | 按序号大小获取锁 |
| 唯一ID | 序号作为全局ID |
| 队列 | 按序号顺序处理 |
| 任务分配 | 最小序号者优先 |
分布式锁实现原理:
text
1. 所有客户端创建临时顺序节点
2. 获取父节点下所有子节点
3. 判断自己是否最小序号
4. 最小序号者获得锁
5. 否则监听前一个节点
6. 前一个节点删除后获得通知
示例场景:
text
# 锁竞争场景
客户端A: create -e -s /locks/lock- → /locks/lock-0000000001
客户端B: create -e -s /locks/lock- → /locks/lock-0000000002
客户端C: create -e -s /locks/lock- → /locks/lock-0000000003
# A序号最小,获得锁
# B监听A节点,C监听B节点
# A释放锁后,B获得锁,C监听B
提示:顺序节点实现公平锁,避免羊群效应。
要点总结
- 持久节点永久存在,适合存储配置和元数据
- 临时节点会话结束删除,适合服务注册
- 顺序节点自动编号,同一父节点递增
- 临时节点不能有子节点
- 临时顺序节点实现分布式公平锁
- 序号10位数字,范围约21亿
📝 发现内容有误?点击此处直接编辑