Paxos与Raft比较

本文深入探讨了Paxos和Raft两种分布式一致性算法。Paxos算法通过准备和接受阶段确保节点间达成共识,而Raft协议通过Follower、Candidate和Leader的角色转换实现领导者选举。在Paxos中,可能存在多次执行才能达成一致的问题,增加了延迟。相比之下,Raft通过选举策略减少了延迟,提高了系统的可理解性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Paxos:

Paxos算法是一种基于消息传递且具有高度容错特性的一致性算法。用于解决在多个节点间确定一个值。Paxos算法实现多个节点间达成共识的过程分为两个阶段:准备阶段、接受阶段

准备阶段:

Acceptor的响应规则总结:

  • 如果Acceptor之前没有响应任何提案,返回一个尚无提案的响应;如果准备请求的提案编号,小于等于Acceptor已经响应过的准备请求的提案编号,那么将承诺不响应这个准备请求
  • 如果接受请求的提案编号,小于Acceptor已经响应的准备请求的提案编号,那么将承诺不通过这个提案
  • 如果Acceptor之前有通过提案,那么Acceptor将承诺,会在准备请求的响应中,包含已经通过的最大编号的提案信息。

接受阶段:

 

客户端发送"接受请求"的条件:

client获得大多数(超过半数)节点的准备阶段的响应(只要有响应即可,无论这个响应是否是"尚无提案"的响应)
发送的提案的值,如果尚无提案,就是自身的提案值,如果有过提案,提案值是准备阶段的响应返回的最大提案编号的值。
 

存在问题:

客户端在获得大多数的准备阶段的响应后,才发送"接受请求",存在这样一种情况:有5个节点,3个客户端,3个客户端收到的响应分别为1, 2, 2个,这样每个客户端都无法在发送"接受请求"。这是只能多次执行Basic Paxos实例,来实现一系列值的共识。但是客户端和接受者之间通讯是一个rpc远程调用,多次的执行Basic Paxos实例,就会导致往返消息多、耗性能、延迟大,延迟一直是分布式的痛点,是需要我们在开发分布式系统中认真考虑的。

Raft:

根据 Raft 协议,一个应用 Raft 协议的集群在刚启动时,所有节点的状态都是 Follower。由于没有 Leader,Followers 无法与 Leader 保持心跳(Heart Beat),因此,Followers 会认为 Leader 已经下线,进而转为 Candidate 状态。然后,Candidate 将向集群中其它节点请求投票,同意自己升级为 Leader。如果 Candidate 收到超过半数节点的投票(N/2 + 1),它将获胜成为 Leader。

第一阶段:所有节点都是 Follower。

上面提到,一个应用 Raft 协议的集群在刚启动(或 Leader 宕机)时,所有节点的状态都是 Follower,初始 Term(任期)为 0。同时启动选举定时器,每个节点的选举定时器超时时间都在 100~500 毫秒之间且并不一致(避免同时发起选举)。

所有节点都是 Follower

第二阶段:Follower 转为 Candidate 并发起投票。

没有 Leader,Followers 无法与 Leader 保持心跳(Heart Beat),节点启动后在一个选举定时器周期内未收到心跳和投票请求,则状态转为候选者 Candidate 状态,且 Term 自增,并向集群中所有节点发送投票请求并且重置选举定时器。

注意,由于每个节点的选举定时器超时时间都在 100-500 毫秒之间,且彼此不一样,以避免所有 Follower 同时转为 Candidate 并同时发起投票请求。换言之,最先转为 Candidate 并发起投票请求的节点将具有成为 Leader 的“先发优势”。

Follower 转为 Candidate 并发起投票

第三阶段:投票策略。

节点收到投票请求后会根据以下情况决定是否接受投票请求(每个 follower 刚成为 Candidate 的时候会将票投给自己):

请求节点的 Term 大于自己的 Term,且自己尚未投票给其它节点,则接受请求,把票投给它;

请求节点的 Term 小于自己的 Term,且自己尚未投票,则拒绝请求,将票投给自己。

投票策略

第四阶段:Candidate 转为 Leader。

一轮选举过后,正常情况下,会有一个 Candidate 收到超过半数节点(N/2 + 1)的投票,它将胜出并升级为 Leader。然后定时发送心跳给其它的节点,其它节点会转为 Follower 并与 Leader 保持同步,到此,本轮选举结束。

注意:有可能一轮选举中,没有 Candidate 收到超过半数节点投票,那么将进行下一轮选举。

Candidate 转为 Leader

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值