ZooKeeper数据结构
Time in ZooKeeper
ZooKeeper跟踪时间的多种方式
1)Zxid:每个ZooKeeper状态变化将会接收到一个zxid(ZooKeeper Transaction Id)的时间戳。ZooKeeper通过该字段了解所有变化的顺序。每次变化都会有一个唯一的zxid,如果zxid1小于zxid2,说明zxid1发生在zxid2之前。
2)Version numbers:每个对节点的变化都会对这个节点的版本号加1.有3个版本号他们分别是version\cversion\aversion
3)Ticks:当在使用多机ZooKeeper服务时,服务器之间会使用ticks票据来定义事件(比如状态上传、会话超时、连接超时等等)的计时。tick时间会通过最小会话超时时间间接显示;如果客户端请求会话超时小于最小的会话时间,服务端会告诉客户端这个会话超时时间实际是最小会话时间;
4)Real time:ZooKeeper没有使用实时时间或者时钟时间,除了把时间戳放进正在创建或者修改的znode节点的数据结构中。
在ZooKeeper的每个znode节点的数据结构由以下几个字段组成:
1)czxid-znode节点创建时间所对应的zxid
2)mzxid-znode节点修改时间所对应的zxid
3)ctime-znode节点创建时从epoch过来的时间戳
4)mtime-znode节点修改时从epoch过来的时间戳
5)version-znode节点的版本号
6)cversion-znode子节点的版本号
7)aversion-znode节点的权限(ACL)版本号
8)ephemeralOwner-如果znode节点是临时节点,表示所属会话的id,如果不是临时节点则为0
9)dataLength-znode节点数据字段的长度
10)numChildren-znode节点的子节点数量