分布式【Zookeeper三大核心之数据节点ZNode】

ZooKeeper在分布式领域,能够帮助解决很多很多的分布式难题,但是底层却只是依赖于两个主要的组件:ZNode文件/数据存储系统和watch监听系统,另外还有一大模块,就是ACL系统。本节我们介绍下znode文件/数据存储系统。

一、ZNode特性

在 ZooKeeper 中,每一个数据节点都被称为一个ZNode,所有ZNode按层次化结构进行组织,形成一棵树。ZNode文件/数据存储系统的作用就是为分布式应用存储少量关键的核心状态数,ZNode既能挂载子节点,也能存储数据。

所以总结说来,ZNode即是文件夹又是文件的概念,但是在ZooKeeper这里面就不叫文件也不叫文件夹,叫ZNode,每个ZNode有唯一的路径标识,既能存储数据,也能创建子 ZNode,但是 ZNode只适合存储非常小量的数据,不能超过1M,最好小于1K。

图片

ZNode的分类:

按照生命周期可以分为:

  • 短暂(ephemeral)(断开连接自己删除)
  • 持久(persistent)(断开连接不删除,默认情况)

按照是否自带序列编号可以分为:

  • SEQUENTIAL(带自增序列编号,由父节点维护)
  • 非SEQUENTIAL(不带自增序列编号,默认情况)

持久节点(PERSISTENT)

持久化znode节点,一旦创建这个znode节点,存储的数据不会主动消失,除非是客户端主动delete。

持久顺序节点(PERSISTENT_SEQUENTIAL)

自动增加自增顺序编号的znode节点,比如ClientA去zookeeper service上建立一个znode名字叫做 /zk/conf,指定了这种类型的节点后zk会创建 /zk/conf0000000000,ClientB再去创建就是创建 /zk/conf0000000001,ClientC是创建/zk/conf0000000002,以后任意Client 来创建这个znode都会得到一个比当前zookeeper命名空间最大znode编号+1的znode,也就说任意一个Client去创建znode都是保证得到的znode编号是递增的,而且是唯一的znode节点。

临时节点(EPHEMERAL)

临时znode节点,Client连接到zk service的时候会建立一个session,之后用这个zk连接实例在该session期间创建该类型的znode,一旦Client关闭了zookeeper的连接,服务器就会清除session,然后这个session建立的znode节点都会从命名空间消失。总结就是,这个类型的 znode的生命周期是和Client建立的连接一样的。比如ClientA创建了一个EPHEMERAL 的/zk/conf 的 znode 节点,一旦ClientA的zookeeper连接关闭,这个znode节点就会消失。整个zookeeper service命名空间里就会删除这个znode节点。

临时顺序节点(EPHEMERAL_SEQUENTIAL)

临时自动编号节点,znode节点编号会自动增加,但是会随session消失而消失。

注意点:

  • 创建 znode 时设置顺序标识,znode 名称后会附加一个值,顺序号是一个单调递增的计数器,由父节点维护
  • 在分布式系统中,顺序号可以被用于为所有的事件进行全局排序,这样客户端可以通过顺序号推断事件的顺序
  • EPHEMERAL 类型的节点不能有子节点,所以只能是叶子结点
  • 客户端可以在 znode 上设置监听器

二、节点状态

每个节点除了存储了数据内容的同时,还存储了节点本身的一些状态信息,我们在使用get命令获取数据节点时就能获取到这些信息。Zookeeper把这些信息封装在Stat类中:

状态属性说明
czxid表示该节点被创建时的事务ID
mzxid表示该节点最后一次被更新时的事务ID
ctime表示该节点被创建的时间
mtime表示该节点最后一次被更新的时间
version数据节点版本号
cversion子节点的的版本号
aversion节点的ACL版本号
ephemeralOwner创建该临时节点的会话sessionID,持久节点值为0
dataLength数据内容的长度
numChildren当前节点的子节点个数
pzxid表示该节点的子节点列表最后一次被修改时的事务ID

三、节点版本

每个数据节点具有三种类型的版本信息,对数据节点的任何更新操作都会引起版本号的变化:

版本类型说明
version当前数据节点数据内容的版本号
cversion当前数据节点子节点的版本号
aversion当前数据节点ACL变更版本号

Zookeeper中节点版本表示的是对数据节点的数据内容、子节点列表或是ACL信息的修改次数,以version为例:即使前后两次变更并没有使得数据内容的值发生变更,version的值依然会变更。

据内容、子节点列表或是ACL信息的修改次数,以version为例:即使前后两次变更并没有使得数据内容的值发生变更,version的值依然会变更。

而version属性是用来处理并发控制,实现乐观锁的写入校验的。在进行一次setDataRequest请求处理时,首先就会进行版本检查,Zookeeper会从setDataRequest中获取到当前请求的版本version,同时从数据记录nodeRecord中获取到当前服务器上该数据的最新版本currentVersion进行比对,如果两个版本不匹配,则会抛出异常。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/598266.shtml

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

相关文章

【QT】自定义代理类

目录 1 我们为什么要使用自定义代理类? 2 自定义代理类的基本设计要求 3 自定义代理的功能 4 基于QSpinBox的自定义代理类 5 自定义代理类的使用 1 我们为什么要使用自定义代理类? 传统的模型-视图框架可以让我们实现逻辑展示相分离,我们…

Spring见解 1.2 IOC

2.3.Spring的IOC解决程序耦合 2.3.1.创建工程 2.3.1.1.pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:sc…

Spring 七种事务传播性介绍

作者&#xff1a;vivo 互联网服务器团队 - Zhou Shaobin 本文主要介绍了Spring事务传播性的相关知识。 Spring中定义了7种事务传播性&#xff1a; PROPAGATION_REQUIRED PROPAGATION_SUPPORTS PROPAGATION_MANDATORY PROPAGATION_REQUIRES_NEW PROPAGATION_NOT_SUPPORTED…

八、QLayout 用户基本资料修改(Qt5 GUI系列)

目录 一、设计需求 二、实现代码 三、代码解析 四、总结 一、设计需求 在很多应用程序中会有用户注册或用户编辑信息等界面。本文就设计一个用户信息编辑界面。要求包含用户名、姓名、性别、部门、年龄、头像、个人说明等信息。 二、实现代码 #ifndef DIALOG_H #define D…

springboot中引入AOP切面编程

在Spring Boot 3.0中引入AOP的过程如下所示&#xff1a; 1、首先&#xff0c;确保已经添加了相关依赖。可以通过Maven或Gradle来管理项目的依赖。对于使用Maven构建的项目&#xff0c;需要将以下依赖添加到pom.xml文件中 <dependency><groupId>org.springframewo…

BERT(从理论到实践): Bidirectional Encoder Representations from Transformers【3】

这是本系列文章中的第3弹,请确保你已经读过并了解之前文章所讲的内容,因为对于已经解释过的概念或API,本文不会再赘述。 本文要利用BERT实现一个“垃圾邮件分类”的任务,这也是NLP中一个很常见的任务:Text Classification。我们的实验环境仍然是Python3+Tensorflow/Keras…

2023年度全球重大关基安全事件 TOP 10 | FreeBuf 年度盘点

2023年&#xff0c;针对关键信息基础设施的网络攻击已经演变成为了一个全球性的问题&#xff0c;无论是中、美、俄等国际大国&#xff0c;还是诸多小国/地区&#xff0c;无论是经济发达还是落后&#xff0c;都无法保证绝对免疫关键基础设施的攻击。为了保障国家安全和社会稳定&…

力扣-42.接雨水

题目&#xff1a; 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例 1&#xff1a; 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&#xff1a;6 解释&#xff1a;上面是由数组[0,1,0,2…

Windows PowerShell的安全目标——安全警报

Windows PowerShell的安全目标——安全警报 1. 保证Shell安全 ​ 自从2006年年底PowerShell发布以来&#xff0c;微软在安全和脚本方面并没有取得很好的名声。毕竟那个时候&#xff0c;**VBScript和Windows Script Host(WSH)**是两个最流行的病毒和恶意软件的载体&#xff0c…

Linux_CentOS_7.9_MySQL_5.7配置数据库服务开机自启动之简易记录

前言&#xff1a; 作为运维保障&#xff0c;都无法准确预估硬件宕机的突发阶段&#xff0c;其生产数据实时在产出&#xff0c;那作为dba数据库服务的其重要性、必要性就突显而出。这里拿虚拟机试验做个配置记录&#xff0c;便于大家学习参考。 # 如出现服务器重启后登入报错无…

彻底理解前端安全面试题(4)—— 中间人攻击,详解 http 和https 的中间人攻击实例,建议收藏(含源码)

前言 前端关于网络安全问题看似高深莫测&#xff0c;其实来来回回就那么点东西&#xff0c;我总结一下就是 3 1 4&#xff0c;3个用字母描述的【分别是 XSS、CSRF、CORS】 一个中间人攻击。当然 CORS 同源策略是为了防止攻击的安全策略&#xff0c;其他的都是网络攻击。除…

docker-compose Install spug 3

前言 Spug 面向中小型企业设计的轻量级无 Agent 的自动化运维平台,整合了主机管理、主机批量执行、主机在线终端、文件在线上传下载、应用发布部署、在线任务计划、配置中心、监控、报警等一系列功能。 创建一键安装spug 脚本 自动化脚本兼容(ubuntu,RedHat系列及复刻系列,…

spug发布问题汇总记录

问题导览 1. [vite]: Rollup failed to resolve import "element-plus" from "src/main.js". 项目框架简介 vue3viteelement-plus 解决方案 - 1. 配置淘宝镜像源&#xff1a;npm config set registry https://registry.npm.taobao.org/ - 2. npm inst…

SpringBoot从配置文件中获取属性的方法

方式一&#xff1a;Value 基本类型属性注入&#xff0c;直接在字段上添加Value("${xxx.xxx}")即可&#xff0e;注意这里用的是$&#xff0c;而不是#&#xff0c;Value注入的属性&#xff0c;一般其他属性没有关联关系。 配置文件 user:name: Manaphyage: 19sex: m…

性能优化-OpenMP基础教程(四)-全面讲解OpenMP基本编程方法

本文主要介绍OpenMP编程的编程要素和实战&#xff0c;包括并行域管理详细实战、任务分担详细实战。 &#x1f3ac;个人简介&#xff1a;一个全栈工程师的升级之路&#xff01; &#x1f4cb;个人专栏&#xff1a;高性能&#xff08;HPC&#xff09;开发基础教程 &#x1f380;C…

Prometheus 不能访问k8s的中的一些metrics的问题(controller-manager、scheduler、etcd)

主要有三个点 controller-manager、scheduler、etcd 参考&#xff1a; https://www.cnblogs.com/ltaodream/p/15448953.html kube-scheduler 在每台master节点执行 vim /etc/kubernetes/manifests/kube-scheduler.yaml 将 --bind-address127.0.0.1 改为 --bind-address…

OpenAI ChatGPT-4开发笔记2024-05:windows下anaconda中设置visual studio code workspace

这里写自定义目录标题 1 安装anaconda和vscode2 Create an Anaconda Environment3 select Python Interpreter4 Workspace5 Open Workspace With File6 开发文件夹加入workspace7 美化 1 安装anaconda和vscode 标配。 2 Create an Anaconda Environment conda create --name…

Python字典操作指南,掌握编程中必备的数据结构!

更多Python学习内容&#xff1a;ipengtao.com 字典&#xff08;Dictionary&#xff09;是Python中一种非常重要和常用的数据结构&#xff0c;它用于存储键-值对的数据。在Python中&#xff0c;字典是可变&#xff08;Mutable&#xff09;的、无序&#xff08;Unordered&#xf…

计算机视觉入门与调优

大家好啊&#xff0c;我是董董灿。 在 CSDN 上写文章写了有一段时间了&#xff0c;期间不少小伙伴私信我&#xff0c;咨询如何自学入门AI&#xff0c;或者咨询一些AI算法。 90%的问题我都回复了&#xff0c;但有时确实因为太忙&#xff0c;没顾得过来。 在这个过程中&#x…

Go调用jenkins api执行流水线构建与停止

用到的库&#xff1a; "github.com/bndr/gojenkins" 代码如下&#xff0c;一次到位&#xff1a; import ("context""fmt""time""github.com/bndr/gojenkins" )// 构建指定任务 func buildJob(ctx context.Context, jenkins…