数据模型:
树形结构
zk维护的数据主要有:客户端的会话(
session
)状态及数据节点(
dataNode
)信息。
zk在内存中构造了个
DataTree
的数据结构,维护着path到dataNode的映射以及dataNode间的树状层级关系。为了提⾼读取性能,集群中每个服务节点都是将数据全量存储在内存中。所以,
zk最适于读多写少且轻量级数据
的应⽤场景。
数据仅存储在内存是很不安全的,zk采⽤事务⽇志⽂件及快照⽂件的⽅案来落盘数据,保障数据在不丢失的情况下能快速恢复。
树中的每个节点被称为— Znode
Znode 兼具
⽂件
和
⽬录
两种特点。可以做路径标识,也可以存储数据,并可以具有⼦ Znode。具有增、 删、改、查等操作。
Znode 具有原⼦性操作,读操作将获取与节点相关的所有数据,写操作也将 替换掉节点的所有数据。另外,每⼀个节点都拥有⾃⼰的 ACL(访问控制列 表),这个列表规定了⽤户的权限,即限定了特定⽤户对⽬标节点可以执⾏的操作
Znode 存储数据⼤⼩有限制。每个 Znode 的数据⼤⼩⾄多 1M,常规使⽤中应该远⼩于此值。
Znode 通过路径引⽤,如同 Unix 中的⽂件路径。路径必须是绝对的,因此他们必须由斜杠字符来开头。除此以外,他们必须是唯⼀的,也就是说每⼀个路径只有⼀个表示,因此这些路径不能改变。在ZooKeeper 中,路径由 Unicode 字符串组成,并且有⼀些限制。字符串"/zookeeper"⽤以保存管理信息,⽐如关键配额信息。
持久节点:⼀旦创建、该数据节点会⼀直存储在zk服务器上、即使创建该节点的客户端与服务端的会话关闭了、该节点也不会被删除
临时节点:当创建该节点的客户端会话因超时或发⽣异常⽽关闭时、该节点也相应的在zk上被删除
有序节点:不是⼀种单独种类的节点、⽽是在持久节点和临时节点的基础上、增加了⼀个节点有序的性质 。