一个常见的误解是原始 Paxos 论文没有使用稳定的领导者。在Paxos 变得简单 https://www.microsoft.com/en-us/research/publication/paxos-made-simple/?from=http%3A%2F%2Fresearch.microsoft.com%2Fen-us%2Fum%2Fpeople%2Flamport%2Fpubs%2Fpaxos-simple.pdf在第 6 页标题为“实施”的部分中,Lamport 写道:
该算法选择一个领导者,扮演领导者的角色
杰出的提议者和杰出的学习者。
这可以通过使用准备和承诺的第一阶段消息传递来简单地实现。
然后在第 9 页和第 10 页的“实现状态机”部分下,我们有:
在正常操作中,单个服务器被选举为领导者,
它充当杰出的提议者(唯一试图
问题提案)在共识算法的所有实例中。
这里使用最通用意义上的术语“状态机”,涵盖明显的情况,例如键值存储或数据库服务器,我们在其中复制应用于存储的操作日志。
人们对此感到困惑,因为 Lamport 证明 Paxos 的方式也是现在的教学方式。 Lamport 通过将 Paxos 简化为可以推理的数学模型,证明了它的正确性。他在原始论文中称之为“单一法令会议”兼职议会 https://www.microsoft.com/en-us/research/publication/part-time-parliament/?from=http%3A%2F%2Fresearch.microsoft.com%2Fen-us%2Fum%2Fpeople%2Flamport%2Fpubs%2Flamport-paxos.pdf:
Paxon 宗教领袖要求数学家制定协议
选择主教会议的法令。协议的要求和
与后来议会的假设基本相同
不同之处在于,账本不是包含一系列法令,而是包含
至多有一项法令。由此产生的 Synod 协议是
此处描述;议会协议在第 3 节中描述。
如果您觉得这句话令人困惑,请不要担心,这是一个糟糕的笑话;字面上地。用我自己的话翻译一下是:
“为了证明共识算法的正确性
选择命令流我们首先可以证明其正确性
选择单个命令的数学模型。这
然后可以扩展用于选择单个命令的数学模型
到选择命令流的实用算法(第
3)只要满足单命令数学模型的不变量
不被侵犯。” – simbo1905
为了证明我的解释是正确的,我们可以看一下题为“多重法令议会”的第 3 节,其中写道:
Paxon 议会必须通过一项法令,而不是仅仅通过一项法令
一系列编号的法令。正如在主教会议协议中一样,主席是
当选。任何想要通过法令的人都会通知总统,
谁将为该法令分配一个编号并尝试通过它。
从逻辑上讲,议会协议使用了一个单独的实例
每个法令编号的完整主教会议协议。然而,单个
总统因所有这些情况而被选为总统,他执行了
该协议的前两个步骤只需一次。
为了说明这一点,最初的“The Part-Time Parliment”论文介绍了 Paxos 由于其多级算法而引起计算机科学家的兴趣;议会议定书。该文件和澄清论文“Paxos Made Simple”都将 Paxos 定义为有一个杰出的领导者为命令流分配序列号。此外,尊敬的领导者仅在担任领导职务时才发送“准备”消息;之后,在稳定状态下,尊敬的领导者仅传输“接受”消息。他还在论文的其他地方表示要折叠角色,让所有服务器运行算法的所有三个角色。
当你问“在 raft 的领导者选举中,Paxos 的方法相对于简单的随机超时方法有什么优势?”我不确定你指的是哪种方法?使用 Paxos,您可以随机设置超时并发出“Prepare”消息。 Paxos Made Simple 论文指出,只要您遵循 Paxos 协议来“确保安全”,您就可以自由地使用超时或其他更快的机制:
费舍尔、林奇和帕特森的著名结果1 https://www.microsoft.com/en-us/research/publication/paxos-made-simple/?from=http%3A%2F%2Fresearch.microsoft.com%2Fen-us%2Fum%2Fpeople%2Flamport%2Fpubs%2Fpaxos-simple.pdf暗示
用于选择提议者的可靠算法必须使用
随机性或实时性——例如,通过使用超时。然而,
无论成功或失败,都确保安全
选举。
随机超时非常容易编码并且非常容易理解。但在最糟糕的情况下,它们可能会导致恢复的长期延迟。您不喜欢可以在 Paxos 中使用自己的领导者选举机制。例如this one https://davecturner.github.io/2017/08/17/paxos-pre-voting.html.