分布式(四)——zk系统模型

本文深入探讨ZooKeeper的数据模型,详细介绍节点类型、状态及版本号作用,解析Watcher机制如何实现数据变更通知,适合分布式系统爱好者及开发者阅读。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据模型

在这里插入图片描述
在zk里面每个节点都类似linux的文件系统,每个节点下面都可以保存数据。

节点类型

  1. 持久节点
  2. 持久顺序节点
  3. 临时节点
  4. 临时顺序节点

区别在于:持久节点需要有删除操作来删除,而临时节点,会与客户端的生命周期绑定。
顺序节点的话,每个父节点会为它的第一级子节点维护一个顺序,每个添加进来的子节点都会在名字的后面生成一串序号

节点状态

每个节点除了数据内容外还有自身的状态信息。
czxid 节点被创建的事务Id
mzxid 节点被修改的事务Id
ctime 节点被创建的时间
mtime 节点被修改的时间
version 节点的版本(即修改的次数)
cversion 子节点的版本(子节点的修改的次数)
aversion 当前acl的版本
numChildren 子节点的个数
dataLength 数据内容的长度
pzxid 子节点被修改的最后一次的事务id(子节点修改不包括对子节点内容的修改)
ephemeralOwner 临时节点会保存sessionId,持久节点,则会保存0

版本号的作用

可以用来给乐观锁一个参考,乐观锁,不像悲观锁那样,全局都只有一把锁。如果竞争锁比较激烈,悲观锁策略比较合适。乐观锁,只有有更新,则会将版本号取出,另一个变量为下一个版本号,更新数据的时候,会对原版本号进行比对,如果原版本号没有改变,则说明没有其他的竞争锁的情况,可以更新数据。

Watcher——数据变更的通知

在这里插入图片描述
client启动后会在zk上进行注册,并在感兴趣的节点上进行注册watcher,同时会在watchManager上面保存watcher实例,节点进行改变,则会对client进行通知,并且会触发保存在WatchManager里面的watch的回调。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值