distributed - 有人对 Multi-Paxos 有什么建议吗?
问题描述
我已经非常了解 Raft 是什么并在MIT6.824 distributed system
. 我也知道什么是基本的 Paxos,我还没有实现它,所以我无法获取它的所有细节。对于Multi-Paoxs
,我更困惑,即为什么它可以消除大量的Prepare RPC?我知道答案应该是 Multi-Paxos 可以有一个固定的领导者以及noMoreAccepted
来自其他对等方的响应以确定是否减少Prepare
RPC。但是,我无法详细了解它,为什么以及如何工作
我想获得更多的一些建议、文章、示例代码或任何可以帮助Multi -Paxos的东西,
- 我已经阅读了
Paxos made live
,Paxos made simple
这两篇论文可以让我对 Paxos 是什么以及它是如何工作的有一个基本的了解 - 我也看了好几遍https://www.youtube.com/watch?v=YbZ3zDzDnrw&t=3035s&ab_channel=DiegoOngaro,讲的很好,但是没有涉及太多细节
解决方案
要回答您的具体问题:
为什么它可以消除大量的 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 的辩护。
推荐阅读
- php - 如何通过连接到另一个数据库中的表来删除模式?
- c# - Entity Framework 6.x Code First 来自数据库,添加列属性
- arrays - Angular - 如何在操作数组时将更改从变量绑定到 html
- c# - 在 C# 中从服务器端更新代码时出现空错误
- python - python 上的 xlsxwriter 中的“没有这样的文件或目录”作为服务
- ejs - 为什么我在简单的 ejs 文件上使用 eslint-ejs 插件时出现解析错误?
- c++ - 为什么 Eigen 对混叠做出不一致的默认假设?
- intellij-idea - 使用 Jackson 在 Intellij 中运行测试
- r - 如何从 R 中的转置结果中删除相似的值并创建新变量?
- azure-web-app-service - Linux 上的 Azure Web App 我更改了 Scale Up 和 down 然后我在网站上收到 Application Error