
共识
|
253
提议者
接受者
图
14-6
:
Paxos
故障场景:提议者故障之后接受者故障
Paxos 算法能容忍接受者故障,但剩余的接受者必须足以构成多数派。
14.3.4 Multi-Paxos
到目前为止,我们讨论了经典的 Paxos 算法。在该算法中,我们选择任意一个提议者来
尝试发起 Paxos 回合。这个方法存在的一个问题是,系统中的每轮复制都需要进行一
轮提议。只有当选出提议者之后(即多数派的接受者向某一提议者回应 Promise 消息
时),才会进入复制阶段。为了避免重复进行提议阶段,使提议者可以重用已被认可的地
位,我们可以使用 Multi-Paxos。Multi-Paxos 引入了
领导者
的概念
—
提议者的负责人
(distinguished proposer)[LAMPORT01]。这一补充十分关键,能显著提升算法的效率。
有了一个已确立的领导者,我们就可以跳过提议阶段,直接进行复制:分发值并收集接
受者的确认。
经典 Paxos 算法中,读取可以通过执行一轮 Paxos 回合实现,它从不完整的回合(如果
存在的话)中收集值。之所以必须这么做,是因为最后一个已知的提议者无法保证一定
包含最新的数据,可能另一个提议者已经修改了状态,而当前提议者并不知道。
Multi-Paxos 中也可能发生类似的情况:我们试图从已知的领导者进行读取,但此时
另一位领导者已经当选,那么请求将返回过期的数据,这就违背了共识的可线性化
(linearizability)保证。为了避免这种情况并确保其他进程都无法成功地提交值 ...