- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
Phase 2. (a) If the proposer receives a response to its prepare requests (numbered n) from a majority of acceptors, then it sends an accept request to each of those acceptors for a proposal numbered n with a value v, where v is the value of the highest-numbered proposal among the responses, or is any value if the responses reported no proposals.
如论文中所述,
A proposer issues a proposal by sending, to some set of acceptors, a request that the proposal be accepted. (This need not be the same set of acceptors that responded to the initial requests.)"
但据我了解,如果我们将阶段 2.(a) 更改为:
If the proposer receives a response to its prepare requests (numbered n) from a majority of acceptors, then it sends an accept request to an arbitrary set of majority acceptors for a proposal numbered n with a value v, where v is the value of the highest-numbered proposal among the responses, or is any value if the responses reported no proposals.
算法会失败,下面是一个例子。考虑总共有 3 个受体 ABC。我们将使用 X(n:v,m) 来表示接受者 X 的状态:提案 n:v 是 X 接受的编号最大的提案,其中 n 是提案编号,v 是提案的值(value),m 是X 曾经响应过的最大准备请求的数量。
我在这里错过了什么吗?谢谢。
最佳答案
您在第 7 步中遗漏了某些内容。当 C 处理 accept 100:b
时,它会将其状态设置为 C(100:b,100)
。 通过接受一个值,节点也 promise 不接受之前的值。
更新。我整个月都在思考这个问题,因为我知道上面的答案并不完全正确。
此外,我查看了几个专有和开源的 paxos 实现,它们都有 OP 提交的错误!
所以这是正确的答案,完全从Paxos Made Simple来看:
If the proposer receives a response to its prepare requests (numbered n) from a majority of acceptors, then it sends an accept request to each of those acceptors for a proposal numbered n with a value v, where v is the value of the highest-numbered proposal among the responses, or is any value if the responses reported no proposals. (emphasis mine)
换句话说,提议者只能向接受者发送Accept
消息,它已经从收到了该选票编号的Promises
。
那么,这与 Lamport 的论文矛盾吗?现在,我说是。
如果您查看 Lamport 的 paxos 证明,他将 accept
视为 promise
,正如我最初的回答所暗示的那样。但这在 Paxos Made Simple 中并未指出。事实上,Lamport 似乎煞费苦心地指出 accept
不是 promise
。
问题是当您将两种变体的较弱部分组合在一起时;正如 OP 和几个实现所做的那样。然后你会遇到这个灾难性的错误。
关于algorithm - Lamport 的 Paxos 中的矛盾使简单的论文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29880949/
我读了一篇名为“Paxos made simple”的论文,但仍然有些困惑: “paxos 算法的实例”指的是什么?每个实例是否表明有来自外部客户端的输入/命令?每个实例的paxos算法将并行执行??
谁能告诉我为什么提案 Id 在 Paxos 中需要是唯一的? 我认为这个proposalId需要唯一的原因是我们需要使用它来拒绝旧提案并对最大投票进行排序。所以如果我们做第一阶段:acceptor 只
考虑一个具有 3 个节点的分布式系统——n1、n2、n3。节点之间有一个共享数据 x。 Paxos 在节点上运行。一开始,x等于4。 客户端向n1发送更新请求,将x的值改为5,n1和n2通过运行Pax
考虑一个具有 3 个节点的分布式系统——n1、n2、n3。节点之间有一个共享数据 x。 Paxos 在节点上运行。一开始,x等于4。 客户端向n1发送更新请求,将x的值改为5,n1和n2通过运行Pax
我实现了共识算法(基于Paxos)。我添加了一些随机测试用例,看起来不错。但是想通过模型检查进行测试吗?找不到正确的文章。请分享如何在Paxos中进行模型检查 谢谢 最佳答案 您可以使用 Spin M
Paxos 算法在使用 2F + 1 个处理器时最多可以容忍 F 次失败。据我了解,该算法仅适用于固定数量的处理器。是否可以在可以动态添加和删除节点的动态环境中使用该算法? 最佳答案 是的,有可能,甚
谁能给我一个真实世界的例子,说明 Paxos 算法是如何在分布式数据库中使用的?我读过很多关于 Paxos 的论文来解释算法,但没有一篇真正用实际的例子来解释。 一个简单的例子可能是一个银行应用程序,
我试图理解 paxos 和两阶段提交之间的区别,作为在多台机器之间达成共识的手段。两阶段提交和三阶段提交非常容易理解。 3PC 似乎也解决了在 2PC 中会阻塞的故障问题。所以我不是很明白Paxos到
假设我将一些机器放在一个弹性集群中,并希望在其中运行一些共识算法(比如 Paxos)。假设他们知道网络的初始大小,比如 8 台机器。 因此,他们将运行共识算法,法定人数为 5。 现在,考虑这些情况:
我想确保 3 台服务器之间的一致性。 这是一个共识问题。 每个服务器都会监听用户并将收集到的数据保存在本地文件中。 我尝试使用 Rpc 将新数据发送到所有其他服务器但徒劳无功。 另外我想使用算法 pa
Paxos 算法(http://research.microsoft.com/en-us/um/people/lamport/pubs/paxos-simple.pdf)中有一点我不明白。这是关于如何
我最近对 Paxos 进行了大量研究,但我一直想知道一件事,我没有看到任何答案,这意味着我不得不问。 Paxos 包括一个递增的提案编号(可能还有一个单独的轮次编号,具体取决于您正在阅读的论文的作
我正在研究 Paxos,我对算法在这个人为设计的示例中的行为方式感到困惑。我希望下图能解释这个场景。 几点: 每个代理充当提议者/接受者/学习者 准备消息的格式为(instance, proposal
我正在学习Paxos算法(http://research.microsoft.com/en-us/um/people/lamport/pubs/paxos-simple.pdf),有一点我不明白。 我
为什么 multi-paxos叫做multi-paxos?我看不出它是如何“多”的。 最佳答案 这是关于多 轮算法,以同意来自稳定领导者的顺序请求,消息最少。最初没有公认的领导者,您必须至少运行一轮基
我读过 Lamport 的 paper在 Paxos 上。我还听说,出于性能原因,它在实践中使用不多。分布式系统中常用的共识算法有哪些? 最佳答案 不确定这是否有帮助(因为这不是来自实际生产信息),但
谁能给我一份 Paxos 的实际用例列表。这是真正的问题,需要作为更大问题的一部分达成共识。 下面是Paxos的用例吗? 假设有两个客户端在扑克服务器上互相玩扑克。扑克服务器被复制。我对 Paxos
我将使用多 Paxos 实现键值存储。我会有几个节点,其中一个是主节点。该主节点接收更新请求并将值复制到从节点。 我的问题是如何选择主节点(或领导者)?我还能使用 Paxos 算法吗?如果是这样,您认
为什么 Paxos 需要两个阶段(prepare/promise + accept/accepted)而不是一个阶段?也就是说,仅使用 prepare/promise部分,如果提议者已收到大多数接受者
在 Datastax 的文档中,他们说 Paxos 协议(protocol)有四个阶段(意思是在轻量级事务中): Prepare/Promise Read/Results Propose/Accept
我是一名优秀的程序员,十分优秀!