繁体   English   中英

简单 Paxos 中的多重共识

[英]Multiple Consensus in Simple Paxos

一个小组如何在不同的时间点达成多个共识。 让我试着用一个例子来解释这个问题。 让我们假设有 10 个进程,其中 3 个是提议者(P0,P1,P2)。 Paxos 轮结束,每个人都同意 P0 提出的值(比如 v0)。 P0 崩溃并从组中删除。 现在,如果 P1 和 P2 提出新的价值观,那么小组成员之间如何就新提出的价值观达成共识。 任何具有更高提案编号的值都将始终仅在 v0 上建立共识。 我们可以map这个例子到Leader选举的情况下,在当前的Leader P0崩溃后,P1和P2想成为Leader。

正如您所说 - 在大多数接受者同意价值(在您的情况下为 v0)之后 - 没有其他价值可以覆盖它。 毕竟,这是共识的重点——大多数人同意并且永远不会改变主意。

那么当我们确实需要就新值达成一致时,我们如何使用 paxos - 例如,因为旧领导者离线。 这里的答案是使用 Multi-paxos——这基本上意味着系统可能会有几轮共识轮次发生。 当系统认为leader宕机时,系统会发起新的paxos轮次以获得新的协议。

multi-paxos 的一个非常典型的方法是使用 epoch 或 term——每次运行 paxos 共识运行时总是增加 integer。 所以在 epoch 1 中,leader 是 v0 - 所以共识是 epoch 1 中的 leader 是 vo。 系统认为 v0 宕机后,会为更高的 epoch 执行新的共识 - 因此 v1 将成为 epoch 2 的领导者; 等等。

始终增加纪元数有助于系统确定系统的最新 state 是什么。 因此,如果参与者收到较旧时期的消息 - 该参与者可能会忽略它。

对于上下文 - 很多人,包括我自己:) - 最初对如何在实践中应用 paxos 感到困惑,因为 paxos 的单个实例永远不会改变约定的值。

假设你学习共识系统,我的建议是实现(或只是玩)paxos,然后是 multi-paxos,然后是 raft。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM