(1)引用方式
Zonde 通过路径引用,如同Unix 中的文件路径。路径必须是绝对的,因而必须由斜杠字符来开头;除此以外,必须是唯一的,每一个路径只有一个表示方法,这些路径不能改变。在Zoo-Keeper 中,路径由Unicode 字符串组成,并且有一些限制。字符串“/zookeeper”用以保存管理信息,比如关键配额信息。
(2)Znode 结构
ZooKeeper 命名空间中的Znode,兼具文件和目录两个特点。既像文件一样维护着数据元信息、ACL、时间戳等数据结构,又像目录一样可以作为路径标识的一部分。图5.4 中的每个节点称为一个Znode。每一个Znode 由以下3 部分组成:
①stat:此为状态信息,描述该Znode 的版本、权限等信息。
②data:与该Znode 关联的数据。
③children:该Znode 下的子节点。
ZooKeeper 虽然可以关联一些数据,但并没有被设计为常规的数据库或大数据存储,相反它用来管理调度数据,例如分布式应用中的配置文件信息、状态信息、汇集位置等。这些数据的共同特性:它们都是很小的数据,通常以“KB”为单位。ZooKeeper 的服务器和客户端都被设计为严格检查,并限制每个Znode 的数据大小至多1 MB,但常规使用中应该远小于此值。
(3)数据访问
ZooKeeper 中的每个节点存储的数据都要被原子性的操作。读操作将获取与节点相关的所有数据,写操作也将替换节点的所有数据。另外,每一个节点都拥有自己的ACL(访问控制列表),这个列表规定了用户的权限,即限定了特定用户对目标节点可以执行的操作。
(4)顺序节点
当创建Znode 时,用户可以请求在ZooKeeper 的路径结尾添加一个递增的计数。这个计数对于此节点的父节点来说是唯一的,它的格式为“%10d”(10 位数字,没有数值的数位用“0”补充,例如“0000000001”)。当计数值大于232 -1 时,计数器将溢出。
(5)观察
客户端可以在节点上设置Watch,称为“监视器”。当节点状态发生改变时(Znode 的增、删、改)将会触发Watch 所对应的操作。当Watch 被触发时,ZooKeeper 将会向客户端发送且仅发送一条通知。
(6)时间戳
致使ZooKeeper 节点状态改变的每一个操作都将使节点接收到一个Zxid 格式的时间戳,并且这个时间戳全局有序。也就是说,每个对节点的改变都将产生一个唯一的Zxid。如果Zxid1 的值小于Zxid2 的值,那么Zxid1 所对应的事件发生在Zxid2 所对应的事件之前。实际上,ZooKeeper 的每个节点维护着三个Zxid 值,分别为:cZxid、mZxid、pZxid。(www.xing528.com)
①cZxid:节点的创建时间所对应的Zxid 格式时间戳。
②mZxid:节点的修改时间所对应的Zxid 格式时间戳。
③pZxid:它与该节点的子节点或该节点本身的最近一次创建或删除的时间戳对应。实际操作中Zxid 是一个64 位的数字,它的高32 位是epoch 用来标识Leader 关系是否改变,每次一个Leader 被选出来,它都会有一个新的epoch。低32 位是个递增计数。
(7)版本号
对节点的每一个操作都将致使这个节点的版本号增加。每个节点维护着三个版本号,它们分别为:
①Version:节点数据版本号。
②cVersion:子节点版本号。
③aVersion:节点所拥有的ACL 版本号。
(8)ZooKeeper 节点属性
通过前面的介绍可知,一个节点自身拥有表示其状态的许多重要属性,见表5.2。
表5.2 Znode 节点属性结构
在ZooKeeper 中有9 个基本操作,见表5.3。
表5.3 ZooKeeper 基本操作
更新ZooKeeper 操作是有限制的,delete 或setData 必须明确要更新的Znode 的版本号,可以调用exists 找到。如果版本号不匹配,更新将会失败。更新ZooKeeper 操作是非阻塞式的,因此,客户端如果失去了一个更新(由于另一个进程在同时更新这个Znode),可以在不阻塞其他进程执行的情况下,选择重新尝试或进行其他操作。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。