zookeeper数据模型(Data Mode)及相关特点

zookeeper数据模型(Data Model)
其实zookeeper 可以被理解为一个高可用的文件系统。但是它没有文件和文件夹的概念,只有一个znode的节点概念。
如果读者真的把znode理解为文件或者文件夹,也不为错。那么,我们可以认为znode就是数据的容器,也就是其他节点的容器。znode 是一个树形结构,如下图所示:


  • 一个znode中包含了存储的数据和访问控制列表ACL(Access Control List)。
  • ZooKeeper的设计适合存储少量的数据,并不适合存储大量数据,所以znode的存储限制最大不超过1M。
  • znode数据的访问被定义成原子性的。
一个客户端访问一个znode时,不会只得到一部分数据;客户端访问数据要么获得全部数据,要么读取失败,什么也得不到。相似的,写操作时,要么写入全部数据,要么写入失败,什么也写不进去。ZooKeeper能够保证写操

作只有两个结果,成功和失败。绝对不会出现只写入了一部分数据的情况。

  • 定位znode的路经只能用绝对路径

即Zookeeper不能识别 ../ 和 ./ 这样的路径,只能使用/userService、/userService/addService、/userService/updateService、/userService/findService等。

  • 不能用zookeeper作为根节点命名

zooKeeper已经默认使用 zookeeper 来命名了一个根节点,用来存储一些管理数据。

  • 临时节点(Ephemeral znodes) 与持久化节点(persistent znodes)

1.临时节点会在创建znode的客户端的session结束后,ephemeral类型的znode将被删除。

2.ephemeral znode没有任何子节点。

3.临时节点在ACL策略下允许访问的情况下对任何其他客户端都是可见的。所以创建分布式系统时,需要知道分布式资源是否可用,可以使用     Ephemeral znode来实现一个成员关系管理,任何一个客户端进程任何时候都可以知道其他成员是否可用。
4.持久化节点创建以后,就与客户端没什么联系了,除非主动去删除它,否则他会一直存在。
  • znode节点排序是使用Znode的序号来实现的,可以使用znode的序号来构建一个分x享锁(share lock)。

猜你喜欢

转载自blog.csdn.net/lyitit/article/details/80865217