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

数据模型

分布式(四)——zk系统模型
在zk里面每个节点都类似linux的文件系统,每个节点下面都可以保存数据。

节点类型

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

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

节点状态

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

版本号的作用

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

Watcher——数据变更的通知

分布式(四)——zk系统模型
client启动后会在zk上进行注册,并在感兴趣的节点上进行注册watcher,同时会在watchManager上面保存watcher实例,节点进行改变,则会对client进行通知,并且会触发保存在WatchManager里面的watch的回调。
分布式(四)——zk系统模型