Zookeeper 数据模型
Zookeeper 拥有着类似文件系统的命名空间,唯一的区别是在命名空间下的每一个节点都有数据和他关联
Znodes
zookeeper 的节点 znode, znode 维护着一些列状态信息 包含数据的版本,acl 权限修改信息,时间戳 服务器返回数据和客户端操作信息都是携带版本信息的 如果版本信息不一致的话那个将会失败(有点像乐观锁实现)
TIPS 这种处理行为可用户覆盖处理
znode 的几个特征
watches
客户点可以对znode 添加监听器, 当触发的时候 服务器会给客户端一个通知
Data Access
数据存储在节点,数据特性是 原子特性的(不可再分割),每一个节点都有相应的ACL(Access Control List) 设定。zookeeper 节点存储的数据主要起协调各节点工作
Ephemeral Nodes(临时节点)
- 没有子节点
- 生命周期和会话一样
Sequence Nodes(序列节点)
- 命名唯一
- 创建节点的时候指定他的counter
Time in zookeeper
zookeeper 有多种跟踪方式
Zxid(ZooKeeper Transaction Id)
每一个change 操作都携带着一个唯一的ZXID,如果changeA 的 zxid > changeB 的 zxid, 那么 那么changeB 将会优先发生(越小优先级越高)
Version Number(版本号)
每次change 都会修改版本号 3 个版本号
- number of changes to the data of a znode
- number of changes to the children of a znode
- number of changes to the ACL of a znode
Ticks
多服务器时,使用ticks 定义时间事件,载入状态,会话超时,节点之间connection 超时等
会话超时设定 2 倍的 心跳时间
Real time
zookeeper 时间 需要你自己放进来 不适用本机时间
zookeeper 的状态信息结构
每个节点的状态信息都是由以下数据字段组成的
-
czxid
创建节点的Zxid
-
mzxid
最后一次修改节点的Zxid
-
ctime
节点创建时间(毫秒级别)
-
mtime
节点最后修改时间(毫秒界别)
-
version
节点数据版本信息
-
cversion
子节点版本号信息
-
aversion
acl 版本号信息
-
ephemeralOwner
如果该节点是临时节点 这表示为会话ID 否则为 0
-
dataLength
该节点的数据长度
-
numChildren
该节点子节点的数量
zookeeper session
session 状态图
资料列表