Paxos 算法由 Leslie Lamport 在 1989 年提出的一个分布式共识算法,Paxos 算法较难理解,本文尝试以图形化方案解释 Paxos 算法。
本文在很大篇幅参考了韩健极客时间的课程《分布式协议与算法》,有兴趣了解韩老师其他课程的同学可以购买来学习下。
Lamport 提出的 Paxos 算法包括两个部分:
- Basic Paxos 算法:多节点如何就某个值达成共识
- Multi Paxos 思想:执行多个 Basic Paxos ,就一系列的值达成共识
Basic Paxos
问题
假设一个集群包含三个节点 A, B, C,提供只读 key-value 存储服务。只读 key-value 的意思是指,当一个 key 被创建时,它的值就确定下来了,且后面不能修改。
客户端 1 和客户端 2 同时试图创建一个 X 键。客户端 1 创建值为 "leehao.me" 的 X ,客户端 2 创建值为 "www.leehao.me" 的 X。在这种情况下,集群如何达成共识,实现各节点上 X 的值一致呢?

Paxos 涉及的概念
在 Paxos 算法中,存在提议者(Proposer),接受者(Acceptor),学习者(Learner)三种角色,它们的关系如下:
- 提议者(Proposer):提议一个值,用于投票表决,可以将上图客户端 1 和客户端 2 看作提议者。实际上,提议者更多是集群内的节点,这里为了演示的方便,将客户端 1 和 2 看作提议者,不影响 Paxos 算法的实质
- 接受者(Acceptor):对每个提议的值进行投票,并存储接受的值,例如,上图集群内的节点 A、B、C
- 学习者(Learner):被告知投票的结果,接受达成共识的值,不参与投票的过程,存储接受数据
需要指出的是,一个节点,既可以是提议者,也可以是接受者。

在 Paxos 算法中,使用提案表示一个提议,提案包括提案编号和提议的值。接下来,我们使用 [n, v] 表示一个提案,其中,n 是提案编号,v 是提案的值。
在 Basic Paxos 中,集群中各个节点为了达成共识,需要进行 2 个阶段的协商,即准备(Prepare)阶段和接受(Accept)阶段。
准备阶段
假设

最低0.47元/天 解锁文章
7100

被折叠的 条评论
为什么被折叠?



