ZooKeeper 拥有一个层次的命名空间,这个和标准的文件系统非常相似

Zookeeper数据模型

从图中我们可以看出 ZooKeeper 的数据模型,在结构上和标准文件系统的非常相似,都是采用这种树形层次结构,ZooKeeper 树中的每个节点被称为—Znode。和文件系统的目录树一样,ZooKeeper 树中的每个节点可以拥有子节点。但也有不同之处:
1) 引用方式:
Zonde 通过路径引用,如同 Unix 中的文件路径。路径必须是绝对的,因此他们必须由斜杠字符来开头。除此以外,他们必须是唯一的,也就是说每一个路径只有一个表示,因此这些路径不能改变。在 ZooKeeper 中,路径由 Unicode 字符串组成,并且有一些限制。字符串"/zookeeper"用以保存管理信息,比如关键配额信息。


2) Znode 结构ZooKeeper 命名空间中的 Znode,兼具文件和目录两种特点。既像文件一样维护着数据、元信息、ACL、时间戳等数据结构,又像目录一样可以作为路径标识的一部分。图中的每个节点称为一个 Znode。 每个 Znode 由 3 部分组成:
 stat:此为状态信息, 描述该 Znode 的版本, 权限等信息 data:与该 Znode 关联的数据
 children:该 Znode 下的子节点
ZooKeeper 虽然可以关联一些数据,但并没有被设计为常规的数据库或者大数据存储,相反的是,它用来管理调度数据,比如分布式应用中的配置文件信息、状态信息、汇集位置等等。这些数据的共同特性就是它们都是很小的数据,通常以 KB 为大小单位。ZooKeeper的服务器和客户端都被设计为严格检查并限制每个 Znode 的数据大小至多 1M,但常规使用中应该远小于此值。


3) 数据访问
ZooKeeper 中的每个节点存储的数据要被原子性的操作。也就是说读操作将获取与节点相关的所有数据,写操作也将替换掉节点的所有数据。另外,每一个节点都拥有自己的ACL(访问控制列表),这个列表规定了用户的权限,即限定了特定用户对目标节点可以执行的操作。


4) 节点类型
Persistent Nodes:永久有效地节点,除非 client 显式的删除,否则一直存在。
Ephemeral Nodes:临时节点,仅在创建该节点 client 保持连接期间有效,一旦连接丢失,zookeeper 会自动删除该节点。
Sequence Nodes:顺序节点,client 申请创建该节点时, ZooKeeper 会自动在节点路径末尾添加递增序号,这种类型是实现分布式锁,分布式 queue 等特殊功能的关键。


5) 监控
客户端可以在节点上设置 watch,我们称之为监视器。当节点状态发生改变时(Znode的增、删、改)将会触发 watch 所对应的操作。当 watch 被触发时,ZooKeeper 将会向客户端发送且仅发送一条通知,因为 watch 只能被触发一次,这样可以减少网络流量。ZooKeeper 可以为所有的读操作设置 watch,这些读操作包括:exists()、getChildren()及 getData()。watch 事件是一次性的触发器,当 watch 的对象状态发生改变时,将会触发此对象上 watch 所对应的事件。watch 事件将被异步地发送给客户端,并且 ZooKeeper为 watch 机制提供了有序的一致性保证。理论上,客户端接收 watch 事件的时间要快于其看到 watch 对象状态变化的时间。

相关文章:

  • 2021-11-24
  • 2021-05-28
  • 2021-11-29
  • 2022-01-09
  • 2021-07-02
  • 2021-10-02
猜你喜欢
  • 2021-04-18
  • 2021-07-21
  • 2021-10-04
  • 2022-03-02
相关资源
相似解决方案