首页 > 解决方案 > Paxos:如何选择提议者、接受者和学习者?

问题描述

我想从许多相同的流程中选出一个领导者。Paxos 的所有解释都说有些进程是 Proposers,有些是 Voter,有些是 Accepters。当我启动它们时,我是否需要将这些角色分配给我的进程?

如果我所有的提议者都死了怎么办?我可以将现有的学习者/投票者切换为提议者吗?

我的想法是,所有进程都作为选民出现,然后随机超时等待消息。如果他们在超时到期之前没有收到任何消息,他们将扮演提议者的角色。如果他们收到一条消息,他们会再次超时,然后如果他们在超时结束(或他们达成协议)之前没有收到任何消息,他们可以再次成为提议者。

这是一种有效的方法吗?

标签: paxos

解决方案


我是几个生产 paxos 系统的维护者。我将详细介绍我在我的和其他实际/生产系统中看到的内容。


Paxos 的所有解释都说有些进程是 Proposers,有些是 Voter,有些是 Accepters。当我启动它们时,我是否需要将这些角色分配给我的进程?

在实际系统中,提议者和接受者是同一组节点。也就是说,提议者接受者是由同一进程承担的两个角色。


如果我所有的提议者都死了怎么办?

许多 Paxos 系统(例如用作 kv 存储的系统)在一系列paxos 实例(如事务日志)上工作。假设同一组进程将永远存在是不可行的,因此必须有机制来更改仲裁中的节点集。

在我维护的一些系统中,建议/选择的值有两个部分:来自客户的有效负载和 paxos 成员资格。paxos 轮由在先前值中选择的法定人数运行。这样做确实会阻碍您的系统通过管道传输所选值的能力;如果您想一次选择多个值,则必须将它们批处理,或者您可以查看 Raft 选择成员资格的方式。

在 Raft 中,选择仲裁成员是一个两阶段的过程。首先,提出并承诺新的法定人数;两个仲裁都使用了一段时间;然后新的法定人数接管。具体而言,在过渡期间,新旧法定人数中的大多数都需要提交任何事情,包括从新法定人数中接管。


推荐阅读