我想从众多相同的流程中选出一位领导者。 Paxos的所有解释都说一些流程是Proposers,一些是Voters,一些是Accepters。我启动它们时是否需要将这些角色分配给我的进程?
如果我的所有提议者都死了怎么办?我可以将现有的学习者/选民转换为提名者吗?
我想到这一点的方式是所有进程都作为选民出现,然后等待随机超时的消息。如果他们在超时到期之前没有收到任何消息,他们会认为该角色是提议者。如果他们收到一条消息,他们会再次超时,如果他们在超时结束前没有收到任何消息(或者他们有协议),他们可以再次成为提议者。
这是一种有效的方法吗?
答案 0 :(得分:0)
我是几个生产paxos系统的维护者。我将详细介绍我在我和其他实用/生产系统中看到的内容。
Paxos的所有解释都说某些流程是提议者,有些是选民,有些是接受者。我启动它们时是否需要将这些角色分配给我的进程?
在实际系统中,提议者和接受者是同一组节点。也就是说, proposaler 和 acceptor 是同一进程所承担的两个角色。
如果我的所有提议者都死了怎么办?
许多Paxos系统(例如用作kv存储的系统)在paxos实例的序列上工作(如事务日志)。假设同一组进程将永远存在是不可行的,因此必须有机制来更改仲裁中的节点集。
在我维护的一些系统中,建议/选择的值有两部分:来自客户的有效负载和paxos成员资格。 paxos round由 previous 值中选择的仲裁运行。这样做会妨碍系统管理所选值的能力;如果你想一次选择多个值,你必须批量处理它们 - 或你可以看看Raft选择会员资格的方式。
在Raft中选择仲裁成员是一个两阶段的过程。首先,提出并承诺新的法定人数; 两个 quorums都会使用一段时间;然后新的法定人数接管了。具体而言,在此期间,旧法定人数和新法定人数中的大多数都需要提交任何内容,包括从新法定人数中接管。