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

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

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

相关文章

基于AlexNet深度学习网络的智能垃圾分类系统matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1、基于AlexNet深度学习网络的智能垃圾分类系统概述 4.2、基于AlexNet深度学习网络的智能垃圾分类系统主要原理 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab20…

在宝塔面板环境下安装nps服务端

在宝塔面板环境下安装nps服务端 一、所需环境二、开始安装三、打开nps控制台四、更改默认账号密码和连接秘钥五、反向代理挂载SSL证书 一、所需环境 阿里云轻应用服务器(选择宝塔应用镜像)域名(最好也是阿里注册的域名)对应的ssl…

echarts的bug,在series里写tooltip,不起作用,要在全局先写tooltip:{}才起作用,如果在series里写的不起作用就写到全局里

echarts的bug,在series里写tooltip,不起作用,要在全局先写tooltip:{show:true}才起作用,如果在series里写的不起作用就写到全局里 series里写tooltip不起作用,鼠标悬浮在echarts图表上时不显示提示 你需要…

聊聊分布式架构01——http通信基础

目录 web通信的简单结构 网络通信基础TCP/IP TCP/IP 通信传输流 HTTP中的三剑客 负责传输的IP协议 确保可靠性的TCP协议 SYN攻击(SYN Flood Attack) 四次挥手 负责域名解析的DNS服务 基于 TCP 协议实现通信 TCP 协议的通信过程 Web通信的简单…

基于PSD-ML算法的语音增强算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 1.加窗处理: 2.分帧处理: 3.功率谱密度估计: 4.滤波处理: 5.逆变换处理: 6.合并处理: 5.算法完整程序工程 1.算法…

visual studio解决bug封装dll库

1.速度最大化 O2 2.设置输出目录 配置属性/常规/输出目录 链接器/常规/输出dll文件 链接器/调试/输出程序数据库pdb文件 链接器/高级/导入库 3.输出X86 X64分别对应的dll、lib、pdb 然后修改更新说明 更新说明格式如下: 4.将库提交到FTP每日更新库文档下 和测试交接…

docker入门加实战—docker安装并配置阿里云加速

docker入门加实战—docker安装并配置阿里云加速 为什么要学习docker 在开发和部署项目的过程中,经常会遇到如下问题: 软件安装包名字复杂,不知道去哪里找安装软件和部署项目步骤复杂,容易出错 这就是我们今天要学习Docker技术…

千兆以太网传输层 UDP 协议原理与 FPGA 实现(UDP接收)

文章目录 前言心得体会一、 UDP 协议简单回顾二、UDP接收实现三、完整代码展示四、仿真测试(1)模拟电脑数据发送,(2)测试顶层文件编写(3)仿真文件(4)仿真波形前言 在前面我们对以太网 UDP 帧格式做了讲解,UDP 帧格式包括前导码+帧界定符、以太网头部数据、IP 头部数…

第二证券:临时停牌一般多久?

随着股票买卖市场的日益开展,股票买卖的监管也越来越严格。而前段时刻,上市公司中多家公司被暂时停牌,此举引起了公众对于暂时停牌时刻的重视。那么,暂时停牌一般多久?本篇文章将从多个视点出发,对这一问题…

VsCode 常见的配置、常用好用插件

1、自动保存:不用装插件,在VsCode中设置一下就行 2、设置ctr滚轮改变字体大小 3、设置选项卡多行展示 这样打开了很多个文件,就不会导致有的打开的文件被隐藏 4、实时刷新网页的插件:LiveServer 5、open in browser 支持快捷键…

万界星空科技低代码平台+协同制造MES产品

在生产数字化建设方面,MES产品针对不同的制造行业,开发的工作量较大。传统交付方式开发周期长、过程不可控、质量把控难,同时,开发实施周期长带来了需求变化的可能性增加,周期可能还会延长。 随着数字技术的不断迭代成…

LeetCode-496-下一个更大元素

题目描述: 题目链接:LeetCode-496-下一个更大元素 解题思路: 方法一:暴力 方法二:单调栈 方法一代码实现: class Solution {public int[] nextGreaterElement(int[] nums1, int[] nums2) {// 最笨的方法&am…

【已验证】微信小程序开发-绑定数据23.10.09

四. 绑定数据 WXML页面里的动态数据都是来自.js 文件Page的data&#xff0c;数据绑定就是通过双大 括号&#xff08;{{}}&#xff09;将变量包起来&#xff0c;在WXML页面 里将数据值显示出来。 <!--pages/product/product.wxml--> <view> {{ message }} </vi…

GG-Net: 超声图像中乳腺病变分割的全局指导网络

ATTransUNet 期刊分析摘要贡献方法整体框架1. Global Guidance Block2. Spatial-wise Global Guidance Block3. Channel-wise Global Guidance Block4. Breast Lesion Boundary Detection Module 实验1. 对比实验2. 消融实验2.1 Ablation Analysis of our GG-Net2.2 Ablation A…

用vscode进行远程主机开发

文章目录 插件操作步骤FQA 插件 Remote - SSH - 通过使用 SSH 打开远程计算机或者VM上的文件夹&#xff0c;来连接到任何位置。 操作步骤 使用Vscode利用Remote进行远端开发必须现在Vscode内安装插件 安装完成后&#xff0c;底部工具栏会出现一个绿色按钮&#xff0c;如下…

git命令笔记

git命令笔记 前言&#xff1a;git对于软件开发和协作的重要性不言而喻&#xff0c;在企业开发中&#xff0c;git命令和linux命令的使用同样重要。作为开发者&#xff0c;需要牢记并熟练使用常见的git命令 git工作流程图 命令如下&#xff1a; clone&#xff08;克隆&#xf…

2023旅游产业内容营销洞察报告:如何升级经营模式,适配社媒新链路

2023年我国旅游业强劲复苏&#xff0c;上半年旅游消费增长显著&#xff0c;政府出台一系列文旅扶持政策后&#xff0c;旅游业也在积极寻求数字化转型的升级方式。 上半年以旅游消费为代表的服务业对经济的增长贡献率超过60%&#xff0c;旅游企业普遍实现经营好转&#xff0c;企…

Java中使用C代码

开发工具: Intellij Idea 与 Visual Studio使用方式: Visual生成.dll文件(Windows .dll文件, Linux .so文件); jdk添加.dll文件, Idea java 采用native方式注册与使用c代码.1. 如下图, 打开idea,新建class Demo, 通过命令行生成Demo.h public class Demo {public native voi…

Oracle 云服务即将支持 PostgreSQL!

2023 年 9 月 19 日&#xff0c;Oracle 产品团队发布了一篇文章&#xff0c;宣布 Oracle 云基础架构&#xff08;OCI&#xff09;开始提供 PostgreSQL 服务。目前支持的版本为 PostgreSQL 14.9&#xff0c;提供有限支持&#xff0c;12 月份将会提供正式版本。 众所周知&#x…

案例解读【淘宝API接口的运用:抓取用户数据从而驱动精准营销

我国网络购物用户规模8.12亿占网民整体80.3%&#xff08;来源&#xff1a;中商产业研究院&#xff09;。由此可见&#xff0c;网络购物逐渐成为人们普遍选择的一种消费方式。作为连接买卖双方的服务方&#xff0c;电商平台掌握了海量的用户数据&#xff0c;用户数据作为一种宝贵…