Paxos vs Raft

我们是否已就分布式共识达成共识?

分布式共识是构建高容错、强一致性系统的基石。在众多算法中,Paxos 和 Raft 主导了当今的生产系统。但它们究竟有何不同?

基于 Heidi Howard 与 Richard Mortier 的研究论文 (arXiv:2004.05074v2)

向下滚动,深入解析 ↓

🏷️ 分类: 技术 科学
🔖 标签: #分布式系统 #共识算法 #Paxos #Raft #计算机科学 #算法比较

01. 挑战:在不可靠中建立可靠

⚙️

状态机复制 (SMR)

将一组不可靠的主机组合成一个单一、可靠的服务。核心要求是所有主机以相同顺序执行相同操作

🤝

分布式共识

SMR 的实现基础。确保所有节点对操作的顺序达成一致,即使在网络延迟或节点故障的情况下也能保证安全。

强一致性

系统表现得像单一实体,提供可预测的行为(如线性一致性),极大地简化了分布式系统的编程模型。

02. 双雄对决

Paxos

“经典的复杂”

  • 分布式共识的代名词 (1998)。
  • 以难以理解和实现正确而闻名。
  • 极其通用,常被视为一个算法家族(本文讨论 Multi-Paxos)。
  • 在大型系统中久经考验 (如 Google Chubby)。
VS

Raft

“现代的简洁”

  • 为寻求可理解性而生 (2014)。
  • 强调清晰的表述和工程实用性。
  • 优先考虑简单性(例如,日志按顺序提交)。
  • 迅速普及,应用广泛 (如 etcd, Consul)。

Raft 声称与 Paxos 效率相当,同时更易于理解。但论文作者通过分析发现,两者在核心机制上非常相似,都采用了基于领导者(Leader-based)的方法。

03. 共同基础:服务器状态模型

无论是 Paxos 还是 Raft,服务器在任何时刻都处于以下三种状态之一。两者都使用“任期(Term)”这一单调递增的逻辑时钟来检测过时的信息。点击状态节点查看详情。

😴
Follower
(跟随者)
🗳️
Candidate
(候选人)
👑
Leader
(领导者)

Follower (跟随者)

被动状态。只负责响应来自 Leader 和 Candidate 的 RPC 请求。如果选举超时未收到心跳,则转换为 Candidate。

04. 核心差异:领导者选举

研究发现,Paxos 和 Raft 的主要区别在于它们如何选举新的领导者,以及如何确保新领导者拥有所有已提交的日志条目(即保证安全性)。

Raft:资格预审机制

“只有最新的才能领导”

1

Candidate 请求投票 (RequestVote)。

2

Follower 进行“日志新鲜度检查”

关键约束:

如果 Candidate 的日志不如 Follower 新,则拒绝投票

3

获得多数票的 Candidate 成为 Leader。

结果:

新 Leader 保证拥有所有已提交的日志。选举过程无需传输日志条目,非常轻量。

Paxos:事后同步机制

“先当领导,再补课”

1

Candidate 请求投票 (RequestVote)。

2

Follower 通常都会投票(只要任期号更大)。

关键步骤:

Follower 在投票响应中,附带自己已有的日志条目

3

Candidate 获得多数票后,必须先整合收到的日志,确保自己是最新的,然后才成为 Leader。

结果:

任何服务器都可以成为 Leader(更灵活)。但选举过程需要交换日志条目,相对较重。

05. 技术细节对比总结

特性/挑战 Paxos Raft
如何确保每个任期(Term)最多一个领导者? 通过划分任期号(例如 t mod n = s)。每个任期通常只有一个预定的 Candidate。 允许多个 Candidate 同时竞选。但每个 Follower 在一个任期内只能投一票,确保只有一人获得多数票。
如何确保新领导者的日志包含所有已提交条目? 投票响应包含日志条目。Candidate 收集并整合来自多数派的日志(选择最高任期号的条目)。 引入“日志新鲜度检查”。只有日志足够新的 Candidate 才能获得投票并当选。
如何安全地提交之前任期的日志条目? 新 Leader 将之前任期的条目用自己的新任期号重新写入日志,然后按正常流程复制和提交。 新 Leader 复制条目时保留原始任期号。必须等到当前任期的一个新条目被提交后,才能认为旧条目安全提交。

06. 评估与结论

🤔 可理解性

Raft 的一个关键优势是日志条目的任期号永不改变,这比 Paxos 中条目可能被新 Leader 用新任期号覆盖(虽然安全)更直观。但 Raft 的提交规则(需要当前任期条目才能提交旧条目)也增加了微妙的复杂性。

论文结论:Raft 的方法比 Paxos 稍微容易理解一些,但差异并不显著。Raft 的可理解性很大程度上来自于论文清晰的表述和实用的抽象。

⚡ 效率

Raft 可能会因为“选票分裂”导致选举时间更长(通过随机超时缓解)。但 Paxos 在选举期间必须传输日志数据。

论文结论:Raft 的领导者选举阶段比 Paxos 更轻量。考虑到其简单性,Raft 的方法出人意料地高效,因为它不需要在选举期间交换日志条目。

最终总结

Paxos 和 Raft 采用非常相似的方法来实现分布式共识。通过使用 Raft 的术语和抽象来描述简化的 Paxos,研究表明两者仅在领导者选举方面有所不同。两者在可理解性上没有显著差异,而 Raft 提供了一种更轻量级的选举机制。