distributed-computing - 在 Paxos 中提交失败

标签 distributed-computing distributed distributed-system consensus paxos

我是分布式系统和共识算法的新手。我理解它是如何工作的,但我对一些极端情况感到困惑:当接受者收到一个实例的接受但从未收到关于最终共识或决定是什么的回复时,接受者会做出什么 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/

相关文章:

Java RMI 计算引擎

distributed-system - CAP 定理中可用性的一致性

programming-languages - 分布式系统编程语言

java - 是否可以通过 JMX 管理 C++ 应用程序?

c++ - NTP 对于分布式时间同步有多好?

java - 如何在RMI多用户应用程序中实现MVC模式?

mysql - 如何使用 Django 实现 MYSQL 数据库的数据库分片

java - 警告 "unknown addresses are found in partition table"

java - 如何使用 Oracle Coherence 在分布式系统上生成唯一 id?

distributed-computing - 在 2PC 中如果提交失败会发生什么?