Zookeeper集群如何实现强一致性和高可用,集群数据同步过程

news2024/11/16 4:06:29

在分布式系统中,通常会面临如下问题:

  • 分布式协调:在分布式环境下,多个节点需要协同工作,确保多个服务之间数据的一致性以及系统的可靠性。

  • 分布式锁:在分布式系统中,多个节点可能需要同时访问共享资源,为了防止竞争条件和数据不一致,需要引入分布式锁机制。

  • 配置管理:在分布式系统中,多个节点需要共享某些配置或数据,并且这些配置需要动态更新。

  • 服务发现:在分布式系统中,节点之间需要互相发现,以便进行通信和协作,尤其是在动态扩展或缩减节点时。

  • 故障恢复:在分布式环境下,单个节点可能会发生故障,因此系统需要具有一定的容错机制,以保证整体系统的可用性。

使用Zookeeper对分布式系统进行管理,可以很大程度上解决解决上述问题,其中依赖Zookeeper集群提供的强一致性策略,可以解决分布式协调中数据之间保持一致的问题。

一致性策略分为

强一致性、线性一致性、因果一致性、最终一致性、弱一致性、读己之所写一致性、会话一致性以及单调读一致性。

其中,强一致性是保证的是所有的写操作都被严格按顺序应用到系统中,所有节点在任何时间点上都能看到相同的数据状态。这意味着,当一个客户端在提交写操作后,所有后续的读操作都能看到这个写操作的结果。

ZooKeeper 实现强一致性主要依赖于 ZAB 协议(ZooKeeper Atomic Broadcast),其类似于paxos算法,这是一种专门为 ZooKeeper 设计的分布式一致性协议。那么他是如何实现强一致性的呢?

集群数据同步流程

1. leader节点统一处理写请求

在Zookeeper集群中,只有leader节点能够处理写操作,其他的follower节点都只能处理读操作,但其并不是不能接受写请求,当接收到写操作的请求时,follower节点会讲这个请求转发给leader节点来处理。

99fbb6e3d58a44dc902b8288ab165be0.png

2. 生成并广播提案

Leader节点在接受到写请求后,会生成将写请求先转化成提案,并赋予zxid,然后将这份提案广播给所有的Follower节点。

23c82ca30de2450497743be6cb2d8c36.png

 3. Follower节点确认提案

Follower在接受到Leader节点的提案后,会确认当前提案的zxid是不是正确的。如果正确,则会保存当前提案的zxid,并且执行提案的事务操作但不提交,并返回确认消息ACK,等待Leader再次发送消息时,提交事务更改。

在ZooKeeper中,每个写操作(提案)都会被分配一个递增的事务ID,称为zxid。这个zxid用来标识提案的顺序,确保所有节点按照相同的顺序应用这些操作,以维持数据的一致性,而Follower就根据zxid来确认当前提案是否是期待的下一次提案,已确保事务执行的正确顺序,防止因写操作顺序不一致导致数据差异,具体规则如下:

  1. 接收提案:当Follower节点收到一个提案时,它首先会检查这个提案的zxid

  2. 处理过期提案:如果这个提案的zxid比Follower当前已经处理的最新zxid要小,说明这个提案是过期的,可能由于网络延迟或其他原因延迟到达。为了防止数据回滚(即不正确地应用旧的、更早的数据),Follower会直接忽略这个提案,不会保存或执行它。

  3. 处理未来提案:如果Follower收到的提案zxid比它当前期望的zxid要大,这意味着一些提案在传输过程中丢失了或尚未到达。为了保持数据一致性,Follower会先保存这个提案,但不会立即执行。它会等待缺失的提案到达,并在提案顺序完整时,按顺序执行所有提案。

  4. 读请求处理:在等待缺失提案的过程中,Follower可能暂时无法提供最新的数据。为了避免返回不一致的数据,Follower会将接收到的读请求转发给Leader节点。Leader拥有最新的提交状态,因此能够返回最准确的数据。

a1454b9f0aa04a2686e65a1a71dfa129.png

4. Leader节点返回成功消息 

当Leader节点在接受到一半以上的Follower节点的确认消息后,其就认为当前集群已经可以同步所有写操作,Leader就会通知所有从节点本次提案通过,从节点接收到这个消息后就会提交提案中的事务操作的结果,并且Leader此时会返回给客户端操作成功的响应。

6635587703414cb6a4325670c162943b.png

 整个流程比较好理解,但不好理解的是整个流程的意义是什么?

意义

1. 高可用

高可用比较好理解,任何中间件的集群模式都是具有高可用的作用,其同步所有数据到每个节点,可以防止因为Leader节点的意外宕机导致导致数据丢失,尤其是在zookeeper这样一个强一致性的要求下,节点之间数据差异的恢复速度极快,数据丢失概率极低。

zookeeper采用提案和确认提案的方式可以确保数据同步中,一半以上的节点都是可以正常接收提案并执行事务的。

当出现网络分区的问题时,一半以上的确认机制也可以使分区后的多个区域中,最多只有一个区域可以执行事务,这样可以防止两个leader同时执行不同的事务导致脑裂。

2. 强一致性

Zookeeper等待大多数节点预先执行完事务操作后返回给客户端成功响应,并且同时给Follower节点发送提案通过的消息,使其提交提案中的事务更改。通过这一过程,Zookeeper大大减少了客户端接收到成功响应到数据同步之间的时间,实现近乎强一致性,不过由于网络速度具有差异,肯能会有一定延迟。如果强行实现一致性,势必会极大的影响性能。

如果对于一致性有着极其严谨的要求,可以在获取数据之前执行sync指令,这个指令会从Leader拉取日志,同步数据,以达到数据最新的目的。

 

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

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

相关文章

ppt模板软件哪个好?这5个工具提供各种类型的PPT模板

在筹备一场关于中元节的精彩演讲时,你是否曾陷入过寻找完美PPT模板的困境?那些千篇一律的设计是否让你觉得乏味,渴望一份创意与美感并存的视觉呈现? 别担心,今天,我将为你揭晓几款宝藏级软件,它…

如何为 Nextcloud 配置自动数据库备份 - 应用程序

自动数据库备份模块简化了生成数据库计划备份的过程。这些备份可以存储在各种位置,包括本地驱动器、FTP 服务器、SFTP 服务器、Dropbox、Google Drive、OneDrive、NextCloud 和 Amazon S3 云存储。用户还可以选择启用自动删除过期备份的功能。此外,用户可…

大模型越狱攻击成功率 (ASR) 评判方法

JailbreakBench (24.04) • Rule-based. The rule-based judge from Zou et al. (2023) based on string matching, • GPT-4. The GPT-4-0613 model used as a judge (OpenAI, 2023), • HarmBench. The Llama-2-13B judge introduced in HarmBench (Mazeika et al., 2024), …

Xinstall助力App推广:落地页跳转,轻松提升转化率

在移动互联网时代,App的推广与运营成为了各行各业的关键一环。然而,许多推广者在落地页跳转App这一环节上遇到了不小的挑战。用户点击落地页后,往往需要经过繁琐的步骤才能跳转到App,这不仅降低了用户体验,还严重影响了…

gaussian-splatting环境配置

本文总结了在windows11下配置gaussian-splatting训练环境的步骤,主要包括gaussian-splatting库的下载、python环境配置、cudatoolkit和pytorch安装、diff-gaussian-rasterization/Simple-knn/plyfile/tdqm库安装,接着利用官方提供的已做好SFM的数据训练模…

vue中点击导航栏,动态改变样式,经典写法

vue中点击导航栏,动态改变样式,经典写法 在vue中,我们通常会有这样的情况,在多个子模块之间,点击其中一个子模块,修改当前点击的子模块的样式。如图,点击B模块时,模块B样式改变&…

【LeetCode】433.最小基因变化

1. 题目 2. 思想 这题的思想很经典,使用bfs求最短路径。相似的题目还有这道题。 把每次合理的变换都记录在队列中,然后先进先出,同时记录出执行的次数,得到最后的结果。同时需要把历史上曾经入队的基因串都放到字典里&#xff0…

IAM 编程访问和 AWS CLI

添加图片注释,不超过 140 字(可选) IAM 编程访问(欢迎来到雲闪世界。) IAM 编程访问是指使用访问密钥通过 API 和命令行工具访问 AWS 服务和资源。 当您为 IAM 用户启用编程访问时,您将生成可用于验证和…

萝卜快跑和端到端的自动驾驶(1)

先看一篇论文 2311.18636 (arxiv.org) 这篇论文里有一个非常好的图 比较了一下模块化任务(级联任务)和端到端自动驾驶的区别 首先什么叫模块化任务(级联) 如上图所示,左边的方块中的子方块,是展示了自动驾驶获取数据的途径,这里包括&…

浅析国有商业银行人力资源数字化平台建设

近年来,在复杂的国际经济金融环境下,中国金融市场整体运行保持稳定。然而,随着国内金融机构改革的不断深化,国有商业银行全面完成股改上市,金融市场规模逐步扩大,体系日益完善,同时行业的竞争也…

五分钟搭建进销存库存表,轻松掌握库存动态!

在企业的日常运营中,库存管理如同心脏之于身体,其重要性不言而喻。一个高效、准确的库存统计看板,就像是企业的“库存晴雨表”,能够实时反映库存状况,助力企业精准决策,确保供应链畅通无阻。今天就来手把手…

qt-15综合实例(电子时钟)-多态重写鼠标单击和移动事件

综合实例-电子时钟 知识点digiclock.hdigiclock.cppmain.cpp运行图 知识点 setWindowOpacity(0.5);//设置窗体透明度 QTimer* Timer new QTimer(this);//新建一个定时器 connect(Timer,SIGNAL(timeout()),this,SLOT(ShowTime())); Timer->start(1000);//启动定时器 digic…

奇迹世界2单机版安装教程+GM工具+无虚拟机

今天给大家带来一款单机游戏的架设:奇迹世界2单机版。 另外:本人承接各种游戏架设(单机联网) 本人为了学习和研究软件内含的设计思想和原理,带了架设教程仅供娱乐。 教程是本人亲自搭建成功的,绝对是完整…

SAP与航信爱信诺电子发票系统集成案例

一、项目环境 某药业有限公司是一家以医药产业为主营、资本经营为平台的大型民营企业集团。公司成立迄今,企业经营一直呈现稳健、快速发展的态势集团总销售额超40亿元。 为融入企业内部的ERP、CRM等系统,支持自动化记账、对账流程,推动企…

面向未来的数据治理趋势与挑战

面向未来的数据治理趋势与挑战可以归纳为以下几个方面: 数据治理趋势 战略地位提升: 数据治理正在从传统的支持性角色转变为企业的战略核心,与业务战略紧密结合,以驱动数据驱动的决策和创新。人工智能与机器学习的应用&#xff…

什么是光伏气象站——仁科测控

【仁科测控,品质保障】光伏气象站,‌这一专门为光伏发电系统设计的监测设备,‌其核心能力在于精确且实时地捕捉那些对光伏发电效率产生关键影响的气象因素。‌这些数据不仅为评估光伏电站的发电性能提供了重要依据,‌更是优化运维…

VueX 使用

1.简介 就是用来多组件共享数据的实现用的 2.使用VueX 因为使用的是vue2 所以下的是vuex3 若是vue3 必须下的是 vue4 npm i vuex3 3.搭建环境 1.创建 src/store/index.js //该文件用于创建一个Vuex中最为核心的store//引入VueX import Vuex from vuex import Vue from vu…

springboot功能模块之POI操作Excel

一、前言 文件的导入导出: 这个功能主要就是帮助我们的用户能够快速的将数据导入到数据库中,不用在自己手动的一条一条的将数据新增到我们的数据库中.同时又能够方便我们能够将数据导出之后打印出来给领导们查看.不用非得带着电脑这里那里的跑.非常实用的功能. 文件的导入导…

Android低内存设备系统优化

切记,所有的优化都遵循一条准则: 空间换时间,时间换空间。 一、前言 我们为什么会觉得卡顿、不流畅? 卡顿等性能问题的最主要根源都是因为渲染性能,Android系统很有可能无法及时完成那些复杂的界面渲染操作。Android系统每隔16ms发出信号,触发对UI进行渲染,如果每次渲染…

android13顶部状态栏里面调节背光 背景闪烁问题

总纲 android13 rom 开发总纲说明 目录 1.前言 2.问题分析 3.代码分析 4.代码修改 5.彩蛋 1.前言 android13顶部状态栏里面调节背光, 背景闪烁问题,会出现画面不全问题,如下图 2.问题分析 这里看起来是由于隐藏的时候,界面显示是一个渐变的隐藏,但是后面的背景又是…