分布式【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 Cloud Gateway】1、Spring Cloud Gateway网关服务搭建

1、什么是网关? API Gateway(APIGW / API 网关),顾名思义,是系统对外的唯一入口。API 网关封装了系统内部架构,为每个客户端提供定制的 API。 近几年来移动应用与企业间互联需求的兴起。从以前单一的 Web …

344. 反转字符串

344. 反转字符串 题目链接&#xff1a;344. 反转字符串 思路&#xff1a;表示确实偷懒了&#xff0c;直接用自带方法解决的。 代码如下&#xff1a; class Solution { public:void reverseString(vector<char>& s) {reverse(s.begin(),s.end());} };

QA 这个职位在中国有前途么?转自知乎

QA 这个职位在中国有前途么&#xff1f; 体现在学校里&#xff0c;大家找工作的时候明显不愿意去做测试&#xff0c;更多的是愿意去做developer。 黄延胜 测试架构师 216 人赞同 对这个问题的回复有2个答案. 第一段来自于2011年, 第二段来自于2015年. 我没有删除第一段是为…

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…

网络安全的概念、类型和重要性

什么是网络安全&#xff1f; 网络安全是指用于防止网络攻击或减轻其影响的任何技术、措施或做法。网络安全旨在保护个人和组织的系统、应用程序、计算设备、敏感数据和金融资产&#xff0c;使其免受简单而不堪其绕的计算机病毒、复杂而代价高昂的勒索软件攻击&#xff0c;以及…

Jvm垃圾收集器系列之ZGC的小知识(个人见解仅供参考)

学习内容&#xff1a; 问&#xff1a;什么是STW&#xff1f; 答&#xff1a;STW是StopTheWorld的缩写&#xff0c;指的是在Java的垃圾回收过程中&#xff0c;暂停所有的业务线程&#xff0c;导致业务系统暂停。问&#xff1a;ZGC的设计目标是什么&#xff1f; 答&#xff1a;Z…

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…

Kafka高级应用:如何配置处理MQ百万级消息队列?

在大数据时代&#xff0c;Apache Kafka作为一款高性能的分布式消息队列系统&#xff0c;广泛应用于处理大规模数据流。本文将深入探讨在Kafka环境中处理百万级消息队列的高级应用技巧。 本文&#xff0c;已收录于&#xff0c;我的技术网站 ddkk.com&#xff0c;有大厂完整面经…

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

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

Nestjs 微服务实战 - 动态微服务创建链接

所有的微服务都需要做服务治理 服务治理包括(配置中心、服务发现、注册服务等等),常见的包括 Java 的 Nacos,这里不关注与服务治理,只说明,如何用 nest 网关,并且在网关层动态实现微服务注入 nestjs 官网的案例明显是偏向于手动注册微服务的,例如: /** Model */ @M…

力扣-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…

springBoot集成RabbitMQ实现(直连模式\路由模式\广播模式\主题模式)的消息发送和接收

该项目介绍了springboot如何集成rabbitMQ消息中间件,实现(直连模式\路由模式\广播模式\主题模式)的消息发送和接收 pom依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId

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

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

redisson滑动时间窗应用场景

概述 前10分钟内累计3次验证失败后&#xff0c;增加图形验证码验证条件&#xff0c;前10分钟内累计6次验证失败后&#xff0c;系统自动锁定该账号15分钟&#xff0c;15分钟后自动解锁&#xff1b;方案 基于redisson&#xff08;zset&#xff09;滑动时间窗记录最近10分钟内该…

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

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