ZooKeeper架构 - 基础知识(待续。。)
系统模型
数据模型
称之为 ZNode 的数据节点,它是ZooKeeper中数据的最小单元。每个ZNode都可以保存数据,同时可以挂载子节点。
多个数据节点按照层次话结构进行组织,形成树。
节点特性
- 节点类型有:持久节点、临时节点、顺序节点、容器节点(3.5.3版本)、ttl节点(3.5.3版本)五种类型。
- 持久节点:节点被创建之后,一直存储在ZooKeeper服务器上。
- 临时节点:生命周期与客户端会话绑定在一起。如果客户端会话失效,而非TCP连接断开,该节点会被自动清理掉。
- 顺序节点:有顺序性。
- 容器节点:当所有的子节点被删除后,该节点将来会被删除。
- TTL节点: 在指定毫秒内没有被修改,并且没有子节点,该节点将来会被删除。
五种类型的节点可以组合成多种类型的节点。
- PERSISTENT
- PERSISTENT_SEQUENTIAL
- EPHEMERAL
- EPHEMERAL_SEQUENTIAL
- CONTAINER
- PERSISTENT_WITH_TTL
- PERSISTENT_SEQUENTIAL_WITH_TTL
- 状态信息
每个数据节点除了存储数据内容之外,还会存储节点本身的状态信息。
可以通过get或者stat命令获取节点的状态信息。(get命令额外输出节点的内容)
- czxid:节点被创建时的事务ID
- mzxid:节点最近一次被修改时的事务ID
- ctime:节点被创建的时间
- mtime:节点最近一次被修改的时间
- pzxid:子节点列表最近一次被修改时的事务ID
- cversion:子节点的版本号
- dataVersion:当前数据节点的版本号
- aclVersion:当前节点的acl版本号
- ephemeralOwner:创建临时节点的会话sessionID。如果是非临时节点,值为0
- dataLength:数据内容的长度
- numChildren:子节点的个数
- Watcher - 数据变更的通知
客户端在向ZooKeeper服务端注册Watcher的同时,会将Watcher对象存储在WatcherManager中。当ZooKeeper服务端触发Watcher事件之后,会向客户端发送通知。客户端线程从WatcherManager中取出对应的Watcher对象来执行回调逻辑。
- 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 - 授权对象
4.3 permission - 权限
通过create或者setAcl设置acl,getAcl获取acl。
create [-s] [-e] path data acl
setAcl path acl
getAcl path