文章目录
一、什么是 Paxos 算法
Paxos 是一种分布式一致性算法,用于确保多个节点在出现网络延迟、故障或消息丢失的情况下仍能就某个值达成一致。这是分布式系统的核心问题之一。
Paxos 最早由 Leslie Lamport 提出,其思想来源于投票和多数派原则。Basic Paxos 是 Paxos 的最基础形式——它保证单个提案(proposal)的共识。后续如 Multi-Paxos、Raft 等都可看作是它的扩展。
二、角色与基本概念
Paxos 系统中主要有三个角色:
| 角色名称 | 作用说明 |
|---|---|
| Proposer(提案者) | 负责提出提案(proposal)。 |
| Acceptor(接受者) | 对提案进行投票和接受。 |
| Learner(学习者) | 被通知最终的决议结果。 |
为了方便理解,我们用一个思维导图展示这三者的关系:
三、Paxos 的核心思想
Paxos 的核心目标是:
在网络环境不可靠、节点可能宕机的情况下,也能让多数节点对某个值达成一致。
它通过**两阶段提交(Two-phase commit)**来实现:
- Prepare 阶段(准备阶段)
- Accept 阶段(接受阶段)
如果一个提案在多数节点上得到批准,那么它就是“被选中的提案”,系统即达成共识。
四、阶段一:Prepare 阶段
在 Prepare 阶段中,Proposer 向所有 Acceptor 发送一个包含唯一编号的提案号 n,请求他们“承诺”不再接受比这个编号更小的提案。
Acceptor 的响应规则:
- 如果收到的提案号
n比它之前见过的提案号都大,就承诺不再接受较小的提案。 - 如果它之前已经接受过某个提案,则返回该提案的值及编号。
下面是阶段一的通信流程(时序图展示):
五、阶段二:Accept 阶段
当 Proposer 收到多数 Acceptor 的承诺响应后,它将进入阶段二,发送提案内容(编号 n 与提议的值 v)进行正式投票。
Acceptor 的行为:
- 若当前看到的最高承诺编号 ≤ 提案编号
n,则接受该提案。 - 否则,拒绝。
最终,当有多数 Acceptor 接受了同一个提案时,该值被认为是被选中的值(Chosen Value)。
下面是对应流程图:
六、为何 Paxos 能保证一致性
Paxos 算法关键在于:
- 提案编号单调递增 —— 保证新提案不会与旧提案冲突。
- 多数派原则 —— 任意两个多数集合必然有交集,确保旧提案信息可被新提案继承。
- 两阶段确认 —— 防止并行提案导致冲突。
这一设计使 Paxos 即使某些节点失效,也能保持一致性,不会产生不同的决议。
七、Paxos的故障恢复机制详解(Fault Recovery)
分布式系统中的故障是常态——节点宕机、网络分区、消息丢失在大型集群中经常发生。
Basic Paxos 设计的最大亮点之一,就是能够在部分节点故障的情况下仍保证一致性与正确恢复。
Paxos 的故障恢复主要体现在以下几个层面:
1️⃣ 临时节点故障(Acceptor/Proposer宕机)
(1)多数原则确保共识继续进行
Paxos 要求提案只需获得多数节点同意即可达成共识。
因此,即便少数节点临时宕机,仍不会影响整个系统的决议。
(2)宕机节点恢复后的处理逻辑
当节点重新上线后:
- 加载本地持久化的状态(存储过的最大提案号与已接受提案)。
- 再次参与新的 Paxos 流程。
- 通过从其他节点学习最新决议(Learner机制),保持状态一致。
如下图展示了节点故障恢复的基本流程:
2️⃣ Proposer故障恢复
在实际系统中,Proposer可能在提案进行中断开连接或宕机。
Basic Paxos允许其他节点成为新的Proposer并继续发起提案。
为避免提案冲突,新 Proposer须遵守以下策略:
- 使用比已知最高提案号更大的编号(例如上一轮最大编号为 n,则新提案号取 n+1)。
- 重新发起 Prepare 阶段,收集多数 Acceptor 的承诺。
- 若存在旧提案已被部分接受,则继承那些提案的值,保证上一轮结果不会丢失。
如下用时序图展示 Proposer 故障恢复的过程:
3️⃣ 持久化机制保证数据安全
每个 Acceptor 都需对以下内容实施持久化存储:
- 已响应(Promise)的最大提案编号
n_max; - 已接受的提案内容
(n, v)。
这样即便系统或者节点突然宕机,只要本地磁盘数据不丢失,重启后仍然能依据持久化数据恢复现场。
这就保证:
- 过去多数接受的提案结果不会被遗忘;
- 新一轮提案仍可延续旧提案的共识状态;
- 系统在多次故障恢复后仍保持强一致性。
4️⃣ 网络分区与消息重传机制
在分布式环境中,网络分区可能导致部分节点暂时无法通信。
Paxos 通过以下策略应对:
- 超时重试机制:若 Proposer 未收到多数响应,则自动超时并重新发起新提案(提案号 +1)。
- 冗余消息策略:同一请求可多次发送,重复消息由 Acceptor 根据提案号去重。
- 异步恢复:当分区恢复后,故障节点可学习最新共识结果(通过 Learner 模块)。
如下图所示:
5️⃣ Learner的状态同步机制
Learner 是整个系统保持最终一致性的关键角色。
在故障恢复阶段:
- Learner 可从多数 Acceptor 拉取已决定的提案值;
- 若 Learner 自身发生故障,恢复后即可从其他 Learner 获取已达成的决议;
- 多个 Learner 保持实时同步,最终保障系统状态一致。
:Basic Paxos协议初探&spm=1001.2101.3001.5002&articleId=144693088&d=1&t=3&u=a6842e0148c34ecf9077085f5320b154)
1923

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



