核心数据模型就是znode树,平时我们往zk写数据就是创建树形结构的znode,里面可以写入值,就这数据模型,都在zk内存里存放
有两种节点,持久节点和临时节点,持久节点就是哪怕客户端断开连接,一直存在
临时节点,就是只要客户端断开连接,节点就没了
还有顺序节点,就是创建节点的时候自增加全局递增的序号
大家去看一下,之前Java架构的分布式锁里,有一个zk锁的源码分析,curator框架,zk分布式锁的实现,在里面就是基于zk的临时顺序节点来实现的,加锁的时候,是创建一个临时顺序节点
zk会自动给你的临时节点加上一个后缀,全局递增的,编号
如果你客户端断开连接了,就自动销毁这个你加的锁,此时人家会感知到,就会尝试去加锁
如果你是做元数据存储,肯定是持久节点
如果你是做一些分布式协调和通知,很多时候是用临时节点,就是说,比如我创建一个临时节点,别人来监听这个节点的变化,如果我断开连接了,临时节点消失,此时人家会感知到,就会来做点别的事情
顺序节点,在分布式锁里用的比较经典
每个znode还有一个Stat用来存放数据版本,version(znode的版本),cversion(znode子节点的版本),aversion(znode的ACL权限控制版本)