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.pswp.cn/pingmian/94666.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/94666.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis 高可用篇

主从复制是怎么实现的? 如果服务器发生了宕机,由于数据恢复是需要点时间,那么这个期间是无法服务新的请求的;如果这台服务器的硬盘出现了故障,可能数据就都丢失了。 要避免这种单点故障,最好的办法是将数据…

C++ 指针与引用面试深度解析

C 指针与引用面试深度解析面试官考察指针和引用,不仅是考察语法,更是在考察你对C中 “别名” (Aliasing) 与 “地址” (Addressing) 这两种间接访问机制的理解,以及你对 “代码安全” 和 “接口设计” 的思考深度。第一部分:核心知…

LinuxC语言线程的同步与互斥

一.线程的同步与互斥1. 基础概念:1.1 互斥:对共享资源的访问,同一时刻只允许一个访问者进行访问,互斥具有唯一和排他性,互斥无法保证对共享资源的访问顺序1.2 同步: 在互斥的基础上,实现对共享资源的有序访问。2. 互斥…

Centos 7.6离线安装docker

在内网环境下,一般不能联网在线部署,这时候就需要以离线的方式安装docker。本节内容主要总结一下在CentOS 7.6环境中离线安装docker的步骤。 1、下载docker安装包 https://pan.baidu.com/share/init?surlPaUllQZ-dwpgJ7quA5IkcQ&pwd4sfc 2、上传到服…

生成式推荐模型的长序列特征:离线存储

文章目录长序列特征的例子1. Event-level features2. Sequence-level featuresAggregation FeaturesSession-based FeaturesTemporal Order Features3. User-level features4. Interaction features (between user and item/context)how to store the long term user behaviro …

Linux inode 实现机制深入分析

Linux inode 实现机制深入分析 1 Inode 基本概念与作用 Inode(Index Node)是 Linux 和其他类 Unix 操作系统中文件系统的核心数据结构,用于存储文件或目录的元数据(metadata)。每个文件或目录都有一个唯一的 inode&…

Flask 之请求钩子详解:掌控请求生命周期

在构建现代 Web 应用时,我们常常需要在请求的不同阶段自动执行一些通用逻辑,例如:记录日志、验证权限、连接数据库、压缩响应、添加安全头等。如果在每个视图函数中重复这些代码,不仅冗余,而且难以维护。Flask 请求钩子…

设计模式七大原则附C++正反例源码

设计模式的七大原则是软件设计的基石,它们指导开发者构建高内聚、低耦合、易维护、可扩展的系统。以下以C++为例,详细介绍这七大原则: 一、单一职责原则(Single Responsibility Principle, SRP) 定义:一个类应该只有一个引起它变化的原因(即一个类只负责一项职责)。 …

云计算之中间件与数据库

一、云数据库的特性云数据库是指被优化或部署到一个虚拟计算环境中的数据库,可以实现按需付费、按需扩展、高可用性以及存储整合等优势。根据数据库类型一般分为关系型数据库和非关系型数据库(NoSQL数据库) 。云数据库的特性序号云数据库的特…

codeforces(1045)(div2) E. Power Boxes

E.电源箱 每次测试时限: 2 秒 每次测试的内存限制:256 兆字节 输入:标准输入 输出:标准输出 这是一个互动问题。 给你 nnn 个方格,索引从 111 到 nnn 。这些方格看起来完全相同,但是每个方格都有一个隐藏的…

4G模块 EC200通过MQTT协议连接到阿里云

命令说明 基础AT指令ATI显示MT的ID信息ATCIMI查询IMSIATQCCID查询ICCIDATCSQ查询信号强度ATCGATT?查询当前PS域状态MQTT配置指令ATQMTCFG配置MQTT可选参数ATQMTCFG配置MQTT可选参数.ATQMTOPEN打开MQTT客户端网络ATQMTCLOSE关闭MQTT客户端网络ATQMTCONN连接客户端到MQTT服务器…

如何选择合适的安全监测预警系统

在当今高度复杂和互联的数字化时代,安全威胁无处不在且持续演变。一套高效、可靠的安全监测预警系统已成为组织保障其物理资产、数字信息和关键业务连续性的核心基础设施。然而,面对市场上琳琅满目的产品和解决方案,如何做出符合自身需求的选…

ELK-使用logstash-output-zabbix插件实现日志通过zabbix告警

ELK-使用logstash-output-zabbix插件实现日志通过zabbix告警logstash-output-zabbix插件安装编辑logstash配置文件在zabbix上创建模板实现的效果:elk收集上来的日志中含有报错时(例如error等),logstash过滤出来将这部分日志打到zabbix,再通过zabbix结合钉…

【C++游记】物种多样——谓之多态

枫の个人主页 你不能改变过去,但你可以改变未来 算法/C/数据结构/C Hello,这里是小枫。C语言与数据结构和算法初阶两个板块都更新完毕,我们继续来学习C的内容呀。C是接近底层有比较经典的语言,因此学习起来注定枯燥无味&#xf…

Visual Scope (Serial_Digital_Scope V2) “串口 + 虚拟示波器” 工具使用记录

VisualScope 就是一个 “串口 + 虚拟示波器” 的工具,适合在没有昂贵示波器/逻辑分析仪时做嵌入式调试。它的核心步骤就是 MCU 定时发数据 → PC 串口接收 → 软件画波形。 首先准备串口通信工具后,插入电脑,安装完USB转串口驱动后,在“我的电脑”-“设备及管理器”-“端口…

c++ 观察者模式 订阅发布架构

#include <iostream> #include <vector> #include <algorithm> #include <memory> #include <mutex>// 观察者接口 class IObserver { public:virtual ~IObserver() default;virtual void update(const std::string& message) 0; };// 主题…

oracle 表空间扩容(增加新的数据文件)

SELECT tablespace_name,file_name,ROUND(bytes / 1024 / 1024, 2) AS size_mb,ROUND(maxbytes / 1024 / 1024, 2) AS max_size_mb,status,autoextensible FROM dba_data_files ORDER BY tablespace_name;--给表空间增加一个新数据库文件ALTER TABLESPACE EAS_D_EAS_STANDARDAD…

DAY 58 经典时序预测模型2

知识点回顾&#xff1a; 时序建模的流程时序任务经典单变量数据集ARIMA&#xff08;p&#xff0c;d&#xff0c;q&#xff09;模型实战SARIMA摘要图的理解处理不平稳的2种差分 n阶差分---处理趋势季节性差分---处理季节性 昨天我们掌握了AR, MA, 和 ARMA 模型&#xff0c;它们…

【人工智能】AI代理重塑游戏世界:动态NPC带来的革命性沉浸式体验

还在为高昂的AI开发成本发愁?这本书教你如何在个人电脑上引爆DeepSeek的澎湃算力! 在当今游戏行业迅猛发展的时代,AI代理技术正悄然引发一场革命,尤其是动态非玩家角色(NPC)的应用,将传统静态游戏体验提升至全新的沉浸式境界。本文深入探讨AI代理在游戏中的核心作用,从…