分布式一致性算法梳理

  分布式一致性算法主流方案:2PC、3PC、leader/follower、paxos

  一致性有两种场景:

  1、多份相同的数据,在一处修改,保证多份一致
  2、一个业务变更多份不同的数据,要保持一致,要成功都成功,要失败都失败

  产生不一致的原因:

  1、异常操作导致不成功
  2、网络分区
  3、应用故障

  两阶段提交(2PC)

  将事务的提交分为准备和提交两个阶段来达成一致性的算法,主要用于事务管理、分布式一致性,两阶段提交需要在更新发起者和参与者中间加一个协调者的角色。具体步骤如下:

  1、变更者发起变更申请后由协调者询问各参与者是否可以提交,等待所有参与者给予回应
  2、参与者执行事务操作到待提交指令的点(这个过程中记录undo、redo日志)
  3、参与者响应会否准备好提交的结果给协调者,并阻塞等待协调者下一步的指令
  4、协调者接受所有参与者的响应,如果有一个 超时未收到响应,则当回滚处理
  5、协调者向所有参与者发布提交或者回滚的指令
  6、参与者执行提交或者回滚,释放占用的锁等资源,并作出响应
  7、结束

  两阶段提交的不足:

  1、会阻塞,参与者在等待协调者时会阻塞,并且如果准备完成后,协调者宕机,则参与者一直阻塞
  2、不一致,协调者发出提交或者回滚命令时,参与者宕机,收不到消息,造成不一致(需人工处理)

  2PC的实现:XA规范,java领域JTA实现

  三阶段提交(3PC):增加预提交阶段和超市机制来解决2PC出现的问题,具体步骤:

  3PC存在的不足:在部分参与者在precommit失败,协调者宕机,等待超时后,precommit成功的参与者将提交,造成数据不一致,并且超时时间很难把控,因此3PC没有工业实现。

  leader/master方案,所有更新操作由leader发起,实现简单,大部分分布式一致性场景都采用这种方式,例如zookeeper。

  leader/master方案缺点:leader负载高、leader单点故障集群不可用(新leader选举期间)

  paxos算法

  角色:proposer(提议者,负责提议)、acceptor(接收者,负责投票)、learner(学习,不参与投票),一个节点既可以是proposer也可以是acceptor

  提案构成:提案编号(全局唯一自增,体现提案的先后顺序)、更新值

  写流程:

  1、准备阶段(投票阶段,提议者提出提案给接接收者,接收者如果同意该提案,则作出promise响应,并且承诺不再接受(accept)比当前提案编号更低的提案,
提议者收到过半数的响应,进入下一阶段,否则重新提案
  2、接受变更阶段(提交阶段),提议者向接收者发送accept消息,接收者比较accept中的提案编号,如果比自己当前已promise的提案编号小则回应NACK(把自己当前promise的提单号返回),否则接受accpet。

  同一提案,提议者1、提议者2先后被批准,正常场景演示

  接收者3与提议者2失联,接收者1与提议者1失联,异常场景演示

  读流程:

  1、接收客户端请求的节点广播向大家获取当前值,
  2、接收到过半数的相同值,则返回该值,如果与本地的值不一致则更新该值
  3、得不到半数一样的值则读取失败

  此外还有一种常用的分布式一致性算法实现:RAFT,原理参考http://thesecretlivesofdata.com/raft/

  

原文地址:https://www.cnblogs.com/hhhshct/p/11567365.html

时间: 2024-08-13 15:30:11

分布式一致性算法梳理的相关文章

分布式一致性算法:Raft 算法

Raft 算法是可以用来替代 Paxos 算法的分布式一致性算法,而且 raft 算法比 Paxos 算法更易懂且更容易实现.本文对 raft 论文进行翻译,希望能有助于读者更方便地理解 raft 的思想.如果对 Paxos 算法感兴趣,可以看我的另一篇文章:分布式系列文章--Paxos算法原理与推导 摘要Raft 是用来管理复制日志(replicated log)的一致性协议.它跟 multi-Paxos 作用相同,效率也相当,但是它的组织结构跟 Paxos 不同.这使得 Raft 比 Pax

分布式一致性算法——paxos

一.什么是paxos算法 Paxos 算法是分布式一致性算法用来解决一个分布式系统如何就某个值(决议)达成一致的问题. 人们在理解paxos算法是会遇到一些困境,那么接下来,我们带着以下几个问题来学习paxos算法: 1.paxos到底在解决什么问题? 2.paxos到底如何在分布式存储系统中应用? 3.paxos的核心思想是什么? 二.paxos解决了什么问题 分布式的一致性问题其实主要是指分布式系统中的数据一致性问题.所以,为了保证分布式系统的一致性,就要保证分布式系统中的数据是一致的. 在

Paxos分布式一致性算法简介和Apache ZooKeeper的概念映射

Paxos是一个基于消息传递的一致性算法,近几年被广泛应用于分布式计算中,Google的Chubby,Apache的Zookeeper都是基于它的理论来实现的,Paxos还被认为是到目前为止唯一的分布式一致性算法,其它的算法都是Paxos的改进或简化.Paxos只有在一个可信的计算环境中才能成立,这个环境是不会被入侵所破坏的. 由Leslie Lamport发明了Paxos算法,他目前供职于微软研究院.1998年在ACM Transactions on Computer Systems的<The

Raft 为什么是更易理解的分布式一致性算法

Raft 为什么是更易理解的分布式一致性算法 一致性问题可以算是分布式领域的一个圣殿级问题了,关于它的研究可以回溯到几十年前. 拜占庭将军问题 Leslie Lamport 在三十多年前发表的论文<拜占庭将军问题>(参考[1]). 拜占庭位于如今的土耳其的伊斯坦布尔,是东罗马帝国的首都.由于当时拜占庭罗马帝国国土辽阔,为了防御目的,因此每个军队都分隔很远,将军与将军之间只能靠信差传消息.在战争的时候,拜占庭军队内所有将军必需达成 一致的共识,决定是否有赢的机会才去攻打敌人的阵营.但是,在军队内

【转】Raft 为什么是更易理解的分布式一致性算法

编者按:这是看过的Raft算法博客中比较通俗的一篇了,讲解问题的角度比较新奇,图文并茂,值得一看.原文链接:Raft 为什么是更易理解的分布式一致性算法 一致性问题可以算是分布式领域的一个圣殿级问题了,关于它的研究可以回溯到几十年前. 拜占庭将军问题 Leslie Lamport 在三十多年前发表的论文<拜占庭将军问题>(参考[1]). 拜占庭位于如今的土耳其的伊斯坦布尔,是东罗马帝国的首都.由于当时拜占庭罗马帝国国土辽阔,为了防御目的,因此每个军队都分隔很远,将军与将军之间只能靠信差传消息.

分布式一致性算法2PC和3PC

为了解决分布式一致性问题,产生了不少经典的分布式一致性算法,本文将介绍其中的2PC和3PC.2PC即Two-Phase Commit,译为二阶段提交协议.3PC即Three-Phase Commit,译为三阶段提交协议.? 分布式系统和分布式一致性问题 ? 分布式系统,即运行在多台不同的网络计算机上的软硬件系统,并且仅通过消息传递来进行通信和协调. 分布式一致性问题,即相互独立的节点之间如何就一项决议达成一致的问题.? 2PC ? 2PC,二阶段提交协议,即将事务的提交过程分为两个阶段来进行处理

兄弟连区块链入门到精通教程区块链共识算法分布式一致性算法Raft

Paxos自1990年提出以后,相当长时间内几乎已成为分布式一致性算法的代名词.但因其难以理解和实现,目前知名实现仅有Chubby.Zookeeper.libpaxos几种,其中Zookeeper使用的ZAB对Paxos做了大量改进.为此,2013年斯坦福的Diego Ongaro.John Ousterhout,提出了新的更易理解和实现的一致性算法,即Raft. Raft和Paxos均只要保证n/2+1节点正常,即可服务.相比Paxos,其优势即为易于理解和实现.Raf将算法分解为:选择领导者

分布式一致性算法--Paxos

Paxos算法是莱斯利·兰伯特(Leslie Lamport)1990年提出的一种基于消息传递的一致性算法.Paxos算法解决的问题是一个分布式系统如何就某个值(决议)达成一致.在工程实践意义上来说,就是可以通过Paxos实现多副本一致性,分布式锁,名字管理,序列号分配等.比如,在一个分布式数据库系统中,如果各节点的初始状态一致,每个节点执行相同的操作序列,那么他们最后能得到一个一致的状态.为保证每个节点执行相同的命令序列,需要在每一条指令上执行一个“一致性算法”以保证每个节点看到的指令一致.本

【转载】Raft 为什么是更易理解的分布式一致性算法

一致性问题可以算是分布式领域的一个圣殿级问题了,关于它的研究可以回溯到几十年前. 拜占庭将军问题 Leslie Lamport 在三十多年前发表的论文<拜占庭将军问题>(参考[1]). 拜占庭位于如今的土耳其的伊斯坦布尔,是东罗马帝国的首都.由于当时拜占庭罗马帝国国土辽阔,为了防御目的,因此每个军队都分隔很远,将军与将军之间只能靠信差传消息.在战争的时候,拜占庭军队内所有将军必需达成 一致的共识,决定是否有赢的机会才去攻打敌人的阵营.但是,在军队内有可能存有叛徒和敌军的间谍,左右将军们的决定又