Paxos vs Raft

Paxos

Paxos总共有三个角色
1:提议者(Proposers)
2:接受者(Acceptors)
3:学习者(Learns)
一致性的目标是一组参与者在每次商议中对一个值形成共同的共识。
从Propsers提交值给一组Acceptors开始就开启一次一致性商议,Acceptors在接受某次提案的值,并且超过某次阀值后,这个值就会在网络中传播。
为了让Paxos协议能正常工作,第一个约束是:
Acceptors必须接受它收到的第一个提案的值。

这会导致一个问题,考虑一下这个情况,多个Proposers发送提案的值,多个Acceptors接收到多个值。因为Acceptors只接收第一个收到的值,所以形成不了
大多数结果。Paxos给每次的提案附加唯一的标记来允许Acceptors同时接收到多个提案。

对每次提案附加一个唯一标记,某次提案过程中,如果大多数Acceptors接受提案的值,这个值就叫做chosen value。可以通过多个提案,但是必须保证
多个提案对于同一个值有相同的值。这样就引出第二个约束:
如果已经选择了提案的值 V,每次更高的提案都必须选择值 V。
网络通讯异步进行,所以会存在某些Acceptors未收到chosen value,但是这个并不会违反约束1和约束2.

Propsers在发送消息给acceptors时使用如下几个约束。这个过程叫做prepare request,包含俩个要求。

1.承诺不接受提案标号小于n的提案(n是新的提案标号)。
2.响应acceptor已接受,标号小于n且标号值最大的提案。

根据Lamport的论文
如果Proposers收到大多数的acceptors的响应,那么它就可以提出编号是n,值是v的提案,值v是响应中编号最高的提案的值,如果响应者报告没有提案,宣布的值可以是任何被proposer选择的值。

Proposers然后发送一个accept请求,然后由Acceptor确认。Proposer然后发送一个提交消息给Acceptors,Acceptors可以忽略(不影响安全性)或者表示值已经提交成功。
一旦Acceptors提交的值超过了某个阀值,那么共识过程就结束了,这个值可以在外部使用。

Paxos的复杂性在于它只要大多数节点同意这个值时就可以接受这个值,其他节点可以忽略或者抵制提议的值。以前的协议需要所有的节点达成一致,一旦某个节点失败,协议过程就会被阻塞。

因为每次提案的标号都唯一,所以Paxos能安全选择一个值。必须要注意一点,Acceptor仅需要记录它已经接受的最高提案标号。
相对而说,Proposer能放弃提案,只要它不会发起有相同标号的提案。

Proposer和Acceptor的职责划分如下:
Proposer
1.在prepare request的阶段中,发起编号为n的提案给acceptor,等待大多数acceptor的响应。
2.如果大多数Acceptor同意这个提案,他们会回复同意的值。如果大多数拒绝这个提案,放弃或者重新开始这个过程。
3.如果大多数Acceptor同意提案,Proposer然后发送一个确认消息(包含提案标号n和值)。
4.如果大多数Acceptor收到确认消息,这轮商议就结束了。

Acceptor
1.接收编号为n的提案X,比较X的编号和已经同意的最高提案编号。
2.如果提案X的编号n比较高,接受它,如果n比较低,拒绝它。
3.如果值和先前接受的提案值一样或者它的提案编号高于同意的提案,接受后期的确认消息。

Proposals可以同时发起多个提案,但是需要遵循单个提案的算法。

最后,Learners发现大多数Acceptors已经接受的提案。当然,一个Learner也可以把发现的提案值广播给其他的Learners。
同样也可以这个实现这个过程,Acceptor同志对应的Learners或者Acceptros告诉一组不同的Learners,然后由Learners通知其他的Learners。

形式上来说,Paxos在每次过程中都会区分出来leader(Proposer),Acceptors能确认那个proposer是它的leader,这样就可以在集群选举leader
的过程中使用Paxos。使用Paxos进行选举可能会出现俩个Proposer竞争leader位置的情形,但是,这个情况应该不会持续太久。

Raft

Raft在保证容错和性能的前提下构建了一个更容易理解的Paxos版本。由于Paxos太过于复杂,所以不适合使用在基础平台。Raft和Paxos类似,所以进行比较之前
需要简单说明一下Raft为什么比Paxos简单。

Raft使用leader和follower模型,并且假设集群只有一个leader。leader管理着参与节点的日志复制功能,一旦leader断开,参与者就会立即替代leader。

在算法开始前,leader就已经被选好,为了给leader选举过程一些上下文信息,leader在一致性中扮演着特定的角色,并且在每个特定的算法中都不同。比如,在Nakamoto Proof of work中,
在每轮leader选举过程中使用lottery,每轮选举大概10分钟。Practical Byzantine Fault Tolerance(PBFT)中,leader选举使用随机方式。

在Raft中,由candidate节点开始一个初始过程来选举leader。如果出现选举超时(election timeout),此时candidates未收到任何信息,candidates就会增加自己的
term-counter,然后把票投给自己,然后广播这个结果给其他节点。如果其他的candidates的值比当前的candidates的大,当前的candidate就变成了follower。
这个规则持续影响到其他candidate,直到某个candidate得到大多数的投票。

leader控制节点之间的日志复制,并且发送客户端请求到它的follower上。如果大多数followers确认了复制,那么请求就可以提交。Followers同样把提交的数据给本地的机器。

Raft的容错性实现,新的leader强制自己followers复制自己的日志。任何没有同意的项都应该被删除,这样就可以保证日志一致性。

leader的日志需要比follower的日志新,如果某个candidate的日志比部分follower的旧,那么这个candidate就会被拒绝。

总的来说,Raft把一致性分成三个单独的子问题:
1.leader选举
2.日志复制
3.安全

原文地址:https://www.cnblogs.com/shuiyonglewodezzzzz/p/11636858.html

时间: 2024-10-24 23:53:45

Paxos vs Raft的相关文章

分布式理论系列(二)2PC 到 3PC 到 Paxos 到 Raft 到 Zab

分布式理论系列(二)2PC 到 3PC 到 Paxos 到 Raft 到 Zab 本文介绍一致性实现的几种方案: 2PC 到 3PC 到 Paxos 到 Raft 到 Zab 两类一致性(操作原子性与副本一致性) 2PC 3PC 协议用于保证属于多个数据分片上的操作的原子性.这些数据分片可能分布在不同的服务器上,2PC 协议保证多台服务器上的操作要么全部成功,要么全部失败. Paxos Raft Zab 协议用于保证同一个数据分片的多个副本之间的数据一致性.当这些副本分布到不同的数据中心时,这个

搞懂分布式技术2:分布式一致性协议与Paxos,Raft算法

搞懂分布式技术2:分布式一致性协议与Paxos,Raft算法 2PC 由于BASE理论需要在一致性和可用性方面做出权衡,因此涌现了很多关于一致性的算法和协议.其中比较著名的有二阶提交协议(2 Phase Commitment Protocol),三阶提交协议(3 Phase Commitment Protocol)和Paxos算法. 本文要介绍的2PC协议,分为两个阶段提交一个事务.并通过协调者和各个参与者的配合,实现分布式一致性. 两个阶段事务提交协议,由协调者和参与者共同完成. 角色 XA概

TIDB 架构及分布式协议Paxos和Raft对比

近来newsql大热,尤以TIDB最火,pingcap不断打磨TiDB,现如今版本已经迭代到3.0,产品已经基本趋于成熟.对于TiDB,整体架构图如下图所示是由四个模块组成,TiDB Server,PD Server,TiKV Server,TiSpark. TiDB Server负责接受SQL请求,处理SQL的相关逻辑,并通过PD找到存储计算所需数据的TiKV地址,与TiKV交互获取数据,最终返回结果.TiDB Server是无状态的,其本身并不存储数据,只负责计算,可以无限水平扩展,可以通过

2PC,3PC,Paxos,Raft,ISR

本文主要讲述2PC及3PC,以及Paxos以及Raft协议. 两类一致性(操作原子性与副本一致性) 2PC协议用于保证属于多个数据分片上的操作的原子性.这些数据分片可能分布在不同的服务器上,2PC协议保证多台服务器上的操作要么全部成功,要么全部失败. Paxos协议用于保证同一个数据分片的多个副本之间的数据一致性.当这些副本分布到不同的数据中心时,这个需求尤其强烈. 一.2PC(阻塞.数据不一致问题.单点问题) Two-Phase Commit,两阶段提交 1.阶段一:提交事务请求(投票阶段)

Raft算法国际论文全翻译

最近在开发强一致性的分布式算法,因此需要深入理解下Raft算法,这里对Raft论文进行了翻译,留以备用 - Sunface. 英文版论文:https://ramcloud.atlassian.net/wiki/download/attachments/6586375/raft.pdf Raft 是一种通过日志复制来实现的一致性算法,提供了和(多重)Paxos 算法相同的功能和性能,但是它的算法结构和 Paxos 是不同的,因此Raft 算法更容易理解和应用.Raft 有几个关键模块:领导人选举.

分布式系统理论进阶 - Raft、Zab

引言 <分布式系统理论进阶 - Paxos>介绍了一致性协议Paxos,今天我们来学习另外两个常见的一致性协议——Raft和Zab.通过与Paxos对比,了解Raft和Zab的核心思想.加深对一致性协议的认识. Raft Paxos偏向于理论.对如何应用到工程实践提及较少.理解的难度加上现实的骨感,在生产环境中基于Paxos实现一个正确的分布式系统非常难[1]: There are significant gaps between the description of the Paxos al

一致性问题和Raft一致性算法——一致性问题是无法彻底解决的,可以说一个分布式系统可靠性达到99.99…%,但不能说它达到了100%

一致性问题 一致性算法是用来解决一致性问题的,那么什么是一致性问题呢? 在分布式系统中,一致性问题(consensus problem)是指对于一组服务器,给定一组操作,我们需要一个协议使得最后它们的结果达成一致. 更详细的解释就是,当其中某个服务器收到客户端的一组指令时,它必须与其它服务器交流以保证所有的服务器都是以同样的顺序收到同样的指令,这样的话所有的 服务器会产生一致的结果,看起来就像是一台机器一样. 实际生产中一致性算法需要具备以下属性: safety:即不管怎样都不会返回错误的结果

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

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

基于Raft构建弹性伸缩的存储系统的一些实践

基于Raft构建弹性伸缩的存储系统的一些实践 原创 2016-07-18 黄东旭 聊聊架构 最近几年来,越来越多的文章介绍了 Raft 或者 Paxos 这样的分布式一致性算法,但主要集中在算法细节和日志同步方面的应用,但是呢,这些算法的潜力并不仅限于此,基于这样的分布式一致性算法构建一个完整的可弹性伸缩的高可用的大规模存储系统,是一个很新的课题,我结合我们这一年多以来在 TiKV 这样一个大规模分布式数据库的实践上谈谈其中的一些设计和挑战. 本次分享的主要内容是如何使用 Raft 来构建一个可