当前位置: 首页 > news >正文

zookeeper-znode解析

一. 数据模型:

    ZK拥有一个命名空间就像一个精简的文件系统,不同的是它的命名空间中的每个节点拥有它自己或者它下面子节点相关联的数据。ZK中必须使用绝对路径也就是使用“/”开头。

二. znode:

    zk目录树中每个节点对应一个znode。每个znode维护一些属性,如:当前版本,数据版本,建立时间,修改时间等。

(注: 当设置一个znode节点的数据或读取时,znode节点的内容会被整个替换或全部读取出来)  。 
三. znode类型:
   当新建znode时,需要制定该节点当类型, 不同当类型决定了znode节点的行为方式。
   1.  持久节点:创建后只能通过delete进行删除,否则会一直存在 ,可以通过此类型的znode为应用保存相关数据,即使znode的创建者不在属于应用系统时,数据也可以保存。
2.  临时节点:与持久节点相反,当创建该节点当客户端崩溃或者关闭了与zk的连接时,节点就会被删除,临时节点也可以被非创建者主动删除。临时节点不允许有子节点(目前3.4.14版本)。
3.  持久有序节点:一个znode可以设置为有序节点,设置zode时被分为唯一一个单调递增的整数。当创建有序节点时,序号会被追加到路径后。
4.  临时有序节点:具有临时节点特征,但是它会有序列号,分布式锁中会用到该类型节点。

 创建持久有序节点:

(-s为有序,-e为临时, 默认为持久) 。

四.  znode 特性:

  1. 监视(watches):  zk通常以远程服务的方式被访问,如果每次访问znode时,客户端都需要获取节点中的内容,这样代价就很大(如果内容不变,就没有意义)。为了应对这种场景,zk提供了一个基于通知(notifaction)的机制,客户端可以向zk中的node设置watch,当zode节点发生变化(触发监视器)时,向客户端发送一个通知。需要注意的是:监视点是一个单次触发的操作,为接受多个通知,客户端必须在每次通知后设置一个新的监视点。
2. 数据访问:ZK上存储的数据需要被原子性的操作(要么修改成功要么回到原样),也是就读操作将会读取节点相关所有数据,写操作也会修改节点相关所有数据,,而且每个节点都有自己的ACL。

五. znode时间和版本号:

zxid:ZK节点状态改变会导致该节点收到一个zxid格式的时间戳,这个时间戳是全局有序的,每次更新都会产生一个新的。如果zxid1的值小于zxid2,那么说明zxid2发生的改变在zxid1之后。zxid是一个唯一的事务ID,具有递增性,一个znode的建立或者更新都会产生一个新的zxid值。

version:每一个znode都有一个版本号,随着每次数据变化而自增。有两个api操作可以有条件执行: setdata和delete,这两个调用以版本号作为传入参数,只有当传入参数的版本号与服务器上的版本号一致时,才会调用成功。

各字段内容解析:

 这个版本号的用途就和分布式场景的一个锁概念有关。修改节点数据之前会读取这个数据并记录该数据版本号,当你需要更新时会携带这个版本号去提交,如果你此时携带的版本号(就是你上次读取出来的)和当前节点的版本号相同则说明该数据没有被修改过,那么你的提交就会成功,如果提交失败说明该数据在你读取之后和提交之前这段时间内被修改了。

 通过set命令并携带版本号提交更新,版本号相同更新就会成功。

  --------------------------------------------------------------------------------------------------------------------------

                         深耕运维行业多年,擅长运维体系建设,方案落地。欢迎交流!

                                                     “V-x”: ywjw996

                                                     《 运维经纬 》

http://www.xdnf.cn/news/1365751.html

相关文章:

  • 【动态规划】309. 买卖股票的最佳时机含冷冻期及动态规划模板
  • 深入浅出 ArrayList:从基础用法到底层原理的全面解析(中)
  • 【C语言16天强化训练】从基础入门到进阶:Day 11
  • 信号处理的核心机制:从保存、处理到可重入性与volatile
  • 系统架构设计师-计算机系统存储管理的模拟题
  • 【数据结构】栈和队列——队列
  • AR远程协助:能源电力行业智能化革新
  • 数据库迁移幂等性介绍(Idempotence)(Flyway、Liquibase)ALTER、ON DUPLICATE
  • 05 开发环境和远程仓库Gitlab准备
  • coze工作流200+源码,涵盖AI文案生成、图像处理、视频生成、自动化脚本等多个领域
  • 向量库Qdrant vs Milvus 系统详细对比
  • 智能专网升级:4G与5G混合组网加速企业数字化转型
  • FunASR基础语音识别工具包
  • 【Canvas与标牌】维兰德汤谷公司logo
  • JavaScript 中类(class)的super 关键字
  • 【YOLOv5部署至RK3588】模型训练→转换RKNN→开发板部署
  • UniApp文件上传大小限制问题解决方案
  • kafka 副本集设置和理解
  • kafka常用命令
  • 宋红康 JVM 笔记 Day07|本地方法接口、本地方法栈
  • Linux(四):进程状态
  • python项目中pyproject.toml是做什么用的
  • SDC命令详解:使用set_timing_derate命令进行约束
  • K8s高可用:Master与候选节点核心解析
  • 基于MalConv的恶意软件检测系统设计与实现
  • 力扣(用队列实现栈)
  • SSH 反向隧道:快速解决服务器网络限制
  • 蜗牛播放器 Android TV:解决大屏观影痛点的利器
  • 【科研绘图系列】R语言绘制代谢物与临床表型相关性的森林图
  • 从0死磕全栈第1天:从写一个React的hello world开始