1. Paxos算法基础认知
分布式系统领域有个经典段子:当有人宣称"完全理解了Paxos",通常意味着他还没真正搞懂这个算法。作为分布式一致性协议的基石,Paxos以晦涩难懂著称,却支撑着当今无数关键系统的可靠运行。我第一次接触Paxos是在设计金融交易系统时,当时为了确保跨数据中心的数据一致性,不得不直面这个"算法界的魔方"。
Paxos本质上是一种基于消息传递的共识算法,其核心使命是让分布式系统中的多个节点就某个值(value)达成一致。这里的"值"可以是数据库更新操作、配置变更或任何需要集群共同确认的状态变更。与常见的2PC(两阶段提交)不同,Paxos能在节点故障、网络分区的恶劣环境下依然保持系统活性(liveness)和安全性(safety),这正是现代分布式系统最珍视的特性。
关键认知:Paxos不是用来解决所有分布式问题的银弹,它专注解决"在不可靠环境中达成可靠共识"这个特定问题。理解这点才能避免后续的误用。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 算法核心原理拆解
2.1 角色划分的精妙设计
Paxos将参与节点分为三种角色:
- Proposer:提案发起者(如客户端请求的接收方)
- Acceptor:提案审批者(通常由多数服务器节点担任)
- Learner:决策学习者(执行最终确认的值的节点)
这种角色分离的设计极具前瞻性——在实际系统中,一个物理节点可能同时承担多个逻辑角色。比如在ZooKeeper中,Leader节点同时扮演Proposer和Acceptor,而Follower主要作为Acceptor。
2.2 两阶段提交的进化版
Paxos的运作流程可简化为两个阶段(实际实现可能有优化变种):
阶段1:Prepare请求
- Proposer选择一个全局递增的提案编号n,向多数派Acceptor发送Prepare(n)请求
- Acceptor收到请求后:
- 若n大于已响应的任何Prepare请求编号,则承诺不再接受编号小于n的提案,并返回已接受的最高编号提案(如果有)
- 否则拒绝请求
阶段2:Accept请求
- 若Proposer收到多数派Acceptor的响应,则发送Accept(n, v)请求,其中v是收到的最高编号提案的值,或自行提议的值
