Apache ZooKeeper - ZooKeeper 数据模型回顾

举报
小工匠 发表于 2021/09/09 23:07:07 2021/09/09
【摘要】 文章目录 Pre数据模型概述znode 节点类型与特性持久节点临时节点有序节点 节点小结节点的状态结构 Pre 前面我们梳理了Zk的核心功能 , ZooKeeper 作为一个...

在这里插入图片描述

Pre

前面我们梳理了Zk的核心功能 , ZooKeeper 作为一个分布式协调服务,提供了在分布式环境下一致性问题的解决方案 。

今天 我们再来回顾下基础知识

基本分为三大模块:

  • 数据模型

  • Watch 监控

  • ACL 权限控制


数据模型

概述

通过 ZooKeeper 提供的 create 命令来创建几个节点,分别是:“/locks”“/servers”“/works”:

create /locks
create /servers
create /works

  
 
  • 1
  • 2
  • 3

最终在 ZooKeeper 服务器上会得到一个具有层级关系的数据结构,如下图所示,这个数据结构就是 ZooKeeper 中的数据模型

在这里插入图片描述
ZooKeeper 中的数据模型是一种树形结构,类似文件目录, 有一个根文件夹,下面还有很多子文件夹。

ZooKeeper 的数据模型具有一个固定的根节点(/),我们可以在根节点下创建子节点,并在子节点下继续创建下一级节点。

ZooKeeper 树中的每一层级用斜杠(/)分隔开,且只能用绝对路径(如“get /servers/ap1”)的方式查询 ZooKeeper 节点,而不能使用相对路径。

在这里插入图片描述


znode 节点类型与特性

持久节点

ZooKeeper 中的数据节点也分为持久节点、临时节点和有序节点 。 新版本中增加了 容器节点 和 TTL节点,这里我们关注下 持久节点、临时节点和有序节点 。

持久节点在 ZooKeeper 最为常用的,几乎所有业务场景中都会包含持久节点的创建。

之所以叫作持久节点是因为一旦将节点创建为持久节点,该数据节点会一直存储在 ZooKeeper 服务器上,即使创建该节点的客户端与服务端的会话关闭了,该节点依然不会被删除。

如果我们想删除持久节点,就要显式调用 delete 函数进行删除操作。


临时节点

临时节点是指,如果将节点创建为临时节点,那么该节点数据不会一直存储在 ZooKeeper 服务器上。当创建该临时节点的客户端会话因超时或发生异常而关闭时,该节点也相应在 ZooKeeper 服务器上被删除。同样,我们可以像删除持久节点一样主动删除临时节点。

在平时的开发中,我们可以利用临时节点的这一特性来做服务器集群内机器运行情况的统计,将集群设置为“/servers”节点,并为集群下的每台服务器创建一个临时节点“/servers/ap1”,当服务器下线时该节点自动被删除,最后统计临时节点个数就可以知道集群中的运行情况。

在这里插入图片描述


有序节点

有序节点并不算是一种单独种类的节点,而是在之前提到的持久节点和临时节点特性的基础上,增加了一个节点有序的性质。所谓节点有序是说在我们创建有序节点的时候,ZooKeeper 服务器会自动使用一个单调递增的数字作为后缀,追加到我们创建节点的后边。

例如一个客户端创建了一个路径为 works/task- 的有序节点,那么 ZooKeeper 将会生成一个序号并追加到该节点的路径后,最后该节点的路径为 works/task-1。通过这种方式我们可以直观的查看到节点的创建顺序。


节点小结

上述这几种数据节点虽然类型不同,但 ZooKeeper 中的每个节点都维护有这些内容:一个二进制数组(byte data[]),用来存储节点的数据、ACL 访问控制信息、子节点数据(因为临时节点不允许有子节点,所以其子节点字段为 null),除此之外每个数据节点还有一个记录自身状态信息的字段 stat。


节点的状态结构

每个节点都有属于自己的状态信息 ,执行 stat /nodeName,可以看到控制台输出了一些信息,这些就是节点状态信息。

[zk: localhost:2181(CONNECTED) 6] stat  /artisan-persist
cZxid = 0xa
ctime = Mon Nov 16 23:07:37 CST 2020
mZxid = 0xb
mtime = Mon Nov 16 23:08:55 CST 2020
pZxid = 0xa
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 12
numChildren = 0
[zk: localhost:2181(CONNECTED) 7] 



  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

每一个节点都有一个自己的状态属性,记录了节点本身的一些信息,这些属性如下
在这里插入图片描述
在 ZooKeeper 中为数据节点引入了版本的概念,每个数据节点有 3 种类型的版本信息,对数据节点的任何更新操作都会引起版本号的变化。

ZooKeeper 的版本信息表示的是对节点数据内容、子节点信息或者是 ACL 信息的修改次数。


行了,退下了

在这里插入图片描述

文章来源: artisan.blog.csdn.net,作者:小小工匠,版权归原作者所有,如需转载,请联系作者。

原文链接:artisan.blog.csdn.net/article/details/110769381

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。