文章目录

  • Pre
  • 数据模型
    • 概述
    • znode 节点类型与特性
      • 持久节点
      • 临时节点
      • 有序节点
    • 节点小结
    • 节点的状态结构

Pre

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

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

基本分为三大模块:

  • 数据模型

  • Watch 监控

  • ACL 权限控制


数据模型

概述

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

create /locks
create /servers
create /works

最终在 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] 

每一个节点都有一个自己的状态属性,记录了节点本身的一些信息,这些属性如下

在 ZooKeeper 中为数据节点引入了版本的概念,每个数据节点有 3 种类型的版本信息,对数据节点的任何更新操作都会引起版本号的变化。

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


行了,退下了

Apache ZooKeeper - ZooKeeper 数据模型回顾相关推荐

  1. 微服务四个常见问题,以及SpringCloud Netflix和SpringCloud Alibaba和Apache Dubbo zookeeper区别

    微服务的四个问题 1.服务很多,客户端该怎么访问? 2.这么多服务? 服务之间如何通信? 3.这么多服务? 如何治理? 4.服务挂了怎么办? 提出三种解决方案 1.spring cloud NetFl ...

  2. log4j:WARN No appenders could be found for logger (org.apache.zookeeper.ZooKeeper). log4j:WARN Pleas

    log4j:WARN No appenders could be found for logger (org.apache.zookeeper.ZooKeeper). log4j:WARN Pleas ...

  3. Zookeeper的数据模型和节点类型

    数据模型: 树形结构 zk维护的数据主要有:客户端的会话( session )状态及数据节点( dataNode )信息. zk在内存中构造了个 DataTree 的数据结构,维护着path到data ...

  4. Apache ZooKeeper - ZooKeeper 集群中 Leader 与 Follower 的数据同步策略

    文章目录 流程图 why ? How ? 何时触发数据同步的机制? 同步哪些数据 同步方式 DIFF 同步 TRUNC+DIFF 同步 TRUNC 同步 SNAP 同步 同步后的处理 源码分析 流程图 ...

  5. Zookeeper的数据模型

    数据模型 一个树形结构,类似前端开发中的tree.js组件 或者 数据模型 可以理解为Linux或者Unix的文件目录 节点 每一个节点,称为znode 可以有子节点,也可以有数据 节点分类 每个节点 ...

  6. [ ZooKeeper]ZooKeeper 的功能和原理

    Zookeeper功能简介: ZooKeeper 是一个开源的分布式协调服务,由雅虎创建,是 Google Chubby 的开源实现.分布式应用程序可以基于 ZooKeeper 实现诸如数据发布/订阅 ...

  7. 2021年大数据ZooKeeper(三):Zookeeper数据模型和节点类型

    目录 Apache ZooKeeper Zookeeper数据模型 Zookeeper节点类型 Apache ZooKeeper Zookeeper数据模型 图中的每个节点称为一个Znode. 每个Z ...

  8. ZooKeeper入门之数据模型和常用命令介绍

    1.zookeeper简介 1.1 什么是zookeeper zookeeper官网:https://zookeeper.apache.org/ ZooKeeper是一个分布式的,开放源码的分布式应用 ...

  9. ZooKeeper数据模型

    Zookeeper的数据模型 » 层次化的目录结构,命名符合常规文件系统规范(Linux) » 每个节点在zookeeper中叫做znode,并且其有一个唯一的路径标识 » 节点Znode可以包含数据 ...

最新文章

  1. Linux free -m命令查看内存使用情况
  2. 数据库性能优化—主从分离
  3. 优化案例(part3)--Aberrance suppresse dspatio-temporal correlation filters for visual object tracking
  4. 【2019牛客暑期多校训练营(第三场)- A】Graph Games(思维,对边分块)
  5. python 面向对象编程简称_Python基础-面向对象编程
  6. Pivotal冯雷:以数字化为核心竞争力的时代 自主可控是企业的“必然选择”
  7. spring源码分析第一天------源码分析知识储备
  8. 计算机科学与技术文科可以学么,文科生成绩一般,大学可以选择计算机吗?
  9. oracle+st_geometry
  10. android window 半透明,popupWindow半透明背景
  11. VMware for mac inside error solutions
  12. 详解JS中的事件机制(带实例)
  13. 移动通信原理B-------课后作业1
  14. oracle vm virtualbox安装xp,如何在VirtualBox虚拟机中安装XP系统?
  15. keil5怎么放大字体_keil5不同字体不全 keil字体放大快捷键
  16. Spring常用注解(绝对经典)
  17. Fedora9下编译内核
  18. 为什么不使能中断,中断标志位也会被置一
  19. MySQL 安装 5.0
  20. CSP 202009-4 星际旅行

热门文章

  1. 微信广告服务器地址,【微信广告服务商平台】微信广告服务商平台运营经验分享!...
  2. terminal怎么运行c语言文件,在mac电脑的terminal里该如何运行c语言
  3. 不是变量 win10_在win10下安装manim
  4. Oracle数据库对象----视图
  5. 安卓StepView事件进度条的简单实现
  6. PyTorch中的数据输入和预处理
  7. 页面中color颜色值_HTML+CSS 基础知识-入门概括-颜色与单位
  8. ROC 曲线和 AUC 值
  9. Markovdecisionprocesses_Discretestochasticdynamicprogramming下载
  10. 嗅探软件和网络测试,决战无线网络 七款浏览器载入速度测试