ZooKeeper架构 - 基础知识(待续。。)

系统模型

数据模型

称之为 ZNode 的数据节点,它是ZooKeeper中数据的最小单元。每个ZNode都可以保存数据,同时可以挂载子节点。

多个数据节点按照层次话结构进行组织,形成

ZooKeeper架构 - 基础知识(待续。。)

节点特性
  1. 节点类型有:持久节点、临时节点、顺序节点、容器节点(3.5.3版本)、ttl节点(3.5.3版本)五种类型。
  • 持久节点:节点被创建之后,一直存储在ZooKeeper服务器上。
  • 临时节点:生命周期与客户端会话绑定在一起。如果客户端会话失效,而非TCP连接断开,该节点会被自动清理掉。
  • 顺序节点:有顺序性。
  • 容器节点:当所有的子节点被删除后,该节点将来会被删除。
  • TTL节点: 在指定毫秒内没有被修改,并且没有子节点,该节点将来会被删除。

五种类型的节点可以组合成多种类型的节点。

  • PERSISTENT
  • PERSISTENT_SEQUENTIAL
  • EPHEMERAL
  • EPHEMERAL_SEQUENTIAL
  • CONTAINER
  • PERSISTENT_WITH_TTL
  • PERSISTENT_SEQUENTIAL_WITH_TTL
  1. 状态信息

每个数据节点除了存储数据内容之外,还会存储节点本身的状态信息。

可以通过get或者stat命令获取节点的状态信息。(get命令额外输出节点的内容)

ZooKeeper架构 - 基础知识(待续。。)
ZooKeeper架构 - 基础知识(待续。。)

  • czxid:节点被创建时的事务ID
  • mzxid:节点最近一次被修改时的事务ID
  • ctime:节点被创建的时间
  • mtime:节点最近一次被修改的时间
  • pzxid:子节点列表最近一次被修改时的事务ID
  • cversion:子节点的版本号
  • dataVersion:当前数据节点的版本号
  • aclVersion:当前节点的acl版本号
  • ephemeralOwner:创建临时节点的会话sessionID。如果是非临时节点,值为0
  • dataLength:数据内容的长度
  • numChildren:子节点的个数
  1. Watcher - 数据变更的通知

ZooKeeper架构 - 基础知识(待续。。)

客户端在向ZooKeeper服务端注册Watcher的同时,会将Watcher对象存储在WatcherManager中。当ZooKeeper服务端触发Watcher事件之后,会向客户端发送通知。客户端线程从WatcherManager中取出对应的Watcher对象来执行回调逻辑。

ZooKeeper架构 - 基础知识(待续。。)

  1. ACL - 保障数据的安全

ZooKeeper提供了一套完善的ACL(access control list) 权限控制机制来保障数据的安全。

使用"scheme????permission"来标识一个有效的ACL信息。

4.1 scheme - 权限模式

  • ip:通过IP地址来进行权限控制
  • digest:使用SHA-1算法和BASE64编码,分别对"username:password"字符串处理。
  • world:对所有用户开放
  • super:超级用户,可以对ZooKeeper上的数据节点进行任何操作

4.2 ID - 授权对象

ZooKeeper架构 - 基础知识(待续。。)

4.3 permission - 权限

ZooKeeper架构 - 基础知识(待续。。)

通过create或者setAcl设置acl,getAcl获取acl。

create [-s] [-e] path data acl

setAcl path acl

getAcl path