理解Zookeper

一、什么是Zookeper

Zookeper是一个可以作为注册中心、配置中心、分布式锁的分布式解决方案

二、数据一致性

一致性分为强一致性、弱一致性、最终一致性
Zookeper可以保持数据的强一致性(CP)
主要是解决写、集群节点的同步、读之间的关系

  • 强一致性:在硬件层面可以不能完全保证同步在读之前完成,但可以通过加锁的方案,即写后同步前会获取锁,读前也需要去获取这个锁,从而保证在同步操作没有完成前,无法进行读这个操作。(这里就是CAP中满足CP)
  • 弱一致性:不保证同步操作一定会顺利执行,可能一致读到的就是同步之前的数据。
  • 最终一致性:在同步完成之前可以正常读,同步后读取的数据才是最终的正确的数据。(这里就是CAP中满足AP)

Zookeper和eureka的区别(CAP)

在这里插入图片描述

三、领导选举机制

一个Zookeper集群可以有多个服务器节点,一般为单数,进行领导选举

2.1 选举标准

节点在存储数据时会先生成日志,而每条日志都有一个id,根据这个id的大小判断哪个节点的数据更新,日志id大的更有机会成为leader
当两个节点的日志id一样时,节点id大的更有机会成为leader

2.2 选举流程

每个节点先给自己投票
节点之间建立socket连接,互相发送自己的投票信息,并根据日志id和节点id的比较修改投票信息(此时会将修改的投票信息重新生成一份放在节点数组中,而无需修改的投票信息也会重新生成一份,从而记录投票的次数)

在这里插入图片描述
在这里插入图片描述

四、写操作

请求会被转发给leader节点统一处理
leader节点先生成日志文件,先向自己发送ack->向其他节点发送日志->其他节点收到日志后持久化日志,然后发送ack->leader节点等待收到超过一半的ack后,本地提交,更新内存数据(此时,如果有观察者节点,会向观察者节点发送完成更新的信号)->向其他节点发送commit->其他节点收到commit后,更新内存

那么为什么Zookeper一般设置为奇数个节点呢?

因为leader节点需要收到超过一半的ack后(包括自己的)才会进行更新操作,
比如当节点为5个时,可允许宕机的节点个数为2(ack需要至少为3),
当节点为6个时,可允许宕机的节点个数为2(ack需要至少为4),那么在满足可用性时5和6个节点设置允许宕机的节点数是一样的,我们优先选5个

五、数据模型

文件类型–树结构
在这里插入图片描述

六、数据同步

在这里插入图片描述
在这里插入图片描述

七、watch机制(监听)

new Zookeeper(String connectString, int sessionTimeout, Watcher watcher)
// 这个Watcher将作为整个Zookeeper会话期间的上下文,一直被保存在客户端ZKWatchManager的defaultWatcher
// 也可以动态添加watcher:getData(),exists, getChildren

串行同步,通过先进先出的队列实现,是同步过程,无需担心并发的问题
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

八、分布式锁

在单机下,可以使用synchronize实现锁(只能锁自己,锁不了其他节点)
而分布式下
可以使用数据库(利用唯一索引,加锁插入,解锁删除,容易死锁)或者Redis或者Zookeper
Zookeper:结合临时节点使用
在这里插入图片描述

九、应用场景

在这里插入图片描述
在这里插入图片描述

十、 事务性

在这里插入图片描述
原理是通过version一致进行控制

十一、观察者机制

Zookeper中有三种节点:leader节点、follow节点、observer节点
其中observer节点不参加投票,不算在ack的半数节点范围内
在这里插入图片描述

十二、session会话管理

会话过期前断开,会重新进行连接,连接成功后会继续使用之前的过期时间
要避免2个客户端共用一个sessionId的场景,会导致第二个连接成功后,第一个被动断开,互相抢占,无限重连
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

nodejs微信小程序+python+PHP问卷调查系统的设计与实现-计算机毕业设计推荐

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性:…

This详细用法

this的指向 this有5种指向,在普通函数中,this指向window;在构造函数中,this指向创建的对象;在方法声明中,this指向调用者;在定时器中, this指向window;在事件中&#xff…

超大规模集成电路设计----MOS器件原理(二)

本文仅供学习,不作任何商业用途,严禁转载。绝大部分资料来自----数字集成电路——电路、系统与设计(第二版)及中国科学院段成华教授PPT 超大规模集成电路设计----MOS器件原理(二) 半导体物理知识补充介绍1. 半导体材料2. 固体类型…

RK3568平台开发系列讲解(Linux系统篇)通过OF函数获取属性

🚀返回专栏总目录 沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将介绍通过OF函数获取属性。 一、获取获取属性 ① of_find_property 函数 of_find_property 函数用于在设备树中查找节点 下具有指定名称的属性。 如果找到了该属性, 可以通过返回的属性结构体…

Shell循环:expect(二)

expect实战:公钥推送 一、准备工作:安装expect,装备公钥 二、通过shell循环判断主机在线 #!/bin/bash #脚本编写 #创建一个IP地址文件 >ip.txt #使用for循环ping测试主机是否在线 for i in {3..254} do{ip192.168.151.$iping -c1 -W…

【C++练级之路】【Lv.2】类和对象(上)(类的定义,访问限定符,类的作用域,类的实例化,类的对象大小,this指针)

目录 一、面向过程和面向对象初步认识二、类的引入三、类的定义四、类的访问限定符及封装4.1 访问限定符4.2 封装 五、类的作用域六、类的实例化七、类的对象大小的计算7.1 类对象的存储方式猜测7.2 如何计算类对象的大小 八、类成员函数的this指针8.1 this指针的引出8.2 this指…

【算法】单调栈题单(矩阵系列、字典序最小、贡献法)⭐

文章目录 题单来源经典题单496. 下一个更大元素 I(单调栈模板题)503. 下一个更大元素 II(单调栈循环数组)2454. 下一个更大元素 IV(第二个更大的元素:两个单调栈)456. 132 模式(单调…

操作系统||经典进程同步问题之读者-写者问题

一个数据文件或记录可被多个进程共享 【问题描述】 有读者和写者两组并发进程,共享一个文件,当两个或两个以上的读进程同时访问共享数据时不会产生副作用,但若有某个写进程和其他进程(读进程或写进程)同时访问共享数…

Autosar COM通信PDU

文章目录 Autosar 中各个PDU所在示意图PDU的分类PDU 和 SDU 的关系I-PDUN-PDUL-PDU相关协议其他参考 Autosar 中各个PDU所在示意图 PDU的分类 在Autosar 中,主要有 I-PDU、N-PDU和 L-PDU 三种。 L-PDU:Data Link Layer PDU,数据链路层PDUN-…

[C/C++]数据结构 关于二叉树的OJ题(利用分治思想解决难题)

题目一: 单值二叉树 🚩⛲🌟⚡🥦💬 🚩题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 ⛲题目描述: 如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。…

制作飞腾(arm)芯片架构的nexus镜像

nexus官方没有arm架构的镜像,下面介绍一种自己制作镜像的方式 1、事先准备 在一个arm架构机器上安装docker下载nexus的linux版(https://www.sonatype.com/download-oss-sonatype)下载centos的arm架构镜像(docker pull centos-centos8.4.2105)下载arm版本的java8(ht…

POJ 3734 Blocks 动态规划(矩阵的幂)

一、题目大意 我们要给排成一行的区块涂颜色,可以选择红、绿、蓝、黄四种,要求红和绿的块都必须是偶数个,求出最终的涂色方式,对10007取余。 二、解题思路 我们设三个数列A,B和C: 1、A代表红色和绿色都…

SpringSecurity 三更草堂 学习笔记

SpringSecurity从入门到精通 0. 简介 Spring Security 是 Spring 家族中的一个安全管理框架。相比与另外一个安全框架Shiro,它提供了更丰富的功能,社区资源也比Shiro丰富。 一般来说中大型的项目都是使用SpringSecurity 来做安全框架。小项目有Shiro的…

前端笔记(二):CSS 选择器与特性

CSS(层叠样式表)是一种样式表语言,用于描述HTML或XML文档的呈现方式。它定义了如何在屏幕、纸张或其他媒体上显示文档的样式、布局和外观。 里面的代码由 选择器 { } 组成 体验 CSS CSS 可以让我们界面变得更加美观,这是 CSS 的…

同旺科技 分布式数字温度传感器 -- Modbus Poll测试

内附链接 1、数字温度传感器 主要特性有: ● 支持PT100 / PT1000 两种铂电阻; ● 支持 2线 / 3线 / 4线 制接线方式; ● 支持5V~17V DC电源供电; ● 支持电源反接保护; ● 支持通讯波特率1200bps、2…

YOLOv8 区域计数 | 入侵检测 | 人员闯入

大家好,昨天的 YOLOv8 新增加了一个功能,区域计数,用这个功能我们能实现很多的任务, 比如入侵检测,流量统计,人员闯入等,使用方式也非常的方便,但是一定要使用最新版的 YOLOv8 代码(2023/12/03更新的代码)。 低版本是不具备这个功能的,上面是演示效果。 使用非常的方…

计算机网络TCP篇③问答篇

目录 一、如何理解 TCP 是面向字节流协议 先来说说为什么 UDP 是面向报文的协议? 如果收到了两个 UDP 报文,操作系统是如何区分开的呢? 再说说为什么 TCP 是面向字节流的协议? 二、如何解决粘包问题? ①、固定消…

【强化学习算法】Q-learning原理及实现

实现代码github仓库:RL-BaselineCode 代码库将持续更新,希望得到您的支持⭐,让我们一起进步! 文章目录 1. 原理讲解1.1 Q值更新公式1.2 ε-greedy随机方法 2. 算法实现2.1 算法简要流程2.2 游戏场景2.3 算法实现 3. 参考文章 1. 原…

DBS note7 (end):DB Design

目录 一、前言 二、引言 三、Entity-Relationship Models(实体-关系模型) 1、关系约束 三、函数依赖和正则化 1、BCNF分解 2、无损分解 3、依赖关系保留分解 一、前言 略读过一遍CS186,对于CS186来说,绝对不止这 7 篇笔记…

10. 哈希表

哈希表(hash table),又称散列表,其通过建立键 key 与值 value 之间的映射,实现高效的元素查询。具体而言,我们向哈希表输入一个键 key ,则可以在 \(O(1)\) 时间内获取对应的值 value 。 给定 n 个学生,每个…