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

【zookeeper】zk的ZAB原子广播协议

zk的ZAB原子广播协议来源于paxos算法[1]。paxos算法是一种基于消息传递的消息一致性算法,其特点是在可靠的通信环境下,可以保证消息的最终一致性。paxos要求每台server都持有自己的一个事务id的记录,这个事务id会每通过一个提议就自增加一,并可以通过事务id来判断提议是否应该投票,如果提议的事务id小于当前自己记录的事务id,那么就不投票。不过paxos中没有leader的概念,每个server之间都是平等的,为了简化或者说优化paxos,zk中有了Leader的概念,最终是否投票通过,由leader最终决定。

那么zk的zab协议是如何运作的呢?介绍如下。

1、zk正常工作

对于一个客户端来说,如果需要进行写操作,他连上的server,可以是follower或者leader,但不能是observer。假设连上的是一个follower,当client向follower发送一个写命令后,follower会将命令发送给leader。leader会将这个命令发送给所有的follower,将数据写入到每台server中,最终达到最终一致性。那么如何做的呢?

leader会广播给所有的follower让它们写日志,如果拿到的回复是OK的超过了一半,那么就会进行下一步。
广播给所有的follower写命令,将数据写入内存。

zk leader内部存在队列,对于每一个follower都会有一个队列与之对应。队列的先进先出的特性,使得follower从leader拿到的事务id的顺序性有了保证;而队列自身可以保证消息的最终一致性,也就是说如果推送不到会一直努力推送,最终使得消息被推送到再进行下个消息的推送。

如果有一些follower因为如网络因素,在向磁盘中写入日志时没有回复ok,如果总投票超过一半,那么对第二步没有影响。如果是在write时没有回复ok,只要超过一半,其实对后面的其他操作也是没什么影响的,只是连接到这台follower的client拿到的数据可能会是旧的数据,如果有需要可以加sync命令拿到最新的数据。

2、zk选举

zk在leader挂掉后,会有一个短暂的不可用的时间。这段时间用于zk内部选举,只有follower身份的zk节点才能参与选举,obserber是没有选举权力的,这样是为了快速决定出zk leader。

总得来说,选举的原则是,1、要选择事务id最大的,事务id最大,表示数据最完整。2、如果事务id最大的有不止一个,那么在这些节点中选择myid最大的作为leader。

参考文章:
[1],Zookeeper全解析——Paxos作为灵魂

相关文章:

【zookeeper】zk的ZAB原子广播协议

zk的ZAB原子广播协议来源于paxos算法[1]。paxos算法是一种基于消息传递的消息一致性算法,其特点是在可靠的通信环境下,可以保证消息的最终一致性。paxos要求每台server都持有自己的一个事务id的记录,这个事务id会每通过一个提议就自增加一&am…...

【问题思考总结】为什么分布函数右连续要左闭右开

问题 这个问题困扰我很久了,虽然感觉没什么用,但是还是想着搞清楚一点。 思考 Q1:什么是右连续? A1:F(x0)F(x0),即函数在一点的右极限等于该点的函数值。 …...

解决 edge 浏览器开发者工具出不来的问题

文章目录 猜测原因问题现象尝试过程最终解决办法C盘爆满解决经过(拆东墙补西墙) 猜测原因 windows 系统更新导致电脑管家C盘迁移导致(我C盘爆满了,每天提醒看着膈应,想着清理一下) 问题现象 按F12 和 右键…...

嵌入式算法——傅里叶变换算法

文章引注 https://mp.weixin.qq.com/s/5VIpNWci9YLY3m4gcYd6-w 摘要 傅里叶变换的核心在于,“任何连续周期信号可以由一组适当的正弦曲线组合而成”,在这个基础上对信号的中特定频率的正弦波进行分解或者重组,基于频率方面分析波形。 1、傅…...

让数据“动”起来:Python动态图表制作详解

在读技术博客的过程中,我们会发现那些能够把知识、成果讲透的博主很多都会做动态图表。他们的图是怎么做的?难度大吗?这篇文章就介绍了 Python 中一种简单的动态图表制作方法。 数据暴增的年代,数据科学家、分析师在被要求对数据有…...

Python获取网络适配器接口的类型、状态IPv4和IPv6地址

参考CSDN博主「Kwoky」的https://blog.csdn.net/Kwoky/article/details/84858997的简介: psutil是一个跨平台库(http://pythonhosted.org/psutil/)能够轻松实现获取系统运行的进程和系统利用率(包括CPU、内存、磁盘、网络等)信息。它主要用来…...

无敌了!Redis进军磁盘存储!

在高手林立的数据库江湖,Redis就像一个刺客,或许不如经典数据库存在感强,但因其高性能的特质而在群英榜中独占一席。 作为缓存的首选内存数据库,Redis最近放出了一个大新闻——将磁盘作为分层存储体系结构的一部分,以…...

中文编程开发语言工具编程实际案例:台球棋牌混合计时计费软件使用的编程构件说明

中文编程开发语言工具编程实际案例:台球棋牌混合计时计费软件使用的编程构件说明 上图说明:该软件可以用于桌球和棋牌同时计时计费,在没有开台的时候,图片是处于等待状态,这使用编程工具中的固定图像构件,在…...

在线客服系统源码 客服系统源码

在线客服系统源码 客服系统源码 框架:Thinkphp5workerman,环境:nginxphp7.3mysql5.6 多商户客服、不限坐席、独立系统--数据存储自己服务器上,支持开启SSL、支持离线对话。 新款在线客服系统全开源无加密:多商户、国…...

抽象轻松java——简易图书馆前置

用Maven写一个垃圾的项目&#xff0c;第一步打开IDEA&#xff0c;点击创建&#xff0c;创建一个Maven <dependencies><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.22</versi…...

图书推荐管理系统Python+Django网页界面+协同过滤推荐算法

一、介绍 图书管理与推荐系统。使用Python作为主要开发语言。前端采用HTML、CSS、BootStrap等技术搭建界面结构&#xff0c;后端采用Django作为逻辑处理&#xff0c;通过Ajax等技术实现数据交互通信。在图书推荐方面使用经典的协同过滤算法作为推荐算法模块。主要功能有&#…...

IT行业就业方向:探索未来的职业机会

引言&#xff1a; 随着信息技术的飞速发展&#xff0c;IT行业已经成为了当前最具活力和发展潜力的行业之一。在这个充满机遇和挑战的时代&#xff0c;选择一个好的就业方向对于个人的职业发展至关重要。本文将探讨IT行业中哪些方向具有更好的就业前景&#xff0c;并提供一些建…...

docker-compose安装ES7.14和Kibana7.14(有账号密码)

一、docker-compose安装ES7.14.0和kibana7.14.0 1、下载镜像 1.1、ES镜像 docker pull elasticsearch:7.14.0 1.2、kibana镜像 docker pull kibana:7.14.0 2、docker-compose安装ES和kibana 2.1、创建配置文件目录和文件 #创建目录 mkdir -p /home/es-kibana/config mkdir…...

k8s-----14、controller-Job和Cronjob

Job和Cronjob 1、Job&#xff08;一次性任务&#xff09;2、CronJob&#xff08;定时任务&#xff09; 1、Job&#xff08;一次性任务&#xff09; [rootmaster controlleryaml]# cat job.yaml apiVersion: batch/v1 kind: Job metadata:name: pi spec:template:spec:contain…...

蓝桥杯每日一题2032.10.24

蓝桥杯大赛历届真题 - C 语言 B 组 - 蓝桥云课 (lanqiao.cn) 题目描述 题目分析 由于布局为两个字节为一行&#xff0c;那我们输入两个数就为一行&#xff0c;但是这两个数全部得用二进制进行表示使用bitset bitset:将一个数转化为二进制 bitset<8>:将一个数转化为8位…...

【AGC】更新应用信息报未知错误解决方法

【问题描述】 最近有几个开发者遇到了一个问题&#xff0c;他们在AGC控制台配置好应用信息的图标和截图之后&#xff0c;点击保存按钮会弹出“未知错误&#xff0c;请稍后再试”的异常报错&#xff0c;导致无法正确保存应用配置信息。 出错页面如图所示。 ​​ 【解决方案】 …...

一个注解让 Spring Boot 项目接口返回数据脱敏

1 背景 需求是某些接口返回的信息&#xff0c;涉及到敏感数据的必须进行脱敏操作 2 思路 ①要做成可配置多策略的脱敏操作&#xff0c;要不然一个个接口进行脱敏操作&#xff0c;重复的工作量太多&#xff0c;很显然违背了“多写一行算我输”的程序员规范。思来想去&#xff…...

测试人员的KPI怎么设置

关于测试部的KPI&#xff0c;简单列举下自己所经历部门的考核指标&#xff1a; 工作量。根据平时跟踪的需求&#xff0c;编写的用例&#xff0c;提交的bug数等综合评估&#xff1b; 负责项目的质量。上线项目是否出现重大功能的事故&#xff0c; 如果出现了事故&#xff0c;分…...

Databend 开源周报第 116 期

Databend 是一款现代云数仓。专为弹性和高效设计&#xff0c;为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务&#xff1a;https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展&#xff0c;遇到更贴近你心意的 Databend 。 特性预览&#…...

mongodb-gridfs下载文件报Sort exceeded memory limit of 104857600 bytes异常

报错详细信息 com.mongodb.MongoQueryException: Query failed with error code 292 and error message Executor error during find command :: caused by :: Sort exceeded memory limit of 104857600 bytes, but did not opt in to external sorting. on server 11.51.141.…...

HP20x气压传感器Arduino驱动深度解析

1. Grove Barometer HP20x 高精度气压/温度/海拔传感器驱动深度解析1.1 项目定位与工程价值Grove Barometer HP20x 是 Seeed Studio 推出的基于 HP206C&#xff08;或兼容型号 HP203B/HP202C&#xff09;高精度气压传感芯片的模块化传感器。该驱动库并非简单封装&#xff0c;而…...

5G网络架构:核心网、接入网的组成与工作原理

5G网络架构&#xff1a;核心网、接入网的组成与工作原理&#x1f4dd; 本章学习目标&#xff1a;本章探讨网络编程&#xff0c;帮助读者掌握网络应用开发技能。通过本章学习&#xff0c;你将全面掌握"5G网络架构&#xff1a;核心网、接入网的组成与工作原理"这一核心…...

大模型岗位大揭秘:面试官从不说的5个秘密!

本文作者通过自身经历&#xff0c;详细解析了五大与大模型相关的岗位区别&#xff0c;包括大模型算法工程师、大模型应用工程师、云厂商解决方案架构师、云厂商大模型解决方案架构师以及云厂商FDE大模型前沿部署工程师。文章从工作重心&#xff08;模型vs客户&#xff09;、面试…...

告别网络调试焦虑:用STM32CubeMX+FreeRTOS,给LAN8720A和LWIP做个“健康检查”与性能小优化

STM32网络子系统深度优化&#xff1a;从连通性测试到工业级稳定性实战 当你熬夜调试的嵌入式设备终于能Ping通时&#xff0c;那种喜悦感堪比程序员第一次写出"Hello World"。但很快你会发现&#xff0c;真正的挑战才刚刚开始——那些在演示视频里永远不会出现的诡异断…...

通讯协议(四)——SPI通信:从时序图到模式配置的实战解析

1. SPI通信基础&#xff1a;从四线制到主从架构 第一次接触SPI通信时&#xff0c;我被它简洁的物理连接方式惊艳到了。相比其他通信协议&#xff0c;SPI只需要四根线就能实现全双工通信&#xff0c;这让电路设计变得异常清爽。MISO&#xff08;主入从出&#xff09;、MOSI&…...

别再傻傻分不清了!一文搞懂HIS、LIS、PACS这些医院里的‘系统天团’

医疗信息化系统全解析&#xff1a;从HIS到PACS的协同作战指南 第一次走进医院信息中心时&#xff0c;那些闪烁的服务器和此起彼伏的术语让我头晕目眩——HIS、LIS、PACS...它们就像医院里的"复仇者联盟"&#xff0c;每个系统都是独特的超级英雄&#xff0c;但又必须完…...

Go语言中的字符串处理

Go语言中的字符串处理 1. 字符串的基本概念 在Go语言中&#xff0c;字符串是一种不可变的字节序列&#xff0c;使用UTF-8编码。字符串的类型为string&#xff0c;是Go语言的基本类型之一。 package mainimport "fmt"func main() {// 字符串字面量s1 : "Hello, W…...

11. v4 版本升级指南

11. v4 版本升级指南 1. 概述 Tailwind CSS v4 是一个重大版本更新&#xff0c;从 JavaScript 配置转向 CSS 优先的配置方式。 1.1 主要变化 变化v3v4配置方式tailwind.config.jsCSS 文件 (theme)安装方式postcss tailwindcsstailwindcss/vite 等暗色模式dark: 前缀相同&a…...

颠覆视频剪辑:JianYingApi让自动化剪辑效率提升80%

颠覆视频剪辑&#xff1a;JianYingApi让自动化剪辑效率提升80% 【免费下载链接】JianYingApi Third Party JianYing Api. 第三方剪映Api 项目地址: https://gitcode.com/gh_mirrors/ji/JianYingApi 在短视频内容爆发的时代&#xff0c;视频创作者面临着三重核心痛点&…...

当Excel图表无法表达你的数据故事时:Charticulator开启零代码可视化创作新纪元

当Excel图表无法表达你的数据故事时&#xff1a;Charticulator开启零代码可视化创作新纪元 【免费下载链接】charticulator Interactive Layout-Aware Construction of Bespoke Charts 项目地址: https://gitcode.com/gh_mirrors/ch/charticulator 问题&#xff1a;数据…...