zk的数据模型是一种树形结构,具有固定的根节点(/),可以在根节点下创建子节点,并且可以在子节点下面继续创建下一层节点;
节点类型:
- 持久节点
- 临时节点
- 有序节点
节点内容:一个二进制数组byte[],用来存储节点数据,ACL访问控制,子节点数据,记录自身的状态信息的stat;
stat + 节点路径信心 可以查看状态信息
czxid:创建节点的事务id;
mzxid:最后一次更新的事务id
pzxid:子节点最后一次修改的事务id
version:版本号,可以避免并发更新的问题
cversion:子版本号
ephemeralOwerner:创建节点时的sessionId,如果是持久化节点,值为0
数据同步原理
类似于与滑动窗口,leader服务器维护一个同步窗口,在这个窗口中的事务id,是需要记性数据同步的,(minCommittedLog,maxCommitedLog)
follower服务器维护一个成功同步指针peerLastZxid;
同步方式:
1.DIFF 直接差异化同步
peerLastZxid 在 (minCommittedLog,maxCommitedLog)之间
2.TRUNC + DIFF 先回滚在差异化同步
Leader服务器发现follower服务器存在一条不存在的日志记录,
follower先回滚,在进行同步
3.TRUNC 仅回滚同步
peerLaxt大于maxCommitedLog,
4.SNAP:全量同步
peerLaxt 小于minCommittedLog