Zookeeper--04---Zookeeper内部的数据模型

Posted 高高for 循环

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Zookeeper--04---Zookeeper内部的数据模型相关的知识,希望对你有一定的参考价值。

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


Zookeeper内部的数据模型

1.zk是如何保存数据的

zk中的数据是保存在节点上的,节点就是znode,多个znode之间构成⼀颗树的⽬录结构。

  • Zookeeper 的数据模型是什么样呢?它很像数据结构当中的树,
  • 也很像⽂件系统的⽬录。
  • 树是由节点所组成,Zookeeper 的数据存储也同样是基于节点,这种节点叫做 Znode
  • 但是,不同于树的节点,Znode 的引⽤⽅式是路径引⽤,类似于⽂件路径:
/动物/猫
/汽⻋/宝⻢

这样的层级结构,让每⼀个 Znode 节点拥有唯⼀的路径,就像命名空间⼀样对不同信息作出
清晰的隔离。

2.zk中的znode是什么样的结构

zk中的znode,包含了四个部分:

2.1 data:保存数据

2.2 acl:权限

定义了什么样的.户能够操作这个节点,且能够进.怎样的操作。

  • c: create 创建权限,允许在该节点下创建.节点
  • w:write 更新权限,允许更新该节点的数据
  • r:read 读取权限,允许读取该节点的内容以及.节点的列表信息
  • d:delete 删除权限,允许删除该节点的.节点
  • a:admin 管理者权限,允许对该节点进.acl权限设置

2.3 stat:描述当前znode的元数据

2.4 child:当前节点的⼦节点

3.zk中节点znode的类型

3.1 持久节点:

create /test3

创建出的节点,在会话结束后依然存在。保存数据

3.2 持久序号节点:

  • 创建出的节点,根据先后顺序,会在节点之后带上⼀个数值,越后执⾏数值越⼤,适⽤于分布式锁的应⽤场景- 单调递增

create -s /test3

3.3 临时节点:

create -e /test3

  1. 该节点的生命周期依赖于创建它们的会话。一旦会话(Session)结束,临时节点将被自动删除,当然可以也可以手动删除。虽然每个临时的Znode都会绑定到一个客户端会话,但他们对所有的客户端还是可见的。
  2. ZooKeeper的临时节 点不允许拥有子节点。

那么临时节点是如何维持⼼跳呢?

通过这个特性,zk作为注册中心, 可以实现服务注册与发现的效果

3.4 临时序号节点

  • 跟持久序号节点相同,适⽤于临时的分布式锁

create -e -s /test3

3.5 Container节点

Container节点(3.5.3版本新增):Container容器节点,当容器中没有任何⼦节点,该容器节点会被zk定期删除(60s)。

create -c /test3

3.6 TTL节点

  • 可以指定节点的到期时间,到期后被zk定时删除。
  • 只能通过系统配置zookeeper.extendedTypesEnabled=true 开启

4.zk的数据持久化

zk的数据是运⾏在内存中,zk提供了两种持久化机制:

  • 事务⽇志
  • 数据快照

事务⽇志

  • zk把执⾏的命令以⽇志形式保存在dataLogDir指定的路径中的⽂件中(如果没有指定dataLogDir,则按dataDir指定的路径)。

数据快照

  • zk会在⼀定的时间间隔内做⼀次内存数据的快照,把该时刻的内存数据保存在快照⽂件中。

zk通过两种形式的持久化,在恢复时先恢复快照⽂件中的数据到内存中,再⽤⽇志⽂件中的数据做增量恢复,这样的恢复速度更快。

以上是关于Zookeeper--04---Zookeeper内部的数据模型的主要内容,如果未能解决你的问题,请参考以下文章