一、zk 数据模型介绍
- zk 中的数据结构是一棵树结构
- 每个节点都是一个 znode,节点中可以保存数据,节点可以分为临时节点和永久节点。
- 节点中包含一个版本号,每当节点数据发生变化,那么版本号也会进行累加(乐观锁)
- 节点操作有权限系统去设置,名为 acl

1.1 znode 结构
属性 | 描述 |
---|---|
czxid | 节点被创建的Zxid值 |
mzxid | 节点被修改的Zxid值 |
ctime | 节点被创建的时间 |
mtime | 节点最后一次被修改的时间 |
versoin | 节点被修改的版本号 |
cversion | 节点的所拥有子节点被修改的版本号 |
aversion | 节点的ACL被修改的版本号 |
emphemeralOwner | 如果此节点为临时节点,那么它的值为这个节点拥有者的会话ID;否则,它的值为0 |
dataLength | 节点数据域的长度 |
numChildren | 节点拥有的子节点个数 |
1.2 znode的种类
znode 有两种维度来决定种类
- 是否临时(是否持久)
- 是否顺序
所以有四种组合:
- 持久顺序:节点创建后会一直存在zookeeper服务器上,直到主动删除
- 持久非顺序:每个节点都会为它的一级子节点维护一个顺序
- 临时顺序:临时节点的生命周期和客户端的会话保持一致。当客户端会话失效,该节点自动清理
- 临时非顺序:在临时节点上多了一个顺序的特性
无论是哪种类型的 znode,在 zookeeper 的树结构中都是唯一的,无法重复创建 path 完全相同的 znode。即使是有顺序的,zk 也会自动在 path 后面顺延序列号。
二、zk 的作用体现
2.1 选举
master 节点选举,主节点挂了以后,从节点就会接手工作,并且保证这个节点是唯一的,这就是所谓的首脑模式,从而保证我们的集群是高可用的。
2.2 统一配置文件
统一配置文件管理,即只需要部署一台服务器,则可以把相同的配置文件同步更新到其他所有服务器。
2.3 发布订阅
发布订阅,dubbo 发布者可以将数据保存到 znode 上,其它订阅者可以读取到这个数据。
2.4 分布式锁
提供分布式锁,分布式环境中不同进程进行公共资源的抢夺。这就是利用的 znode 唯一的特点来实现的作用之一。
2.5 集群管理
集中保证数据的强一致性,无论客户端读取哪一个节点,都可以读取到完全相同的数据。

网友评论