【发布时间】:2022-11-02 08:10:53
【问题描述】:
我理解 Paxos 共识算法的核心是在任何给定的一组节点中只有一个“多数”,因此如果提议者被多数接受,则不可能有另一个多数接受不同的值,因为任何接受者只能接受 1 个单一值。
因此,共识算法最简单的“快乐路径”就是让任何提议者 ping 大部分接受者,看看它是否能让他们接受它的值,如果是,我们就完成了。
当并发提议者导致没有大多数节点就一个值达成一致时,就会发生冲突,这可以用 3 个节点的最简单情况来证明,每个节点都试图让 2 个节点接受它的值,但由于并发性,每个节点最终只会让自己“接受”该值,因此没有多数人同意任何事情。
Paxos 算法不断发明 2 阶段算法来解决这个问题。
但是为什么我们不能简单地退避一段随机时间并重试,直到最终一个提议者成功获得多数意见?这可以证明是成功的最终,因为如果每个提议者未能获得多数,每个提议者都会随机退避一段时间。
我知道这在性能方面并不理想。但是让我们先把性能排除在外,只看正确性。我在这里有什么遗漏吗?这是一个完全正确的(基本)共识算法?
【问题讨论】:
标签: distributed-computing distributed-system paxos