首页 > 解决方案 > 有人对 Multi-Paxos 有什么建议吗?

问题描述

我已经非常了解 Raft 是什么并在MIT6.824 distributed system. 我也知道什么是基本的 Paxos,我还没有实现它,所以我无法获取它的所有细节。对于Multi-Paoxs,我更困惑,即为什么它可以消除大量的Prepare RPC?我知道答案应该是 Multi-Paxos 可以有一个固定的领导者以及noMoreAccepted来自其他对等方的响应以确定是否减少PrepareRPC。但是,我无法详细了解它,为什么以及如何工作

我想获得更多的一些建议、文章、示例代码或任何可以帮助Multi -Paxos的东西,

  1. 我已经阅读了Paxos made livePaxos made simple这两篇论文可以让我对 Paxos 是什么以及它是如何工作的有一个基本的了解
  2. 我也看了好几遍https://www.youtube.com/watch?v=YbZ3zDzDnrw&t=3035s&ab_channel=DiegoOngaro,讲的很好,但是没有涉及太多细节

标签: distributedraftpaxos

解决方案


要回答您的具体问题:

为什么它可以消除大量的 Prepare RPC?

Paxos Made Simple第 10 页的论文中,它说:

一个新选择的领导者为无数个共识算法实例执行阶段 1——在上面的场景中,实例 135-137 和所有大于 139 的实例。

这就是说,如果领导者Prepare(135,n)使用选票号广播是准备实例 135 n,则可以将其定义为适用于所有尚未修复的 >=135 的实例是有效的。我们可以推断,任何节点都可以安全地为我们的日志流中无限数量的未固定位置“发送垃圾邮件”准备消息。这是因为对于每个位置,每个接受者都使用该位置的 Paxos 规则。我们可以将无限的准备消息集压缩为一个适用于所有更高的未固定位置的消息。然后,我们消除了除了一个为稳定领导者任期准备的消息之外的所有消息。所以这是很棒的优化。

您询问了任何示例代码。我在 Scala 中使用函数式编程编写了 multi-paxos 的实现,旨在忠实于https://github.com/trex-paxos/trex上的Paxos Made Simple论文。核心状态是PaxosData,消息协议在 PaxosProtcol 底层,算法是PaxosAlgorithm中的一组消息匹配函数。该算法将当前不可变状态和不可变消息作为输入,并为节点输出下一个不可变状态。常见行为被编写为具有完整单元测试的部分函数。这些部分函数组成完整的函数,供领导者、追随者和候选领导者使用。有一个写在这个博客

随着优化加速日志复制,它将附加消息添加到基本集。这些涉及一些 Lamport 在他的论文中没有涉及的实现细节。一个例子是否定确认用于在节点之间传递信息,以尽量避免由于节点和领导者之间只有一个失败的网络链接而中断稳定的领导者。TRex 试图将这些功能保持在最低限度,以创建一个基本但完整的解决方案。

您可能会发现对 Multi-Paxos 有帮助的一个答案是讨论为什么 Multi-Paxos 被称为https://stackoverflow.com/a/26619261/329496

还有一篇关于原始的兼职议会论文如何使用领导者,并且还描述了运行多 Paxos 的稳定领导者https://stackoverflow.com/a/46012211/329496

最后,您可能会喜欢我在The Trial Of Paxos Algorithm后对 Paxos 的辩护。


推荐阅读