Zookeeper - 介绍篇(2)

ZK数据结构

zk总体保存数据的结构相似于文件系统的树形结构。可是每一个节点能够拥有一个名字,并做为一个文件夹包括多个其余节点,同时还能够保存数据。
这里写图片描述
须要注意:node

  • 空字符(\u0000)不能做为名字
  • \u0001 - \u0019 和\u007F - \u009F最好不要做为名字的一部分,由于他们表示的字符很差显示或者由于他们能够被转换成多种表现形式
  • \ud800 -uF8FFF, \uFFF0-uFFFF, \uXFFFE -
    \uXFFFF (where X is a digit 1 - E), \uF0000 - \uFFFFF 是不容许使用的
  • “.”能够成为名字的一部分,可是名字不能只含有”.”
  • zookeeper是保留字段

经常使用命令:git

create /path data --建立节点/path, 并存储数据data 
delete /path --删除节点/path 
exists /path --检查节点/path是否存在 
setData /path data --设置节点/path的数据 
getData /path --获取节点/path的数据 
getChildren /path --获取节点/path的子节点

1. Znodes

每一个节点就是一个Znode,Znode有四种: 持久节点,临时节点,持久连续节点,临时连续节点服务器

  • 持久节点只能经过delete调用才能删除, 可用于存储一些应用数据(即便它的建立者不存在了,但这些数据依然须要保存),如Master-Worker中的任务分配信息。
  • 临时节点,会在客户端崩溃或断开链接时被删除,或者经过delete调用。好比, 在Master-Worker中的Master和Worker节点均采用临时节点,当Master崩溃或链接断开, 该节点将自动删除,既而才能进行Master选举,临时节点暂时还不支持有子节点,即使之后支持, 其子节点也必须是临时节点。
  • 连续节点:一个Znode能够被设置为sequential,连续节点将被分配一个惟一且连续的整数, 该整数会追加到节点的path后,如客户端建立一个path为/task/task-的连续节点,最终节点的path会变成/task/task-1。

客户端经过注册来接收节点变化的通知。注册接收通知经过Watch 来设置。而Watch是一次性操做,也就是只能接收一次通知,若是须要继续获得通知, 则须要再次Watch。markdown

这里写图片描述

每一个Znode保存的数据的读写都是原子性的,读取会得到一个Znode全部的数据,写入会修改一个Znode全部的数据。Znode的数据访问管理经过每一个Znode维护的访问管理列表(Access Control List,ACL)实现。session

2. 时间记录

zookeeper有多种方式记录时间:数据结构

  • Zxid: zk状态每次的改变会收到一个Zxid(zookeeper transaction id),这个表示每一个改变的顺序。每一个改变都会有一个全局惟一的Zxid,而且这个Zxid是递增的。
  • version number:每一个Znode都有三个版本号,Znode的每次修改都会增长这三个中的一个版本号
    • version(Znode的数据改变,就会更新这个版本号)
    • cversion(子节点改变)
    • aversion(ACL改变)
  • Ticks: 各类尝试次数。配置里面tickTime这个时间是做为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每一个 tickTime 时间就会发送一个心跳。initLimit:这个配置项是用来配置 Zookeeper 接受客户端(这里所说的客户端不是用户链接 Zookeeper 服务器的客户端,而是 Zookeeper 服务器集群中链接到 Leader 的 Follower 服务器)初始化链接时最长能忍受多少个心跳时间间隔数。
  • Real Time: zk通常不用实际时间,除了在新建Znode和更新时往Znode的统计中会放入实际时间

3. Znode的统计信息结构

  1. czxid:记录znode建立时的zxid
  2. mzxid:记录znode最近一次修改时的zxid
  3. ctime:记录znode建立时的时间
  4. mtime:记录znode最近一次修改时的时间
  5. version:Znode的数据改变,就会更新这个版本号
  6. cversion:子节点改变
  7. aversion:ACL改变
  8. ephemeralOwner:若是是临时节点,则记录拥有者的session id,若是不是临时节点,则为0
  9. dataLength:znode记录的数据长度
  10. numChildren:子节点的个数
相关文章
相关标签/搜索