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

【Spring Cloud系统】- Zookeer特性与使用场景

【Spring Cloud系统】- Zookeer特性与使用场景

一、概述

Zookeeper是一个分布式服务框架,是Apache Hadoop的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题。如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。

简单来说zookeeper = 文件系统 + 监听通知机制

二、Zookeeper是什么

  1. ZooKeeper是分布式协调服务的开源架构,可以用来解决分布式集群中应用系统的一致性问题(例如怎样避免同时操作同一数据造成脏读的问题);也是为分布式程序提供协调服务的Apache项目。
  2. ZooKeeper本质上是一个分布式的小文件存储系统,提供基于类似于文件系统目录树方式的数据存储,并且可以对树中的节点进行有效管理,从而用来维护和监控你存储的数据的状态变化,通过监控数据状态的变化,从而可以达到基于数据的集群管理,诸如:统一命名服务、分布式配置管理、负载均衡、分布式锁、分布式协调等功能。

三、Zookeeper有哪些数据结构

ZooKeeper可以理解一个文件系统,ZooKeeper数据模型的结构与Unix文件系统很类似,整体上可以看作是一棵树,每个节点称做一个ZNode。每一个ZNode默认能够存储1MB的数据,每个ZNode都可以通过其路径唯一标识。

3.1 数据结构图

在这里插入图片描述

如上图的每个节点称为一个Znode。每个Znode由3部分组成。

  • stat: 此为状态信息,描述该Znode的版本,权限等信息。
  • data: 与该Znode关联的数据
  • children: 该Znode下的子节点

3.2 节点类型

Znode有两种,分别为临时节点和永久节点。

节点的类型在创建时既被确定,并且不能改变。

临时节点:该节点的生命周期依赖于创建它们的会话,一旦会话结束,临时节点将被自动删除,当然可以也可以手动删除。临时节点不允许拥有子节点。

永久节点:该节点的生命周期不依赖于会话,并且只有在客户端显示执行删除操作的时候,他们才能被删除。

Znode还有一个序列化的特性,如果创建的时候指定的话,该Znode的名字后面会自动追加一个不断增加的序列号。序列号对于此节点的父节点来说是唯一的,这样便于记录每个子节点创建的先后顺序。它的格式为"%10d"(10位数字,没有数值的数位用0补充,例如:“000000001”)。

因为有序列化属性,这样Zookeeper便有四种类型的Znode节点,分别对应:

  • PERSISTENT:永久节点
  • EPHEMERAL:临时节点
  • PERSISTENT_SEQUENTIAL:永久节点、序列化
  • EPHEMERAL_SEQUENTIAL:临时节点、序列化

3.3 节点类型

每个znode都包含了一系列的属性,通过命令get,可以获得节点的属性。

  • dataVersion:数据版本号,每次对节点进行set操作,dataVersion的值都会增加1(即使设置的是相同的数据),可有效避免了数据更新时出现的先后顺序问题。

  • cversion :子节点的版本号。当znode的子节点有变化时,cversion 的值就会增加1。

  • cZxid :Znode创建的事务id。

  • mZxid :Znode被修改的事务id,即每次对znode的修改都会更新mZxid。

    对于zk来说,每次的变化都会产生一个唯一的事务id,zxid(ZooKeeper Transaction Id)。通过zxid,可以确定更新操作的先后顺序。例如,如果zxid1小于zxid2,说明zxid1操作先于zxid2发生,zxid对于整个zk都是唯一的,即使操作的是不同的znode。

  • ctime:节点创建时的时间戳。

  • mtime:节点最新一次更新发生时的时间戳

  • ephemeralOwner:如果该节点为临时节点, ephemeralOwner值表示与该节点绑定的session id. 如果不是, ephemeralOwner值为0。

四、Zookeeper有哪些核心功能

4.1 保证数据一致性

保证数据的一致性有两种情况:

  • 重新选取出leader后的数据同步。
  • leader处理完事务请求后与follow保持数据一致。
首先是重新选取出新leader后的数据同步

通过FastLeaderElection选举算法选出leader,选出leader之后,leader需要与其他节点进行同步,当超过一半的follow与leader进行同步完成后,leader才能成为真正的leader,然后follow会带上自己最大的ZXID尝试与leader连接,来确定数据是否同步。

其次是leader处理完成事务请求后与follow保持数据一致

事务请求全部是由leader处理的,当leader收到请求后,会将事务请求转化为事务Proposal,由于leader会为每一个follow创建一个队列,所以leader会将事务放入响应队列中,按顺序处理事务请求,来保证事务的顺序性。之后会在队列中顺序向其他节点广播该提案。follow收到后会将其以事务的形式写入到本地日志中,并向leader发送反馈ack,leader会等待其他follow的回复,当收到一半以上的follow响应时,leader会向其他节点发送commit消息,同时leader提交该提案。当follow将数据同步完成之后,leader会将该follow加入到真正可用的follow列表中。

4.2 更新和监听

ZooKeeper支持watch的概念。客户端可以在znode上设置监视,当znode有事件发生时,通知给感兴趣的客户端。通知变化时收到通知。非常适用于保障分布式情况下的数据一致性。dubbo中使用zk作为注册中心等都用到了zk的更新监听功能。

五、Zookeeper有哪些权限控制

ZooKeeper通过ACL权限控制列表来控制其对znode节点的访问权限。ACL权限与Unix文件系统中的权限控制类似,使用权限位限制指定角色对znode节点的各节点操作,下面详细介绍ZooKeeper中ACL权限控制。

5.1 权限列表

zookeeper中对znode节点的操作权限主要有以下五种,我们可以通过其简写的任意组合来实现对znode节点的不同权限控制。

名称简写权限说明
CREATEc允许创建当前节点下的字节点
DELETEd允许删除当前节点下的子节点,仅限下一级
READr允许读取节点数据以及显示子节点的列表
WRITEw允许设置当前节点的数据
ADMINa管理员权限,允许设置或读取当前节点的权限列表

5.2 ACL权限特点

Zookeeper权限控制有以下几个特点:

  1. zookeeper的权限是基于znode节点的,需要对每个节点设置权限。
  2. znode节点支持同时设置多种权限方案和多个权限。当znode有多种权限的时候,只要有一个权限允许当前操作,即可执行当前操作,即多个权限之间为或的关系
  3. 子节点不会继承父节点的权限,客户端没有权限访问当前节点,但是可以访问当前节点的子节点。
  4. 使用setAcl命令对节点进行权限设置会覆盖掉原来的权限。

六、Zookeeper数据持久化

ZooKeeper数据的组织形式为一个类似文件系统的数据结构,而这些数据都是存储在内存中的,所以我们可以认为,ZooKeeper是一个基于内存的小型数据库。

如果数据只存储在内存中的话,那么在ZooKeeper宕机或者断电的情况下,数据将会丢失,所以ZooKeeper也制定了一些数据持久方式:

  • 事务日志log
  • 数据快照snapshot

6.1 事务日志log文件

针对每一次客户端的事务操作(写),ZooKeeper都会将他们记录到事务日志中,当然,ZooKeeper也会将数据变更应用到内存数据库中,我们可以在ZooKeeper的主配置文件zoo.cfg中配置内存中的数据持久化目录,也就是事务日志存储路径dataLogDir。如果没有配置dataLogDir(非必填),事务日志将存储到dataDir(必须填)。

6.2 事务日志log文件

数据快照是ZooKeeper数据存储中另–个非常核心的运行机制。顾名思义,数据快照用来记录ZooKeeper服务器上某一个时刻的全量内存数据内容,并将其写入到指定的磁盘文件中。

文件存储:

快照文件存储在dataDir属性配置的目录下。

和事务日志文件的命名规则一致,快照数据文件也是使用ZXID的十六进制表示来作为文件名后缀,该后缀标识了本次数据快照开始时刻的服务器最新ZXID。这个十六进制的文件后缀非常重要,在数据恢复阶段,ZooKeeper会根据该ZXID来确定数据恢复的起始点。

和事务日志文件不同的是ZooKeeper的快照数据文件没有采用“预分配”机制,因此不会像事务日志文件那样内容中可能包含大量的“0”。每个快照数据文件中的所有内容都是有效的,因此该文件的大小在一定程度上能够反映当前ZooKeeper内存中全量数据的大小。

七、总结

Zookeeper作为一个分布式协调服务,由于其通用性,所以在众多软件开发中被使用。它一般包括存储数据和监听功能,主要提供节点选举、统一配置文件管理、发布和订阅消息、集群管理等功能。在以后的博文中讲详细讲解每个部分详细使用。

相关文章:

【Spring Cloud系统】- Zookeer特性与使用场景

【Spring Cloud系统】- Zookeer特性与使用场景 一、概述 Zookeeper是一个分布式服务框架,是Apache Hadoop的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题。如:统一命名服务、状态同步服务、集群管理、分布式应用配置…...

最新AI智能创作系统源码SparkAi系统V2.6.3/AI绘画系统/支持GPT联网提问/支持Prompt应用/支持国内AI模型

一、智能AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统,已支持OpenAIGPT全模型国内AI全模型,已支持国内AI模型 百度文心一言、微软Azure、阿里云通义千问模型、清华智谱AIChatGLM、科大讯飞星火大模型等。本期针对源码…...

R | R包默认安装路径的查看及修改

R | R包默认安装路径的查看及修改 一、R包安装位置查看二、已安装R包查询三、R包安装位置修改四、R包安装位置永久修改 在【R: R package安装的几种方式】【R: R版本更新及R包迁移(详细步骤)】两篇文章中介绍过R包的常见安装方式,以及在不同R…...

将conda虚拟环境打包并集成到singularity镜像中

1. 使用yml文件打包 conda activate your_env conda env export > environment.yml编写cond.def文件 Bootstrap: dockerFrom: continuumio/miniconda3%filesenvironment.yml%post/opt/conda/bin/conda env create -f environment.yml%runscriptexec /opt/conda/envs/$(hea…...

Android Studio 是如何和我们的手机共享剪贴板的

背景 近期完成了target33的项目适配升级,随着AGP和gradle的版本升级,万年老版本Android Studio(后文简称AS)也顺便升级到了最新版Android Studio Giraffe | 2022.3.1,除了新UI外,最让我好奇的是这次的Running Devices功能(官方也称为Device mirroring)可以控制真机了. 按照操…...

大数据面试题:Spark和MapReduce之间的区别?各自优缺点?

面试题来源: 《大数据面试题 V4.0》 大数据面试题V3.0,523道题,679页,46w字 可回答: 1)spark和maprecude的对比;2)mapreduce与spark优劣好处 问过的一些公司:阿里云…...

【开发篇】十八、SpringBoot整合ActiveMQ

文章目录 1、安装ActiveMQ2、整合3、发送消息到队列4、使用消息监听器对消息队列监听5、流程性业务消息消费完转入下一个消息队列6、发布订阅模型 1、安装ActiveMQ docker安装 docker pull webcenter/activemqdocker run -d --name activemq -p 61616:61616 -p 8161:8161 webce…...

QTcpSocket 接收数据实时性问题

一、开发背景 使用 Qt 的 QTcpSocket 接收数据的时候发现数据接收出现粘包的现象,并且实时性很差,通过日志的时间戳发现数据接收的误差在 100ms 以内。 二、开发环境 Qt5.12.2 QtCreator4.8.2 三、实现步骤 在 socket 连接的槽函数设置接收延时时间&…...

前端el-select 单选和多选

el-select单选 <el-form-item label"部门名称" prop"departId"><el-select v-model"dataForm.departId" placeholder"请选择" clearable:style{ "width": "100%" } :multiple"false" filtera…...

【MySQL】Linux 中 MySQL 环境的安装与卸载

文章目录 Linux 中 MySQL 环境的卸载Linux 中 MySQL 环境的安装 Linux 中 MySQL 环境的卸载 在安装 MySQL 前&#xff0c;我们需要先将系统中以前的环境给卸载掉。 1、查看以前系统中安装的 MySQL rpm -qa | grep mysql2、卸载这些 MySQL rpm -qa | grep mysql | args yum …...

机器学习算法分类

学习视频黑马程序员 监督学习 无监督学习 半监督学习 强化学习...

Mysql bin-log日志恢复数据与物理备份-xtrabackup

主打一个数据备份与恢复 binlog与xtarbackup bin-log日志恢复开启bin-log配置bin-log日志恢复 物理备份-xtrabackup三种备份方式安装xtrabackup备份全量备份增量备份差异备份 bin-log日志恢复 bin-log 日志&#xff0c;就记录对数据库进行的操作&#xff0c;什么增删改的操作全…...

JAVA 学习笔记 2年经验

文章目录 基础String、StringBuffer、StringBuilder的区别jvm堆和栈的区别垃圾回收标记阶段清除阶段 异常类型双亲委派机制hashmap和hashtable concurrentHashMap 1.7和1.8的区别java的数据结构排序算法&#xff0c;查找算法堆排序 ThreadLocal单例模式常量池synchronizedsynch…...

网络安全--安全认证、IPSEC技术

目录 1. 什么是数据认证&#xff0c;有什么作用&#xff0c;有哪些实现的技术手段&#xff1f; 2. 什么是身份认证&#xff0c;有什么作用&#xff0c;有哪些实现的技术手段&#xff1f; 3. 什么是VPN技术&#xff1f; 4. VPN技术有哪些分类&#xff1f; 5. IPSEC技术能够…...

Mysql——创建数据库,对表的创建及字段定义、数据录入、字段增加及删除、重命名表。

一.创建数据库 create database db_classics default charsetutf8mb4;//创建数据库 use db_classics;//使用该数据库二.对表的创建及字段定义 create table if not exists t_hero ( id int primary key auto_increment, Name varchar(100) not null unique, Nickname varchar(1…...

第1篇 目标检测概述 —(4)目标检测评价指标

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。目标检测评价指标是用来衡量目标检测算法性能的指标&#xff0c;可以分为两类&#xff0c;包括框级别评价指标和像素级别评价指标。本节课就给大家重点介绍下目标检测中的相关评价指标及其含义&#xff0c;希望大家学习之后…...

前端和后端是Web开发中的两个不同的领域,你更倾向于哪一种?

前端和后端是Web开发中的两个不同的领域&#xff0c;你更倾向于哪一种&#xff1f; 你可以从以下几个维度谈谈你对前端开发和后端开发的看法。此为内容创作模板&#xff0c;在发布之前请将不必要的内容删除 一、引言 提示&#xff1a;可对前端开发和后端开发进行简要介绍并提出…...

SpringBoot集成MyBatis-Plus实现增删改查

背景 因为学习工具的时候经常需要用到jar包&#xff0c;需要增删查改接口&#xff0c;所以参考文章实现了基于mybatis-plus的增删查改接口。 参考文章&#xff1a;第二十二节:SpringBoot集成MyBatis-Plus实现增删改查 原文中的git地址不存在&#xff0c;本文内容是原文代码修…...

基于STM32设计的智能水产养殖系统(华为云IOT)

一、设计简述 基于STM32设计的智能水产养殖监测系统 1.1 项目背景 随着经济的发展和人口的增长,对水产养殖的需求不断增加。然而,传统的水产养殖方式存在一系列问题,如水质污染、鱼病爆发等。因此,智能化水产养殖技术成为当前热门研究领域。其中,基于物联网技术的智能水产…...

运行软件找不到mfc140u.dll怎么解决,mfc140u.dll是什么文件

"找不到 mfc140u.dll"是一条错误信息&#xff0c;表示您的计算机上缺少一个名为 mfc140u.dll 的动态链接库&#xff08;DLL&#xff09;文件。这个文件通常与 Microsoft Visual C Redistributable 相关。Mfc140u.dll 是 Microsoft 基础类库&#xff08;MFC&#xff0…...

网络六边形受到攻击

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 抽象 现代智能交通系统 &#xff08;ITS&#xff09; 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 &#xff08;…...

conda相比python好处

Conda 作为 Python 的环境和包管理工具&#xff0c;相比原生 Python 生态&#xff08;如 pip 虚拟环境&#xff09;有许多独特优势&#xff0c;尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处&#xff1a; 一、一站式环境管理&#xff1a…...

C++初阶-list的底层

目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略

本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装&#xff1b;只需暴露 19530&#xff08;gRPC&#xff09;与 9091&#xff08;HTTP/WebUI&#xff09;两个端口&#xff0c;即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

【JavaWeb】Docker项目部署

引言 之前学习了Linux操作系统的常见命令&#xff0c;在Linux上安装软件&#xff0c;以及如何在Linux上部署一个单体项目&#xff0c;大多数同学都会有相同的感受&#xff0c;那就是麻烦。 核心体现在三点&#xff1a; 命令太多了&#xff0c;记不住 软件安装包名字复杂&…...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系&#xff0c;以下是深入解析&#xff1a; 门铃FIFO溢出的本质 在RapidIO系统中&#xff0c;门铃消息FIFO是硬件控制器内部的缓冲区&#xff0c;用于临时存储接收到的门铃消息&#xff08;Doorbell Message&#xff09;。…...

力扣热题100 k个一组反转链表题解

题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...

免费数学几何作图web平台

光锐软件免费数学工具&#xff0c;maths,数学制图&#xff0c;数学作图&#xff0c;几何作图&#xff0c;几何&#xff0c;AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...

计算机基础知识解析:从应用到架构的全面拆解

目录 前言 1、 计算机的应用领域&#xff1a;无处不在的数字助手 2、 计算机的进化史&#xff1a;从算盘到量子计算 3、计算机的分类&#xff1a;不止 “台式机和笔记本” 4、计算机的组件&#xff1a;硬件与软件的协同 4.1 硬件&#xff1a;五大核心部件 4.2 软件&#…...

R 语言科研绘图第 55 期 --- 网络图-聚类

在发表科研论文的过程中&#xff0c;科研绘图是必不可少的&#xff0c;一张好看的图形会是文章很大的加分项。 为了便于使用&#xff0c;本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中&#xff0c;获取方式&#xff1a; R 语言科研绘图模板 --- sciRplothttps://mp.…...