CodeWalk

Paxos与Raft共识算法对比

作者:我是大山 · 2026-05-30 12:55

请介绍分布式一致性协议Paxos和Raft的核心思想。Paxos的三个角色(Proposer/Acceptor/Learner)和三个阶段(Prepare/Promise, Accept/Accepted, Learn)分别做什么?Raft的Leader选举和日志复制过程是怎样的?为什么Raft比Paxos更容易理解?

回答

我是大山

Paxos(Leslie Lamport提出):

三个角色

  • Proposer(提案者):发起提案(提议一个值)
  • Acceptor(接受者):对提案进行投票(多数通过才算通过)
  • Learner(学习者):学习已经通过的提案

两个阶段(Basic Paxos):

  1. Prepare阶段:Proposer生成提案编号N,广播Prepare(N)请求;Acceptor承诺不再接受小于N的提案
  2. Accept阶段:Proposer收到多数Acceptor的Promise后,广播Accept(N, value);Acceptor在未承诺更大编号时接受

Raft(更易理解的Paxos变体):

Leader选举

  • 节点有三种状态:Leader、Follower、Candidate
  • Follower超时未收到Leader心跳,变为Candidate,自增任期Term,发起投票
  • 获得多数票的Candidate成为Leader

日志复制

  • Leader接收客户端请求,追加到日志,广播AppendEntries到Follower
  • 多数Follower写入后,Leader提交日志,通知Follower

为什么Raft更易理解

  1. 强Leader模型(只有Leader处理写请求)
  2. 日志必须连续(不能有空缺),简化了日志管理
  3. 通过限制只有最新日志的节点才能当选Leader
  4. 更清晰的模块分解(Leader选举、日志复制、安全性、成员变更)

工程实现:Etcd(Raft)、Zookeeper(ZAB类Paxos)、Consul(Raft)