直接回答:两者解决同一问题(异步网络多数派共识),安全性等价,差异在结构与可理解性:Paxos 是“单条日志共识”的对等协议——每个日志槽位独立跑两阶段(prepare/accept),没有强 leader 概念,活 leader 只是优化;Raft 把共识分解为选主、日志复制、安全性三个子问题,强 leader 串行化一切。Multi-Paxos 要落地成连续日志复制,论文本身留白的地方全要工程补完。

展开解析:Paxos 基本流程回顾:proposer 先发 prepare(n) 争取编号 n 的提案权,多数派承诺不再接受更小编号;若有已接受值则必须提议其中编号最大的那个(这是安全性核心),然后 accept 阶段多数派接受即选定。难点一:活锁——多个 proposer 交替抢占编号互相打断,工程上靠选稳定 leader(但这已经向 Raft 靠拢);难点二:Multi-Paxos 的日志连续性——单条 Paxos 共识一个值,连续日志要处理空洞(某槽位未选定而后面的已选定,状态机不能跳序应用),补洞策略(并行跑、no-op 填充)论文不管;难点三:成员变更、日志压缩、快照全无标准答案,各实现(ZooKeeper 的 ZAB、etcd raft、自研)方案迥异。Raft 的取舍:强 leader 让日志连续性天然成立(leader 顺序追加)、成员变更有论文级方案(joint consensus)、可读性带来工程正确性——分布式系统的 bug 多在“实现者误解算法”,可理解性就是可靠性。选型现实:新系统默认 Raft 系(etcd、Consul、TiKV),Paxos 系活跃在老牌系统(Chubby、Spanner 的 Paxos)与学术研究。面试加分:知道 Fast Paxos(客户端直发 acceptor 省一跳)与它的冲突恢复代价。

追问方向:为什么 Paxos 的 accept 阶段必须提议“编号最大的已接受值”?ZAB 与 Raft 的差异点?

(约 500 字)