手把手教你:Paxos:分布式系统的“吃饭决策术”(大白话版)

Paxos算法:分布式系统一致性解决方案

一、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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值