2 Star 65 Fork 54

柳诗妍 / Java-Interview-Advanced

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
123.md 1.55 KB
一键复制 编辑 原始数据 按行查看 历史
leelovejava 提交于 2020-06-04 02:11 . update 中间件之Zookeeper

123、ZooKeeper的数据模型:znode和节点类型

ZooKeeper的数据模型:znode和节点类型

核心数据模型就是znode树,平时我们往zk写数据就是创建树形结构的znode,里面可以写入值,就这数据模型,都在zk内存里存放

有两种节点,持久节点和临时节点,持久节点就是哪怕客户端断开连接,一直存在

临时节点,就是只要客户端断开连接,节点就没了

还有顺序节点,就是创建节点的时候自增加全局递增的序号

大家去看一下,之前Java架构的分布式锁里,有一个zk锁的源码分析,curator框架,zk分布式锁的实现,在里面就是基于zk的临时顺序节点来实现的,加锁的时候,是创建一个临时顺序节点

zk会自动给你的临时节点加上一个后缀,全局递增的,编号

如果你客户端断开连接了,就自动销毁这个你加的锁,此时人家会感知到,就会尝试去加锁

如果你是做元数据存储,肯定是持久节点

如果你是做一些分布式协调和通知,很多时候是用临时节点,就是说,比如我创建一个临时节点,别人来监听这个节点的变化,如果我断开连接了,临时节点消失,此时人家会感知到,就会来做点别的事情

顺序节点,在分布式锁里用的比较经典

每个znode还有一个Stat用来存放数据版本,version(znode的版本),cversion(znode子节点的版本),aversion(znode的ACL权限控制版本)

Java
1
https://gitee.com/th_520/Java-Interview-Advanced.git
git@gitee.com:th_520/Java-Interview-Advanced.git
th_520
Java-Interview-Advanced
Java-Interview-Advanced
master

搜索帮助