当前位置:首页 > > 架构师社区
[导读]一致性就是数据保持一致,在分布式系统中,可以理解为多个节点中数据的值是一致的。

来源:https://zhuanlan.zhihu.com/p/130332285

作者:无知影

为什么需要一致性

  1. 数据不能存在单个节点(主机)上,否则可能出现单点故障。

  2. 多个节点(主机)需要保证具有相同的数据。

  3. 一致性算法就是为了解决上面两个问题。

一致性算法的定义

一致性就是数据保持一致,在分布式系统中,可以理解为多个节点中数据的值是一致的。

一致性的分类

强一致性

保证系统改变提交以后立即改变集群的状态。

  • Paxos

  • Raft(muti-paxos)

  • ZAB(muti-paxos)

弱一致性

也叫最终一致性,系统不保证改变提交以后立即改变集群的状态,但是随着时间的推移最终状态是一致的。

  • DNS系统

  • Gossip协议

一致性算法实现举例

  • Google的Chubby分布式锁服务,采用了Paxos算法

  • etcd分布式键值数据库,采用了Raft算法

  • ZooKeeper分布式应用协调服务,Chubby的开源实现,采用ZAB算法

Paxos算法

概念介绍

  1. Proposal提案,即分布式系统的修改请求,可以表示为[提案编号N,提案内容value]

  2. Client用户,类似社会民众,负责提出建议

  3. Propser议员,类似基层人大代表,负责帮Client上交提案

  4. Acceptor投票者,类似全国人大代表,负责为提案投票,不同意比自己以前接收过的提案编号要小的提案,其他提案都同意,例如A以前给N号提案表决过,那么再收到小于等于N号的提案时就直接拒绝了

  5. Learner提案接受者,类似记录被通过提案的记录员,负责记录提案

Basic Paxos算法

步骤:

  1. Propser准备一个N号提案

  2. Propser询问Acceptor中的多数派是否接收过N号的提案,如果都没有进入下一步,否则本提案不被考虑

  3. Acceptor开始表决,Acceptor无条件同意从未接收过的N号提案,达到多数派同意后,进入下一步

  4. Learner记录提案

分布式一致性算法:Paxos、Raft、ZAB、Gossip
节点故障
  • 若Proposer故障,没关系,再从集群中选出Proposer即可

  • 若Acceptor故障,表决时能达到多数派也没问题

潜在问题-活锁

假设系统有多个Proposer,他们不断向Acceptor发出提案,还没等到上一个提案达到多数派下一个提案又来了,就会导致Acceptor放弃当前提案转向处理下一个提案,于是所有提案都别想通过了。

Multi Paxos算法

根据Basic Paxos的改进:整个系统只有一个Proposer,称之为Leader。

步骤:

  1. 若集群中没有Leader,则在集群中选出一个节点并声明它为第M任Leader。

  2. 集群的Acceptor只表决最新的Leader发出的最新的提案

  3. 其他步骤和Basic Paxos相同

分布式一致性算法:Paxos、Raft、ZAB、Gossip
算法优化

Multi Paxos角色过多,对于计算机集群而言,可以将Proposer、Acceptor和Learner三者身份集中在一个节点上,此时只需要从集群中选出Proposer,其他节点都是Acceptor和Learner,这就是接下来要讨论的Raft算法

Raft算法

Paxos算法不容易实现,Raft算法是对Paxos算法的简化和改进

概念介绍

  1. Leader总统节点,负责发出提案

  2. Follower追随者节点,负责同意Leader发出的提案

  3. Candidate候选人,负责争夺Leader

分布式一致性算法:Paxos、Raft、ZAB、Gossip

Raft算法将一致性问题分解为两个的子问题,Leader选举和状态复制

Leader选举

  1. 每个Follower都持有一个定时器

分布式一致性算法:Paxos、Raft、ZAB、Gossip
  1. 当定时器时间到了而集群中仍然没有Leader,Follower将声明自己是Candidate并参与Leader选举,同时将消息发给其他节点来争取他们的投票,若其他节点长时间没有响应Candidate将重新发送选举信息

分布式一致性算法:Paxos、Raft、ZAB、Gossip
  1. 集群中其他节点将给Candidate投票

分布式一致性算法:Paxos、Raft、ZAB、Gossip
  1. 获得多数派支持的Candidate将成为第M任Leader(M任是最新的任期)

分布式一致性算法:Paxos、Raft、ZAB、Gossip
  1. 在任期内的Leader会不断发送心跳给其他节点证明自己还活着,其他节点受到心跳以后就清空自己的计时器并回复Leader的心跳。这个机制保证其他节点不会在Leader任期内参加Leader选举。

分布式一致性算法:Paxos、Raft、ZAB、Gossip
分布式一致性算法:Paxos、Raft、ZAB、Gossip
  1. 当Leader节点出现故障而导致Leader失联,没有接收到心跳的Follower节点将准备成为Candidate进入下一轮Leader选举

  2. 若出现两个Candidate同时选举并获得了相同的票数,那么这两个Candidate将随机推迟一段时间后再向其他节点发出投票请求,这保证了再次发送投票请求以后不冲突

分布式一致性算法:Paxos、Raft、ZAB、Gossip

状态复制

  1. Leader负责接收来自Client的提案请求(红色提案表示未确认)

分布式一致性算法:Paxos、Raft、ZAB、Gossip
  1. 提案内容将包含在Leader发出的下一个心跳中

分布式一致性算法:Paxos、Raft、ZAB、Gossip
  1. Follower接收到心跳以后回复Leader的心跳

分布式一致性算法:Paxos、Raft、ZAB、Gossip
  1. Leader接收到多数派Follower的回复以后确认提案并写入自己的存储空间中并回复Client

分布式一致性算法:Paxos、Raft、ZAB、Gossip
  1. Leader通知Follower节点确认提案并写入自己的存储空间,随后所有的节点都拥有相同的数据

分布式一致性算法:Paxos、Raft、ZAB、Gossip
  1. 若集群中出现网络异常,导致集群被分割,将出现多个Leader

分布式一致性算法:Paxos、Raft、ZAB、Gossip
  1. 被分割出的非多数派集群将无法达到共识,即脑裂,如图中的A、B节点将无法确认提案

分布式一致性算法:Paxos、Raft、ZAB、Gossip
分布式一致性算法:Paxos、Raft、ZAB、Gossip
  1. 当集群再次连通时,将只听从最新任期Leader的指挥,旧Leader将退化为Follower,如图中B节点的Leader(任期1)需要听从D节点的Leader(任期2)的指挥,此时集群重新达到一致性状态

分布式一致性算法:Paxos、Raft、ZAB、Gossip

分布式一致性算法:Paxos、Raft、ZAB、Gossip

ZAB算法

ZAB也是对Multi Paxos算法的改进,大部分和raft相同,和raft算法的主要区别:

  1. 对于Leader的任期,raft叫做term,而ZAB叫做epoch

  2. 在状态复制的过程中,raft的心跳从Leader向Follower发送,而ZAB则相反。

Gossip算法

Gossip算法每个节点都是对等的,即没有角色之分。Gossip算法中的每个节点都会将数据改动告诉其他节点(类似传八卦)。有话说得好:"最多通过六个人你就能认识全世界任何一个陌生人",因此数据改动的消息很快就会传遍整个集群。

  1. 集群启动,如下图所示(这里设置集群有20个节点)

分布式一致性算法:Paxos、Raft、ZAB、Gossip
  1. 某节点收到数据改动,并将改动传播给其他4个节点,传播路径表示为较粗的4条线

分布式一致性算法:Paxos、Raft、ZAB、Gossip
分布式一致性算法:Paxos、Raft、ZAB、Gossip
  1. 收到数据改动的节点重复上面的过程直到所有的节点都被感染

特别推荐一个分享架构+算法的优质内容,还没关注的小伙伴,可以长按关注一下:

分布式一致性算法:Paxos、Raft、ZAB、Gossip

分布式一致性算法:Paxos、Raft、ZAB、Gossip

分布式一致性算法:Paxos、Raft、ZAB、Gossip

长按订阅更多精彩▼

分布式一致性算法:Paxos、Raft、ZAB、Gossip

如有收获,点个在看,诚挚感谢

免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读

逻辑分析、高效能运算核心、灵活自动化烧录、先进通讯协议

关键字: 嵌入式 自动化 RS-485 接口

覆盖 TI MCU、MPU 和无线连接解决方案的统一、生产就绪平台,消除迁移障碍,并缩短全球 Zephyr 开发者的上市时间 上海2026年10月14日 /美通社/ --...

关键字: RTOS 嵌入式 TI 开发者

在物联网终端、无线传感节点、便携采集设备与无人值守嵌入式控制系统中,电池续航是决定产品实用性与运维成本的核心指标。多数低功耗嵌入式设计过度依赖软件休眠、数字时钟裁剪等数字节能手段,却忽略了模拟电路长期静态漏电、有源器件偏...

关键字: 嵌入式 控制系统 低功耗

随着物联网设备向微型化、多频段、低成本、快迭代方向快速发展,嵌入式天线设计已成为硬件开发的核心瓶颈。传统板载天线、陶瓷天线、FPC天线方案,普遍存在设计周期长、PCB布局限制多、频段适配性差、量产一致性低等问题,极大拖慢...

关键字: 天线 物联网 嵌入式

随着汽车向电动化、智能化、网联化高速迭代,车载嵌入式系统的功能复杂度、控制精度与可靠性要求大幅提升。传统车用嵌入式系统多采用“纯数字MCU+外置模拟芯片”的分立架构,存在线路繁琐、信号损耗大、响应延迟高、故障率偏高等问题...

关键字: 嵌入式 汽车电子 模拟芯片

随着生活节奏不断加快,一次采购更多食材、提前规划家庭饮食,逐渐成为不少消费者的日常习惯。尤其对于追求高品质生活的家庭而言,冰箱不仅需要拥有充足的储存空间,更需要在长时间储存过程中尽可能保持食材原有的口感与状态。然而,传统...

关键字: 十字门冰箱 净化系统 嵌入式

触觉行业论坛(HIF)制定的规范为可编程触觉提供了通用框架;Vector Haptics API控制、实时音频转触觉及双通道驱动,则为产品团队提供了紧凑的集成路径

关键字: 可编程触觉 处理器 嵌入式

我一直对谷歌助手在我们说“好,谷歌”或“嘿,Siri”时立即开始录音的机制感到着迷。这种启发促使我探索如何将唤醒词检测技术应用于嵌入式设备。在这个项目中,我也意识到在树莓派等小型板载计算机(SBC)上运行时需要进行必要的...

关键字: 嵌入式 树莓派 计算机 INMP441

在万物互联的数字化浪潮中,物联网技术打破了传统设备的信息孤岛,而嵌入式视觉作为设备感知物理世界的核心载体,正依托物联网架构完成颠覆性变革。不同于传统机器视觉依赖云端处理、固定场景作业的局限,物联网驱动下的嵌入式视觉,实现...

关键字: 物联网 嵌入式 视觉
关闭