Paxos
使用两个共识构建阶段,即使节点断开连接也能达成安全共识
问题
当多个节点共享状态时,它们通常需要就特定值达成一致。使用 领导者和跟随者,领导者决定并将它的值传递给跟随者。但是,如果没有领导者,那么节点需要自己确定一个值。(即使有领导者和跟随者,他们也可能需要这样做来选举领导者。)
领导者可以通过使用 两阶段提交 来确保副本安全地获取更新,但在没有领导者的情况下,我们可能会遇到竞争节点试图收集 多数投票。这个过程更加复杂,因为任何节点都可能发生故障或断开连接。一个节点可能在一个值上获得多数投票,但在能够将此值传达给整个集群之前断开连接。
解决方案
Paxos 算法由 Leslie Lamport 开发,发表在他的 1998 年论文 "The Part-Time Parliament" 中。Paxos 通过三个阶段来确保多个节点在部分网络或节点故障的情况下就相同的值达成一致。前两个阶段的作用是在一个值周围建立共识,最后一个阶段然后将该共识传达给剩余的副本。
- 准备阶段:建立最新的 生成时钟 并收集任何已接受的值。
- 接受阶段:为该生成提出一个值,供副本接受。
- 提交阶段:让所有副本都知道已经选择了一个值。
有关更多详细信息,请访问 oreilly.com 上的在线电子书 第 11 章
此模式是 分布式系统模式 的一部分
2023 年 11 月 23 日