架构与思维:4大主流分布式算法介绍(图文并茂、算法拆解)

news2024/9/21 19:05:33

 介绍

本文聚焦高并发场景下分布式一致性算法的分析和讨论

分布式场景下困扰我们的3个核心问题(CAP):一致性、可用性、分区容错性。

1、一致性(Consistency): 无论服务如何拆分,所有实例节点同一时间看到是相同的数据

2、可用性(Availability): 不管是否成功,确保每一个请求都能接收到响应

3、分区容错性(Partition Tolerance): 系统任意分区后,在网络故障时,仍能操作

image

而我们最为关注的是如何在高并发下保障 Data Consistency(数据一致性),因为在很多核心金融业务场景(如 支付、下单、跨行转账)中,为了避免资金问题,是需要强一致性结果的。而分布式一致性算法就是保障 Data Consistency的强大利刃,它的目标是确保分布式系统中多个节点在读取或修改同一份数据时,产生相同结果的关键机制。这些算法对于保证分布式系统的一致性和可靠性至关重要。常用的分布式算法:

  1. Paxos算法

  2. Raft算法

  3. ZAB(ZooKeeper Atomic Broadcast)算法

2 主流分布式算法

2.1 Paxos算法

Paxos算法是一种用于分布式系统中保障一致性的算法,由Leslie Lamport于1990年提出,被广泛应用于分布式系统中的一致性问题,如分布式数据库、分布式存储系统等。该算法的主要目标是在一个由多个节点组成的分布式系统中,协调某个数据值并达成一致性,典型的少数服从多数的案例。

2.1.1 基本概念

1. 提案: 由提案号(id)和提案内容(value)组成,其中id主要用于实现Paxos算法,而value对应在实际的分布式系统中为所需要修改数据的命令 或者 log信息。

2. 角色: Paxos算法中抽象出来的概念,对应着实际分布式环境中的不同分工。主要角色包括提议者(Proposer)、批准者(Acceptor)和学习者(Learner)。

  • 提议者负责提出值的提案

  • 接受者负责接受提案并投票

  • 学习者负责学习已经达成一致的值

image

Proposer 提案者提案者负责提出提案 (Proposal),Proposal信息包括提案编号 (Proposal ID) 和提议的值 (Value)。提案的value,可以是任何行为或者操作,比如传统转账场景,将用户的账号余额从0改为100,Paxos 协议统一抽象为value。 Proposer可以有多个,不同的Proposer可以提出不同的甚至互斥的value,比如提案者A消费(将变量Money-100),提案者B也消费(将变量Money-200),但对同一轮Paxose而言,最多只有一个value可以被批准,否则就乱套了。

Acceptor 批准者Acceptor 从含义上来说就是除了当前Proposer以外的其他机器,他们之间完全平等和独立,Proposer需要争取超过半数(N/2+1)的 Acceptor 批准后,其提案才能通过,它倡导的“value”操作才能被所有机器(包括Proposer、Acceptor、Learner)所接受。

Learner 学习者Learner 不参与选举,而是学习被批准的 value,在Paxos中,Learner主要参与相关的状态机同步流程。这里Leaner的流程就参考了Quorum议会机制,某个value需要获得超过半数的Acceptor 批准,才能真正被Learner学习到。

2.1.2 算法流程

1. 准备阶段(Prepare阶段):提议者(Proposer)向所有Acceptor节点发起Prepare请求,携带全局唯一且递增的提案编号N,要求它们告诉提议者已经接受的最高提议号。如果接受者接受了轮次小于当前轮次的提案,那么它会更新自己的状态,拒绝当前轮次的提案。

2. 承诺阶段(Promise阶段) :Acceptor节点接收到prepare请求后,会检查该请求的提议号是否比它已经接受的提议号更高。如果是,那么节点会更新自己的状态,承诺不再接受轮次小于当前轮次的提案。

Acceptor收到Prepare请求后,有两种情况:

  • 如果Acceptor首次接收Prepare请求, 设置MaxN=N, 同时响应ok

  • 果Acceptor不是首次接收Prepare请求,则:若请求过来的提案编号N小于等于上次持久化的提案编号ResN,则不响应或者响应error。若请求过来的提案编号N大于上次持久化的提案编号MaxN, 则更新MaxN=N,同时给出正确的响应。

image

3. 承诺响应阶段(Acknowledge阶段) :在这个阶段,接受者会检查自己是否接受了当前提案。如果是,那么接受者会返回一个承诺响应,告诉提议者当前提案已经被接受。4. 提议的接受与决策 :当Acceptor节点接收到一个提议请求时,它会检查该提议的值是否比它已经接受的值更高。如果是,那么它会接受该提议,并向其他节点发送接受消息。当一个提议被大多数节点接受后,该提议就成为了决策,并被所有节点执行。

Proposer 获得 Accept 回复的信息之后,做如下判断:

  • 回复数量 > Acceptor 数量的1/2时,代表提交 value 成功,发送广播给所有的 Proposer、Learner,通知它们已提交的 value。

  • 回复数量 <= Acceptor 数量的1/2时,则重新开始,更新生成更大的提案号,跳转到准备阶段执行。

  • 收到响应error时,同样更新生成更大的提案号,转到准备阶段执行。

image

5. 学习阶段(Learn阶段) :学习者会向所有接受者发送一个学习请求,接受者会返回已经接受的最大提案,使学习者能够学习到已经达成一致的值。

2.1.3 应用

Paxos算法具有高度容错特性,可以在某个节点宕机、网络异常、消息延迟等问题的情况下,快速且正确地在集群内部对某个数据达成一致。所以在很多业务场景中得到应用。比如:

  • Zookeeper使用一个类Multi-Paxos的共识算法作为底层存储协同的机制。

  • Google公司在其分布式锁中应用了Multi-Paxos算法。

2.2 Raft算法

2.2.1 基本概念

Raft 算法是一致性算的一种,用来解决分布式一致性问题。它提供了一种在计算系统集群中分布状态机的通用方法,确保集群中的每个节点都同意一系列相同的状态转换。其主要目标是解决分布式系统中的领导者选举、日志复制和安全性等关键问题。

2.2.2 领导者选举与超时机制

在Raft算法中,服务器可以处于三种状态:领导者(leader)、跟随者(follower)和候选者(candidate)。正常情况下,集群中只包含一个 leader ,其余服务器都是 follower 。跟随者通过投票选出领导者,只有得到“大多数”跟随者投票的服务器能成为领导者;领导者负责将命令同步给跟随者,只有被“大多数”跟随者确认的命令才能提交。

1. 跟随者(Follower)Fllower是所有节点的初始状态,内部都会有一个随机超时时间。这个超时时间,规定了在倒计时结束后仍然收不到Leader的心跳,Follower就会转变为Candidate。

2. 候选者(candidate)Follower在转变为Candidate后,超时时间重置,倒计时结束时就会向其他节点提名自己的实,拉取选票。如果能获得半数以上(1/2以上,包含自己投给自己的)的选票,则当选为Leader,这个过程就叫做Leader选举。所以节点最好是单数,避免极端情况下出现一个集群选举出两个Leader的脑裂问题。

3 .领导者(leader)Raft集群通过Leader与客户端进行交互,Leader不断处理写请求与发送心跳给Follower,Follower在收到Leader的心跳后,其超时时间会重置,即重新开始倒计时。正常工作期间只有 Leader 和 Follower,且Leader至多只能有一个。

角色状态转换过程

image

2.3 ZAB(ZooKeeper Atomic Broadcast)算法

2.3.1 基本概念

ZAB(Zookeeper Atomic Broadcast)是Zookeeper原子消息广播协议,是Zookeeper保证数据一致性的核心算法。该算法借鉴了Paxos算法,但又不像Paxos那样是一种通用的分布式一致性算法,而是特别为Zookeeper设计的支持崩溃恢复的原子广播协议。在Zookeeper中,主要依赖ZAB协议来实现数据一致性。基于该协议,Zookeeper实现了一种主备模型(即Leader和Follower模型)的系统架构,保证集群中各个副本之间数据的一致性。通过一台主进程(Leader)负责处理外部的写事务请求,然后将数据同步到其他Follower节点,如果超过半数成功ACK,则主进程执行 Commit操作。

2.3.2 广播流程

image

ZAB 协议的消息广播过程使用的是一个原子广播协议,类似一个 二阶段(2PC) 提交过程。对于客户端发送的写请求,全部由 Leader 接收,Leader 将请求封装成一个事务 Proposal,将其发送给所有 Follwer ,然后,根据所有 Follwer 的反馈,如果超过半数成功响应,则执行 Commit 操作(先提交自己,再发送 Commit 给所有 Follwer)

3 总结

分布式一致性算法是确保分布式系统中多个节点在读取或修改同一份数据时,产生相同结果的关键机制。这些算法对于保证分布式系统的一致性和可靠性至关重要。目前常见以下是一些常用的分布式一致性算法:

  1. Paxos算法:由Lamport宗师提出,是一种基于消息传递的分布式一致性算法。它旨在解决在一个可能发生故障的分布式系统中,如何快速正确地在集群内对某个值达成一致,并保证整个系统的一致性。

  2. Raft算法:一种相对易于理解的分布式一致性算法,它将一致性问题的复杂性分解为若干个相对独立的子问题。Raft通过选举和日志复制的方式确保数据的一致性。

  3. ZAB(ZooKeeper Atomic Broadcast)算法:是ZooKeeper中使用的原子广播协议,用于实现分布式系统中的状态同步。ZAB协议包括恢复模式和广播模式,确保ZooKeeper集群中的各个节点能够保持数据的一致性。

此外,还有其他分布式一致性算法,如Gossip协议等,这些算法在不同的分布式系统场景中有各自的应用和优势。

在选择分布式一致性算法时,需要考虑系统的规模、节点的数量、通信开销、数据一致性要求以及容错性等因素。不同的算法可能适用于不同的场景,因此需要根据具体情况进行选择和调整。

文章转载自:Hello-Brand 

原文链接:https://www.cnblogs.com/wzh2010/p/18031245

体验地址:引迈 - JNPF快速开发平台_低代码开发平台_零代码开发平台_流程设计器_表单引擎_工作流引擎_软件架构

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

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

相关文章

【安全产品】基于HFish的MySQL蜜罐溯源实验记录

MySQL蜜罐对攻击者机器任意文件读取 用HFish在3306端口部署MySQL蜜罐 配置读取文件路径 攻击者的mysql客户端版本为5.7(要求低于8.0) 之后用命令行直连 mysql -h 124.222.136.33 -P 3306 -u root -p 可以看到成功连上蜜罐的3306服务&#xff0c;但进行查询后会直接lost con…

解决CLion调试时无法显示变量值的问题

1 问题描述 使用CLion的时候&#xff0c;调试时无法显示变量的值&#xff0c;例如&#xff1a; 图来自StackOverflow。 2 解决办法 可以尝试切换调试器解决&#xff0c;在Linux下&#xff0c;CLion支持GDB和LLDB&#xff0c;如果GDB不行&#xff0c;可以切换到LLDB。 切换方…

定积分求解过程是否变限问题 以及当换元时注意事项

目录 定积分求解过程是否变限问题 文字理解&#xff1a; 实例理解&#xff1a; 易错点和易混点&#xff1a; 1&#xff1a;定积分中的换元指什么&#xff1f; 2&#xff1a; 不定积分中第一类换元法和第二类换元法的本质和区别 3&#xff1a; df(x) ----> df(x)这…

001 仿muduo库实现高性能服务器组件_项目简介

​&#x1f308;个人主页&#xff1a;Fan_558 &#x1f525; 系列专栏&#xff1a;仿muduo &#x1f339;关注我&#x1f4aa;&#x1f3fb;带你学更多知识 文章目录 一、项目简介二、所需知识储备三、什么是muduo四、Reactor模式单Reactor单线程&#xff1a;单I/O多路复⽤业务…

车载电子电器架构 —— 应用软件开发(下)

车载电子电器架构 —— 应用软件开发(下) 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证…

美军配备人工智能武器的机器狗引发伦理争议

近日&#xff0c;美国海军陆战队特种作战司令部&#xff08;MARSOC&#xff09;的一项测试引发了全球关注&#xff1a;他们正在评估一种由“幽灵机器人”公司研发的最新型机器狗&#xff0c;并考虑为其配备“玛瑙工业”公司提供的武器系统。这一消息犹如在平静的湖面投下一颗石…

Star-CCM+中滞环的实现—场平均监视

前言 前文有介绍过通过更新事件来实现滞环,但是更新事件的方法比较繁琐,应用起来比较困难,本文将介绍一种简单的方法来实现滞环功能。即通过场平均监视来实现,具体方法如下: 一 创建场平均监视 首先在检测量下创建“场平均监视”,具体操作步骤如下图所示: 二 创建质量…

看这两位东北圣女美吗?如何描写美女的大长腿?

看这两位东北圣女美吗&#xff1f;如何描写美女的大长腿&#xff1f; 最近署名为懂球娘娘的一篇描写东北圣女的文章火了&#xff0c;文中描述了海棠朵朵与辛芷蕾这两位娇媚动人的角色。其美艳动人的形象和魅力四溢的描写让人为之倾倒。 这种通过文字展现人物魅力的能力让人佩服…

中间件-------RabbitMQ

同步和异步 异步调用 MQ MQ优势&#xff1a;①服务解耦 ②异步调用 ③流量削峰 结构 消息模型 RabbitMQ入门案例&#xff0c;实现消息发送和消息接收 生产者&#xff1a; public class PublisherTest {Testpublic void testSendMessage() throws IOException, TimeoutExce…

【Visual Studio】没法进断点

文章目录 先看看文心一言给的回答 开发过程中&#xff0c;没法进断点的情况还是很少的&#xff08;指的是一直进不去的情况&#xff0c;热重载导致的都可以通过重启ide解决&#xff09;&#xff0c;但还是有极少数情况下会出现。 先看看文心一言给的回答 如果Visual Studio无…

2024年NGFW防火墙安全基准-防火墙安全功效竞争性评估实验室总结报告

Check Point 委托 Miercom 对 Check Point 下一代防火墙 (NGFW) 开展竞争性安全有效性测试&#xff0c; 选择的竞品分别来自 Cisco、Fortinet 和 Palo Alto Networks。对 Zscaler 的测试涉及他们的 SWG&#xff08;安全网关&#xff09;。测试内容包括验证防病毒、反恶意软件、…

文本处理工具grep及sed

文章目录 一、grep文本处理工具二、sed文本处理工具基本用法sed脚本格式搜索替代 一、grep文本处理工具 选项含义-color对匹配到的文本着色显示-m 次数匹配到规定的次数后停止-v显示不被命令匹配到的行,即取反-i忽略字符大小写-n显示匹配的行号-c统计匹配的行数-o仅显示匹配到…

乡村振兴的乡村文化传承与活化:活化乡村传统文化,传承乡村文化基因,打造具有文化魅力的美丽乡村

目录 一、引言 二、乡村文化的独特价值与现状 三、活化乡村传统文化的策略 1、挖掘乡村文化资源 2、创新文化表达方式 3、加强文化产业发展 四、传承乡村文化基因的途径 1、加强文化教育 2、培育文化人才 3、弘扬文化精神 五、打造具有文化魅力的美丽乡村 1、规划乡…

输入输出(1)——C++的输入输出概述

目录 一、C的输入输出 (一) C的输入输出 (二&#xff09;C语言的scanf和printf 二、C的输入输出流 (一) iostream类库中有关的类 (二&#xff09; iostream.h头文件的流对象和重载运算符 一、C的输入输出 (一) C的输入输出 之前用到的输入输出&#xff0c;都是以终端…

最近5星好评的华为的书《常变与长青》

常变与长青 (豆瓣) 作者简介 郭平&#xff0c;1988年加入华为&#xff0c;历任产品开发部项目经理、供应链总经理、总裁办主任、管理工程部总裁、企业发展部总裁、终端公司董事长兼总裁、公司轮值CEO、财经委员会主任、公司副董事长、轮值董事长等职务&#xff0c;现任公…

Science 基于尖峰时序编码的模拟神经触觉系统,可实现动态对象分类

快速处理和有效利用手与物体交互过程中产生的动态触觉信号&#xff08;例如触摸和抓握&#xff09;对于触觉探索和灵巧的物体操作至关重要。将电子皮肤&#xff08;e-skins&#xff09;推进到模仿自然触觉的水平&#xff0c;是恢复截肢者和瘫痪患者丧失的功能的可行解决方案&am…

IDE上传本地仓库到GitHub

IDE上传本地仓库到GitHub 1、选择远程仓库平台2、下载安装Git3、IDE集成Git4、本地项目上传GitHub 1、选择远程仓库平台 1.1、注册远程仓库平台 常见的远程仓库托管平台有&#xff1a; 1&#xff09;GitHub 域名&#xff1a;https://github.com 介绍&#xff1a;GitHub是全球最…

CAD二次开发(4)-编辑图形

工具类&#xff1a;EditEntityTool.cs using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.Geometry; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Th…

等保2.0看这一篇就够了

一、等级保护介绍 1.1什么是等级保护 网络安全等级保护是指对国家重要信息、法人和其他组织及公民的专有信息以及信息和存储、传输、处理这些信息的信息系统分等级实行安全保护&#xff0c;对信息系统中使用的信息安全产品实行按等级管理&#xff0c;对信息系统中发生的信息安…