如果更新值与接受者发送的最高提案编号不同步,paxos 是否会“忽略”更新值的请求?

2024-04-02

这里的标题可能会产生误导。我将尽力通过一个例子来解释我的疑问。

我正在从 wiki 和其他来源阅读有关 paxos 算法的内容。

1) 想象一下客户端请求更新值的情况(X在下面的示例中)已被处理。 经过一轮 Paxos 后,得到一个值Vb之所以被选择,是因为接受者对提案者的回复包含他们之前接受的提案编号和相应的值。在下面的情况下,三个接受者发送(8,Va),(9,Vb),(7,Vc)给目前拥有的提案者(10,X)。它拾起(9,Vb)因为它是收到的最高提案编号并广播该值(10,Vb)给所有接受者接受。所以初始值X这整轮 Paxos 的处理从未得到更新。那么在这种情况下更新到X的客户端事务是否失败了呢?

之后Acceptors的最终状态是什么?他们都有吗(10,Vb)作为他们接受的最高提案数量和价值,从而保持同步?



Client   Proposer      Acceptor     Learner
   |         |          |  |  |       |  | --- First Request ---
   X-------->|          |  |  |       |  |  Request
   |         X--------->|->|->|       |  |  Prepare(10)
   |         |<---------X--X--X       |  |  Promise(10,{(8,Va),(9,Vb),(7,Vc)}
   |         X--------->|->|->|       |  |  Accept!(10,9,Vb)
   |         |<---------X--X--X------>|->|  Accepted(10,9,Vb)
   |<---------------------------------X--X  Response
   |         |          |  |  |       |  |
  

2)现在是一个更复杂的情况,在试图达成共识的过程中,在不同的时间点提出了两个提案。想象一下区域 A 中的客户端 C1 正在修改一些数据的情况X当Region B的客户端C2正在修改相同的数据时,尚未达成共识X。客户的其中一项请求是否被拒绝?请注意,C2 发生晚于 C1,但尚未达成共识。如果遵循排序,则必须完成C1请求,接受共识,然后处理C2请求。从我的理解来看这个博客 http://angus.nyc/writing/paxos-by-example/,本例中选择C1请求值。

那么C2请求是否被放弃了呢?这可能不是一个好的选择。

示例(版权所有this http://angus.nyc/writing/paxos-by-example/ blog):

在这种情况下,v=8最终选择了,尽管要求V=5是客户要求的最新更新。为什么会这样呢?这可能会产生严重影响

感谢您的帮助,祝新年快乐!


为了解释这一点,我将给出一些背景——OSI 协议栈的解释:

+------------------------+
|100. Your Application   |
#========================#
|8. Some state machine   |
|   or key/value store   |
+------------------------+
|7. Transaction log      |
+------------------------+
|6. Paxos                |
+------------------------+
|5. Some framing protocol|
+------------------------+
|4. TCP                  |
+------------------------+
|...                     |
+------------------------+

我见过的每一个认真的 paxos 实现都使用类似的模型(并且我见过许多认真的实现)。也就是说,Paxos用于选择事务日志中的下一个条目对于状态机(因为没有事务日志,数据库只是一个昂贵、缓慢、有缺陷的缓存)。事务日志中的每个条目都有一个不同的 Paxos 实例;他们是完全独立的;如果系统的设计者非常聪明,Paxos 实例甚至可以并行运行。

现在回答你的问题。

是的,第一个示例中的 X 失败了;它没有被选择。失败应返回给上层。这可能并不一定意味着客户端(上述模型中的“您的应用程序”)失败。上层可能决定重试事务日志中稍后条目中的值;或者他们可能只是向客户端返回失败信息。

在第二个示例中,其中一个请求最终必须被拒绝——Paxos 最多选择一个值。一旦选择了该值,它就会保持选择状态。就好像查克·诺里斯选择了它一样。

但第二个例子似乎有一点误解。哪个请求先启动并不重要。由于网络延迟和行星排列,第二个请求可能会取代第一个请求。

尝试一下!以X、Y为值; P1、P2作为提议者;和 A1,A2,A3 作为受体:

  1. P1有X并发送Prepare(1)
  2. A1 承诺 1 并返回 Accepted(0,_)
  3. A2 承诺 1 并返回 Accepted(0,_)
  4. A3 承诺 1 并返回 Accepted(0,_)
  5. P1 仍然有 X 并发送 Accept(X,1)
  6. A1 接受(X,1)
  7. P2有Y并发送Prepare(2)
  8. A2 promises for 2 and returns Accepted(1,_)
    • 如您所见,A2 已转为不接受任何小于 2 的回合
  9. A2 拒绝 Accept(X,1)
  10. A3 承诺 2 并返回 Accepted(1,_)
  11. P2 仍然有 Y 并发送 Accept(Y,2)
  12. A2 接受(Y,2)
  13. A3 accepts(Y,2)
    • 由于简单多数的接受,Y 被选中。从现在开始,无论任何提议者做什么,Y 的值都将始终被选择。

这实际上开始有点像你在第二个例子中的图片,但在这个例子中,网络支持第二个提议者。

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

如果更新值与接受者发送的最高提案编号不同步,paxos 是否会“忽略”更新值的请求? 的相关文章

  • etcd的简单使用

    etcd的简单使用 ETCD安装配置 安装 去https github com coreos etcd releases 下载想要的版本解压etcd包 解压后进入目录 增加x权限 chmod x etcd chmod x etcdctl 并
  • MATLAB parfor 中的版本或字节顺序错误?

    我正在使用 MATLAB 进行并行计算parfor 代码结构看起来很像 assess fitness save communication overheads bitmaps pop 1 new indi idices porosities
  • 是否可以限制 MapReduce 作业访问远程数据?

    我们有特定的算法想要与 HDFS 集成 该算法要求我们在本地访问数据 该工作将专门在Mapper 然而 我们确实希望在分发文件方面利用 HDFS 提供可靠性和条带化 执行计算后 我们将使用Reducer只是发回答案 而不执行任何额外的工作
  • 缓存和持久化有什么区别?

    按照RDD坚持 两者有什么区别cache and persist 在火花 With cache 您仅使用默认存储级别 MEMORY ONLY for RDD MEMORY AND DISK for Dataset With persist
  • C# 中的分布式计算

    我有一个特定的 DLL 其中包含一些语言处理类和方法 其中一种方法获取一个单词作为参数 并进行大约 3 秒的一些计算 并将相关结果保存在 SQL Server 数据库上 我想在 900k 字上运行这个 DLL 方法 并且这项工作可能每周重复
  • 有 BOINC 编程经验吗?

    我被 BOINC 吸引是因为我的一个小项目 我听说过 BOINC 但没有太多了解它的工作原理 主要是因为我现在专注于其他优先事项 我想知道的是 你们中是否有人真正尝试过为 BOINC 编程并让程序在分布式计算机网络上运行 我特别对以下问题感
  • Spark 中的任务是什么? Spark Worker如何执行jar文件?

    阅读了一些文档后http spark apache org docs 0 8 0 cluster overview html http spark apache org docs 0 8 0 cluster overview html 我有
  • Apache Spark join 操作的扩展能力较差

    我在 Apache Spark 上运行 join 操作 发现没有弱可扩展性 如果有人能解释这一点 我将不胜感激 我创建两个数据帧 a b 和 a c 并通过第一列连接数据帧 我为 一对一 连接生成数据帧值 另外 我使用相同的分区器来避免随机
  • Spark聚合函数——aggregateByKey是如何工作的?

    假设我有一个分布在 3 个节点上的系统 并且我的数据分布在这些节点之间 例如 我有一个 test csv 文件 该文件存在于所有 3 个节点上 并且包含 2 列 row id c row1 k1 c1 row2 k1 c2 row3 k1
  • Spark Streaming:接收器故障后如何不重新启动接收器

    我们正在使用自定义 Spark 接收器 它从提供的 http 链接读取流数据 如果提供的http链接不正确 则接收失败 问题是spark会不断重启接收器 并且应用程序永远不会终止 问题是如果接收器失败 如何告诉 Spark 终止应用程序 这
  • CAP定理是否意味着ACID对于分布式数据库是不可能的?

    有NoSQL ACID 分布式 数据库 https stackoverflow com questions 2608103 is there any nosql that is acid compliant 尽管有 CAP 定理 这怎么可能
  • 为什么 CAP 定理中 RDBMS 不能容忍分区,但为什么它可用?

    关于 RDBMS 是 CAP 定理中的 CA 我不明白的两点 1 它说RDBMS是not 分区容忍但 RDBMS 怎么样 any less比 MongoDB 或 Cassandra 等其他技术更具有分区容错性 是否有一种 RDBMS 设置可
  • 为什么 Hadoop 不使用 MPI 来实现?

    如果我错了 请纠正我 但我的理解是 Hadoop 不使用 MPI 进行不同节点之间的通信 造成这种情况的技术原因是什么 我可以冒险进行一些猜测 但我对 MPI 是如何 在幕后 实现的了解不够 无法知道我是否正确 想想看 我对 Hadoop
  • paxos 与 raft 进行领导者选举

    读完paxos和raft paper后 我有以下困惑 paxos论文仅描述了单个日志条目的共识 相当于raft算法中的领导者选举部分 在raft的leader选举中 paxos的方式相对于简单的随机超时方式有什么优势呢 一个常见的误解是原始
  • 如果leader没有死但是无法接收Kafka中的消息会发生什么?单点故障?

    我有 3 个经纪人 3 个分区 每个代理都是一个分区的领导者和所有分区的 ISR 假设我已经在端口上运行了代理19092 29092 39092分别 19092 partition 0 29092 partition 1 39092 par
  • 如果更新值与接受者发送的最高提案编号不同步,paxos 是否会“忽略”更新值的请求?

    这里的标题可能会产生误导 我将尽力通过一个例子来解释我的疑问 我正在从 wiki 和其他来源阅读有关 paxos 算法的内容 1 想象一下客户端请求更新值的情况 X在下面的示例中 已被处理 经过一轮 Paxos 后 得到一个值Vb之所以被选
  • LRPC 的意义何在?为什么有人想要对同一台机器进行远程过程调用?

    根据我对 RPC 远程过程调用 的理解 它们提供了一种向远程计算机发送函数调用 调用等的方法 这样做的明显优点是 您可以拥有一个在机器集群上运行的单个程序 并且可以处理更多请求 更多数据等 但我很困惑LRPC 轻量级RPC http www
  • Corda 真的需要公证人才能达成唯一性共识吗?

    科达共识简介 https docs corda net releases release V2 0 key concepts consensus html说 唯一性共识是由公证人提供的 我们是说 如果没有公证人 A 有可能说服 B 将一笔交
  • 在 Corda 中,哪些数据会发送到非验证公证服务?

    这个问题经常出现在对话中 当 Corda 交易被发送到非验证公证服务进行最终确定时 公证服务可以看到并推断出关于世界的什么 在将交易发送给非验证公证人之前 会按如下方式进行过滤 stx buildFilteredTransaction Pr
  • OT 和 CRDT 之间的区别

    有人可以简单地向我解释一下操作转换和 CRDT 之间的主要区别吗 据我了解 两者都是允许数据在分布式系统的不同节点上无冲突地收敛的算法 在哪种用例中您会使用哪种算法 据我了解 OT主要用于文本 而CRDT更通用 可以处理更高级的结构 对吧

随机推荐