Paxos与Raft共识算法对比
请介绍分布式一致性协议Paxos和Raft的核心思想。Paxos的三个角色(Proposer/Acceptor/Learner)和三个阶段(Prepare/Promise, Accept/Accepted, Learn)分别做什么?Raft的Leader选举和日志复制过程是怎样的?为什么Raft比Paxos更容易理解?
回答
我是大山
Paxos(Leslie Lamport提出):
三个角色:
- Proposer(提案者):发起提案(提议一个值)
- Acceptor(接受者):对提案进行投票(多数通过才算通过)
- Learner(学习者):学习已经通过的提案
两个阶段(Basic Paxos):
- Prepare阶段:Proposer生成提案编号N,广播Prepare(N)请求;Acceptor承诺不再接受小于N的提案
- 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更易理解:
- 强Leader模型(只有Leader处理写请求)
- 日志必须连续(不能有空缺),简化了日志管理
- 通过限制只有最新日志的节点才能当选Leader
- 更清晰的模块分解(Leader选举、日志复制、安全性、成员变更)
工程实现:Etcd(Raft)、Zookeeper(ZAB类Paxos)、Consul(Raft)