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

分布式之ZAB协议

写在前面

假定我们现在使用zk执行了如下的指令:

[zk: 192.168.0.10:2181(CONNECTED) 0] create /dongshidaddy 123
Created /dongshidaddy
[zk: 192.168.0.10:2181(CONNECTED) 1] create /dongshidaddy/mongo 456
Created /dongshidaddy/mongo

假定因为节点故障最终导致,指令create /dongshidaddy/mongo 456先于指令create /dongshidaddy 123执行,则就会报如下错误:

[zk: 192.168.0.10:2181(CONNECTED) 0] create /dongshidaddy/mongo 456
Node does not exist: /dongshidaddy/mongo

但很明显我们在使用zk的过程是没有遇到过这类问题的,为什么呢?因为zk使用了能够保证操作指令顺序性的分布式共识协议ZAB(zookeeper atomic broadcast),接下来我们就一起看下吧!

1:zab

我们直接通过一个例子来看下zab是如何保证指令执行的顺序性的,假定有一个三个节点,节点A,节点B,节点C的集群,如下图:

在这里插入图片描述

假定此时有指令X,Y需要执行,为了执行指令,需要先生成提案,提案的格式是事务标识符:指令,其中事务标识符格式为(epoch,递增编号),其中在一个任期内递增编号是递增的,当有一个新的任期时递增编号从0开始,假定我们这里的的任期是1,X,Y的递增编号分别是1,2 ,则二者的提案分别为<1,1>:X<1,2>:Y,如下图:

在这里插入图片描述

zab通过唯一的事务标识符,就能保证指令的操作顺序了,leader节点A收到客户端的指令生成提案,并将生成的提案发送给节点B和节点C,如下图:

在这里插入图片描述

当节点A收到了大多数节点的确认响应之后,将会提交提案,并通知节点B和节点C提交提案,如下图:

在这里插入图片描述
这里提交提案需要注意的是,如果是前面还有更小的提案没有被提交,这里为了保证指令的顺序性,将会等待前面的提案提交后才会真正的提交。

写在后面

小结

多知道一点

zab的第一个字母为什么是z(zookeeper)

因为zab协议是zk为了解决指令的顺序性问题而设计的一种分布式共识协议,所以用自己的名字来命名就很正常了。

zk为什么不采用raft

因为raft是在2013年才被提出的,而zk是2007年开发的,所以不是不用,而是没有。

zk是强一致性还是最终一致性

因为zk基于zab协议,也是基于大多数的来更新数据的,且zk允许读请求通过从节点来执行,因此可能读到旧数据,所以是最终一致性,如果想要读到最新数据的话,可以通过执行sync指令来完成,如下:


[zk: 192.168.0.10:2181(CONNECTED) 2] sync /dongshidaddy/mongo
[zk: 192.168.0.10:2181(CONNECTED) 3] Sync returned 0
[zk: 192.168.0.10:2181(CONNECTED) 3] get /dongshidaddy/mongo
456
cZxid = 0x100000005
ctime = Mon Apr 20 21:19:28 HKT 2020
mZxid = 0x100000005
mtime = Mon Apr 20 21:19:28 HKT 2020
pZxid = 0x100000005
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 0
[zk: 192.168.0.10:2181(CONNECTED) 4]

参考文章列表

相关文章:

分布式之ZAB协议

写在前面 假定我们现在使用zk执行了如下的指令&#xff1a; [zk: 192.168.0.10:2181(CONNECTED) 0] create /dongshidaddy 123 Created /dongshidaddy [zk: 192.168.0.10:2181(CONNECTED) 1] create /dongshidaddy/mongo 456 Created /dongshidaddy/mongo假定因为节点故障最终…...

MySQL binlog常用命令及设置清理时间

MySQL binlog常用命令及设置清理时间1 binlog 基本概念2 binlog常用命令3 清理MySQL的binlog日志3.1 自动清理3.2 手动清理文章参考&#xff1a; http://www.360doc.com/content/22/0418/08/65840191_1027038859.shtml https://www.cnblogs.com/kiko2014551511/p/11532426.html…...

Windows下载安装Prometheus

目录 资料 下载 解压 点击prometheus.exe运行 资料 Prometheus是一个开源的系统监控和报警系统&#xff0c;同时也支持多种exporter采集数据&#xff0c;还支持pushgateway进行数据上报&#xff0c;Prometheus性能足够支撑上万台规模的集群。 官网&#xff1a;https://pr…...

0-1背包、完全背包及其变形【零神基础精讲】

来源0x3f&#xff1a;https://space.bilibili.com/206214 三叶姐的对背包问题的总结&#xff1a;【宫水三叶】详解完全背包一维空间优化推导&#xff08;附背包问题攻略&#xff09;https://leetcode.cn/circle/discuss/GWpXCM/ 文章目录0-1背包、完全背包及其拓展&#xff08;…...

OpenStack

OpenStack优势&#xff1a; 1、模块松耦合。 2、组件配置较为灵活。 3、二次开发容易 OpenStack共享服务组件&#xff1a; 1、数据库服务&#xff1a;MongoDB 2、消息列队&#xff1a;RabbitMQ 3、缓存&#xff1a;Redis 4、存储&#xff1a;Ceph 5、负载均衡&#xff…...

Spring Boot整合Kaptcha实现验证码功能

目录一、前言1.Kaptcha 简介2.Kaptcha 详细配置表二、实现1.整合kaptcha&#xff0c;创建kaptcha的工具类1.1 添加依赖1.2 创建KaptchaConfig工具类2 编写接口&#xff0c;在接口中使用 kaptcha 工具类来生成验证码图片&#xff08;验证码信息&#xff09;并返回3 登录时从sess…...

【2023】某python语言程序设计跟学第一周内容

本文说明&#xff1a; 案例内容为北理工python语言程序设计课程&#xff0c;如有不妥请联系&#xff01; 目录温度转换案例&#xff1a;执行结果&#xff1a;代码解析&#xff1a;白话说明&#xff1a;举一反三&#xff1a;根据输入半径求圆周长或面积执行结果&#xff1a;温度…...

C#学习记录——接口的实现

一小部分知识精英依旧直面核心困难&#xff0c;努力地进行深度钻研&#xff0c;生产内容&#xff1b;而大多数信息受众始终在享受轻度学习&#xff0c;消费内容。如果我们真的希望在时代潮流中占据一席之地&#xff0c;那就应该尽早抛弃轻松学习的幻想&#xff0c;锤炼深度学习…...

“ChatGPT之父”Sam Altman:我是如何成功的?

背靠微软&#xff0c;OpenAI能拳打谷歌&#xff0c;脚踢Meta&#xff0c;它背后的男人&#xff0c;必然不简单。 让我们来看一看&#xff0c;Sam Altman是如何一步步成长为今天这个搅动全世界的男人。 山姆奥特曼&#xff08;Sam Altman&#xff09; 成长和创业经历 在YC创始…...

jQuery发送Ajax请求的几种方式

概述JQuery发送ajax请求的方法有很多&#xff0c;其中最基本的方法是$.ajax&#xff0c;在其中封装的方法有 $.get, $post等。我们分别举了不同的示例。数据格式首先&#xff0c;浏览器与服务器之间传输数据所采用的格式&#xff0c;比较常见的有json&#xff0c;jsonp&#xf…...

Android实现连线题效果

效果图全部正确&#xff1a;有对有错&#xff1a;结果展示&#xff0c;纯黑色&#xff1a;支持图片&#xff1a;实现思路仔细分析可以发现&#xff0c;连线题的布局可以分为两部分&#xff0c;一个是左右两列矩形&#xff0c;另一个是他们之间的连线。每个矩形的宽高都一样&…...

以数据 见未来!首届未来数商大会成功举办

2月25日&#xff0c;2023未来数商大会在杭州未来科技城学术交流中心举办。大会发布了数商产业趋势研究报告&#xff0c;首次提出并探讨了完整的数商产业概念&#xff0c;并成立了未来数商联盟&#xff0c;开通了浙江大数据交易服务平台余杭专区。会上&#xff0c;杭州未来科技城…...

Java数据结构与算法——手撕LRULFU算法

LRU算法 力扣146&#xff1a;https://leetcode-cn.com/problems/lru-cache/ 讲解视频&#xff1a;https://www.bilibili.com/video/BV1Hy4y1B78T?p65&vd_source6f347f8ae76e7f507cf6d661537966e8 LRU是Least Recently Used的缩写&#xff0c;是一种常用的页面置换算法&…...

20230227英语学习

Can Clay Capture Carbon Dioxide? 低碳新思路&#xff1a;粘土也能吸收二氧化碳&#xff01; The atmospheric level of carbon dioxide — a gas that is great at trapping heat, contributing to climate change — is almost double what it was prior to the Industria…...

校招前端高频react面试题合集

了解redux吗&#xff1f; redux 是一个应用数据流框架&#xff0c;主要解决了组件之间状态共享问题&#xff0c;原理是集中式管理&#xff0c;主要有三个核心方法&#xff1a;action store reduce 工作流程 view 调用store的dispatch 接受action传入的store&#xff0c;reduce…...

k8s node之间是如何通信的?

承接上文同一个node中pod之间如何通信&#xff1f;单一Pod上的容器是怎么共享网络命名空间的&#xff1f;每个node上的pod ip和cni0网桥ip和flannel ip都是在同一个网段10.1.71.x上。cni0网桥会把报文发送flannel这个网络设备上&#xff0c;flannel其实是node上的一个后台进程&…...

System V|共享内存基本通信框架搭建|【超详细的代码解释和注释】

前言 那么这里博主先安利一下一些干货满满的专栏啦&#xff01; 手撕数据结构https://blog.csdn.net/yu_cblog/category_11490888.html?spm1001.2014.3001.5482这里包含了博主很多的数据结构学习上的总结&#xff0c;每一篇都是超级用心编写的&#xff0c;有兴趣的伙伴们都支…...

魔兽世界WoW注册网站搭建——-Liunx

问题背景哎 搭建了一个魔兽3.35&#xff08;纯洁版&#xff09;每当同学朋友要玩的时候我都直接worldserver上面打一个命令随之出现朋友的朋友也要玩想了想还是要有一个网站原本以为吧单机版里面网页的IP数据库改下可以了结果PHP报错了Unknown column sha_pass_hash in field l…...

OSG三维渲染引擎编程学习之六十八:“第六章:OSG场景工作机制” 之 “6.8 OSG内存管理”

目录 第六章 OSG场景工作机制 6.8 OSG内存管理 6.8.1 Referenced类 6.8.2 ref_ptr<>模板类 6.8.3 智能指针...

字节前端必会面试题(持续更新中)

事件传播机制&#xff08;事件流&#xff09; 冒泡和捕获 谈一谈HTTP数据传输 大概遇到的情况就分为定长数据 与 不定长数据的处理吧。 定长数据 对于定长的数据包而言&#xff0c;发送端在发送数据的过程中&#xff0c;需要设置Content-Length,来指明发送数据的长度。 当…...

网络编程(Modbus进阶)

思维导图 Modbus RTU&#xff08;先学一点理论&#xff09; 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议&#xff0c;由 Modicon 公司&#xff08;现施耐德电气&#xff09;于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

模型参数、模型存储精度、参数与显存

模型参数量衡量单位 M&#xff1a;百万&#xff08;Million&#xff09; B&#xff1a;十亿&#xff08;Billion&#xff09; 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的&#xff0c;但是一个参数所表示多少字节不一定&#xff0c;需要看这个参数以什么…...

通过Wrangler CLI在worker中创建数据库和表

官方使用文档&#xff1a;Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后&#xff0c;会在本地和远程创建数据库&#xff1a; npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库&#xff1a; 现在&#xff0c;您的Cloudfla…...

数据链路层的主要功能是什么

数据链路层&#xff08;OSI模型第2层&#xff09;的核心功能是在相邻网络节点&#xff08;如交换机、主机&#xff09;间提供可靠的数据帧传输服务&#xff0c;主要职责包括&#xff1a; &#x1f511; 核心功能详解&#xff1a; 帧封装与解封装 封装&#xff1a; 将网络层下发…...

linux 下常用变更-8

1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行&#xff0c;YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID&#xff1a; YW3…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...

中医有效性探讨

文章目录 西医是如何发展到以生物化学为药理基础的现代医学&#xff1f;传统医学奠基期&#xff08;远古 - 17 世纪&#xff09;近代医学转型期&#xff08;17 世纪 - 19 世纪末&#xff09;​现代医学成熟期&#xff08;20世纪至今&#xff09; 中医的源远流长和一脉相承远古至…...

佰力博科技与您探讨热释电测量的几种方法

热释电的测量主要涉及热释电系数的测定&#xff0c;这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中&#xff0c;积分电荷法最为常用&#xff0c;其原理是通过测量在电容器上积累的热释电电荷&#xff0c;从而确定热释电系数…...

虚拟电厂发展三大趋势:市场化、技术主导、车网互联

市场化&#xff1a;从政策驱动到多元盈利 政策全面赋能 2025年4月&#xff0c;国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》&#xff0c;首次明确虚拟电厂为“独立市场主体”&#xff0c;提出硬性目标&#xff1a;2027年全国调节能力≥2000万千瓦&#xff0…...