一、Paxos 是什么?
想象你和几个朋友在群里商量今晚吃什么:
- 有人提议吃火锅,有人提议吃烧烤。
- 但网络不好,有人掉线、消息乱序,甚至有人中途改主意。
- 你们必须达成一致:今晚到底吃什么?
Paxos 就是为了解决这个问题的算法!它让多个节点(服务器)即使在网络延迟、节点宕机的情况下,也能就某个值(比如“吃火锅”)达成一致。
二、Paxos 的三个角色
1. 提议者(Proposer)
- 职责:提出建议(比如“吃火锅”),并附带一个编号(比如100)。
- 特点:可以是任意节点,但编号必须唯一。
2. 接受者(Acceptor)
- 职责:决定是否接受提议。
- 特点:每个提议必须获得多数接受者的通过。
3. 学习者(Learner)
- 职责:最终知道结果(比如“今晚吃火锅”)。
- 特点:不参与投票,只是“看结果”。
三、Paxos 的核心流程(两轮投票)
1. 准备阶段(Prepare)
- Proposer 发送编号(比如100)给 Acceptor,问:“你们有没有接受过比100更小的提议?”
- Acceptor 回复:
- 如果没接受过提议,就说“没接受过”。
- 如果接受过旧提议(比如编号99的“吃烧烤”),就告诉 Proposer:“我之前接受过‘吃烧烤’”。
2. 接受阶段(Accept)
- Proposer 根据 Acceptor 的回复决定是否提交自己的值:
- 如果大多数 Acceptor 说“没接受过”,Proposer 提交自己的值(比如“吃火锅”)。
- 如果 Acceptor 提到旧值(比如“吃烧烤”),Proposer 必须放弃自己的提议,使用旧值。
3. 学习阶段(Learn)
- Learner 从 Acceptor 那里获取最终达成一致的值。
- 一旦大多数 Acceptor 接受同一个值,系统达成一致。
四、Java 实现 Paxos 的核心代码
// Proposer:提议者
class Proposer {
public void propose(String value) {
long proposalNumber = 生成唯一编号(); // 比如100
List<PrepareResponse> responses = new ArrayList
Paxos算法:分布式系统一致性解决方案

最低0.47元/天 解锁文章

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



