我是分布式系统和共识算法的新手。我理解它是如何工作的,但我对一些极端情况感到困惑:当接受者收到一个实例的接受但从未收到关于最终共识或决定是什么的回复时,接受者会做出什么 react 。例如,提议者在提交期间或在发送所有 ACCEPT 后立即停止或失败。在这种情况下会发生什么?
谢谢。
最佳答案
这个问题有两个部分:接受者如何对新提议使用react?和如果接受者永远不知道结果,他们会如何 react ?
在普通的 paxos 中,acceptor 实际上不需要知道结果。事实上,不同的接受者在他们的内存中有不同的值(value)是完全合理的,永远不知道他们拥有的值(value)是否是 promise 的值(value)。
paxos的真正意义在于处理第一个问题。并且看到接受者实际上永远不知道它是否具有提交的值,它必须假设它可以具有提交的但如果它没有则愿意替换它的值> 具有 promise 的值(value)。它怎么知道的?当收到一条消息时,提议者总是比较轮数,如果它是旧的,那么接受者向提议者发出信号,它必须首先“ catch ”(Nack)。否则,它相信提议者知道它在做什么。
现在谈谈真实系统。一些真正的 Paxos 系统可以让接受者不关心提交的值是什么:Paxos 只是在那里选择值是什么。但是许多真实的系统使用 Paxos & Friends 来制作数据的冗余副本以确保安全。
一些paxos系统会继续paxos-ing直到所有acceptor都有数据。 (请注意,在没有其他提议者干扰的情况下,一个额外的 paxos 回合会在任何地方复制 promise 值。)其他系统对来自其他提议者的干扰持谨慎态度,并将使用不同的 promise 消息来教导接受者(和其他学习者) promise 的值(value)是什么。
但是如果提议者崩溃了怎么办?随后的提议者可以提出一个no-op值。如果后续提议者准备(阶段 1A)并且可以与先前提议者成功向(阶段 2A)发送接受的任何接受者通信,那么它将知道先前的是什么proposer 正试图做(通过阶段 1B 中的响应:PrepareAck)。否则会提交一个无害的无操作值。
关于distributed-computing - 在 Paxos 中提交失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52751324/