为什么使用 no-op 来填补 paxos 事件之间的空白是合法的?

2024-05-27

我正在学习Paxos算法(http://research.microsoft.com/en-us/um/people/lamport/pubs/paxos-simple.pdf http://research.microsoft.com/en-us/um/people/lamport/pubs/paxos-simple.pdf),有一点我不明白。

我们知道,事件遵循及时的顺序,例如,当事件 1-5 和 10 已经决定,但之后的 6-9 和 11 尚未决定时,就会发生这种情况。在上面的论文中,它说我们只需用无操作值填充 6-9 之间的间隙,并简单地记录 11 及以后的新事件。

所以在这种情况下,由于事件 10 已经被记录,我们知道某些类型的事件一定在 5 到 10 之间发生,但由于某些故障而没有被 Paxos 记录。如果我们只是填写无操作值,这些事件将在我们的记录中丢失。

更糟糕的是,如果正如我上面链接的论文所说,事件实际上是来自客户端的命令,那么中间缺少一些命令可能会使整个操作集非法(如果没有任何命令可以跳过或顺序其中很重要)。

那么为什么 Paxos 为事件之间的间隙填充无操作值仍然是合法的呢? (如果正如我上面所关心的,由于无操作值,整个记录集可能无效。)此外,是否有更好的方法来从此类间隙中恢复,而不是使用无操作?


这是一个由多部分组成的答案。

提出无操作值是发现命令的方法还没有到达节点。我们不简单地用无操作命令填充间隙中的每个槽:我们propose每个槽都填充有一个空操作。如果any的对等点已经接受了命令,它将在Prepare-ack消息并且提议者将使用that接受回合中的命令而不是空操作。

例如,假设一个节点位于临时网络分区后面,并且无法与其他节点一起使用插槽 6-9。它知道它在学习槽 10 中的命令时错过了。然后它提出无操作来了解这些槽中决定的内容。

实际实现还具有带外学习协议来批量学习大量转换。

一个命令只有在它完全完成后才算命令decided;在那之前它只是一个proposed命令。 Paxos 是关于在来自多个客户端的竞争命令之间进行选择的。客户必须做好准备,因为他们的命令被选择为另一个客户的命令而被拒绝。

实际的实施都是关于选择order客户端命令。他们的世界观是预写日志的世界观,并且他们将命令放置在该日志中。如果未选择命令,他们会在下一个插槽中重试。 (有很多方法可以减少争用;Lamport 提到将请求转发给领导者,就像在 Multi-Paxos 中所做的那样。)

实际系统还有一些方法可以在提出命令之前知道该命令是否无效;例如知道一组读取和一组写入。这很重要,原因有二。首先,它是一个异步的多客户端系统,当客户端的命令到达服务器时,任何事情都可能发生变化。其次,如果两个并发命令不冲突,那么两个命令都应该能够成功。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么使用 no-op 来填补 paxos 事件之间的空白是合法的? 的相关文章

  • 数组中的重复元素[重复]

    这个问题在这里已经有答案了 这有点与this https stackoverflow com questions 2605766 how to find a duplicate element in an array of shuffled
  • 内存缓存 VS。分布式系统中的集中式缓存

    我们目前正在寻找最合适的解决方案来访问分布式系统上的关键数据 并且我们正在考虑是否使用内存缓存而不是集中式缓存 有关我们希望存储 访问的数据的一些信息 数据量非常小 数据很冷 这意味着它几乎不会改变 并且只有当人们改变我们后台系统中的某些内
  • 将整数列表划分为总和相等的 K 个子列表

    类似的问题还有1 https stackoverflow com questions 27322804 partition of a set into k disjoint subsets with equal sum and 2 http
  • 寻找下一个素数的最佳方法(Java)

    我被要求编写一个程序以最佳方式找到下一个素数 我编写了这段代码 但找不到最佳答案 有什么建议么 public static int nextPrime int input input now find if the number is pr
  • 为什么《破解编码面试》这个例子的时间复杂度是O(k c^k)?

    该问题来自 破解编码面试 第 6 版 问题 V1 11 以下代码打印长度为 k 的所有字符串 其中字符 是按排序顺序排列的 它通过生成所有长度的字符串来做到这一点 k 然后检查每个是否已排序 什么是运行时间 package QVI 11 P
  • 不要覆盖 Azure Blob 存储

    我有一种将文件添加到 Azure Blob 存储的方法 问题是我试图指定一个条件 在该条件下它不会覆盖 blob 而只是添加到其中 我正在尝试使用参数访问条件 但是 VS 说这个方法不能采用两个参数 async void archiveNe
  • 用于计算三角函数、对数或类似函数的算法。仅限加减法

    我正在修复 Ascota 170 古董机械可编程计算机 它已经开始工作了 现在我正在寻找一种算法来展示其功能 例如计算三角或对数表 或类似的东西 不幸的是 从数学运算来看 计算机只能进行整数的加减法 从 1E12到1E12的55个寄存器 甚
  • 神经网络的层和神经元

    我想更多地了解神经网络 我正在开发一个 C 程序来制作神经网络 但我坚持使用反向传播算法 很抱歉没有提供一些工作代码 我知道有很多库可以用多种语言创建神经网络 但我更喜欢自己制作一个 关键是我不知道要实现特定目标 例如模式识别或函数近似或其
  • 计算字符串的所有子串中子序列的出现次数

    我想编写一个算法来计算字符串的所有子字符串中字符子序列 不相交 出现的总数 下面是一个例子 字符串 jabcohnnyjohnny 后续 约翰尼 包含子序列的子字符串 jabcohnny jabcohnnyj jabcohnnyjo jab
  • 如何在 JavaScript 中构建树模式匹配算法?

    好吧 这是一个有点复杂的问题 但是 tl dr 基本上是如何使用 模式树 解析 实际树 如何检查特定的树实例是否与特定的模式树匹配 首先 我们有我们的结构模式树 模式树通常可以包含以下类型的节点 sequence节点 匹配一系列项目 零个或
  • 线段树java实现[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 你知道 二进制 的良好实现吗线段树 http en wikipedia org wiki Segmen
  • 定点数学比浮点运算快吗?

    多年前 即 20 世纪 90 年代初期 我构建了图形软件包 该软件包基于定点算术和预先计算的 cos sin 表格以及使用牛顿近似方法进行 sqrt 和对数近似的缩放方程来优化计算 这些先进技术似乎已经成为图形和内置数学处理器的一部分 大约
  • 什么是“朴素”算法,什么是“封闭式”解决方案?

    我有一些关于描述算法时使用的术语语义的问题 首先 朴素 算法是什么意思 这与给定问题的其他解决方案有何不同 解决方案还可以采取哪些其他形式 其次 我听到很多人提到 封闭式 解决方案 我也不知道这意味着什么 但在尝试解决递归关系时经常会出现
  • 如何在 C# 中以编程方式创建柔和的颜色?

    根据所需的颜色数量均匀分布地生成它们 如果指定的计数为 8 则看起来像这样 List
  • LRU算法,实现这个算法需要多少位?

    我有一个关于 LRU 算法的小问题 如果您有一个包含四个块的高速缓存 那么需要多少位来实现该算法 假设您指的是 4 路组关联缓存 完美 LRU 本质上是按照使用顺序为每一行分配一个精确的索引 您也可以将其视为 年龄 因此 4 个元素中的每一
  • 重写修改后的 goto 语义的算法

    我有一大堆使用旧的自行设计的脚本语言编写的遗留代码 我们将它们编译 翻译成 javascript 该语言有条件跳转 跳转到标签 与普通 goto 语句的区别在于 不可能向后跳转 该语言中没有嵌套的 if 语句或循环 由于 javascrip
  • 为什么这个算法的Big-O复杂度是O(n^2)?

    我知道这个算法的大O复杂度是O n 2 但我不明白为什么 int sum 0 int i 1 j n n while i lt j sum 即使我们设定了j n n一开始 我们在每次迭代期间递增 i 并递减 j 因此最终的迭代次数不应该比n
  • 如何光栅化旋转矩形(通过 setpixel 在 2d 中)

    我有四个 2d 顶点 A B C D 的旋转矩形 我需要在像素缓冲区中 有效地 光栅化 绘制它 使用 setpixel x y 颜色 怎么做 我正在尝试使用一些代码 例如 convertilg a b c d do up down left
  • 贝尔曼福特算法可以有任意的边顺序吗?

    我刚刚开始学习新算法 但当我阅读 极客为极客而写的贝尔曼福特算法 时 我陷入了困境 http www geeksforgeeks org dynamic programming set 23 bellman ford algorithm h
  • 颜色逻辑算法

    我们正在构建一个体育应用程序 并希望将团队颜色融入到应用程序的各个部分 现在 每个团队都可以使用几种不同的颜色来表示 我想做的是执行检查以验证两个团队颜色是否在彼此一定的范围内 这样我就不会显示两个相似的颜色 因此 如果团队 1 的主要团队

随机推荐