前言
世界上只有一种一致性算法,就是 Paxos。出自一位 Google 大神之口。Paxos 也是出名的 晦涩难懂,推理过程极其复杂。
Paxos 有点类似之前说的 2PC,3PC,但是解决了这两种算法各种硬伤。该算法在很多大厂都得到了工程实践,比如阿里的 OceanBase 的 分布式数据库,底层就是使用的 Paxos 算法。再比如 Google 的 chubby 分布式锁 也是用的这个算法。可见该算法在分布式系统中的地位,甚至于,Paxos 就是 分布式一致性 的代名词。
正文
1. Paxos算法是什么
Paxos 算法是 基于消息传递 且具有 高效容错特性 的一致性算法,目前公认的解决 分布式一致性问题 最有效的算法之一.
2. Paxos算法产生背景
2.1. 拜占庭将军问题
拜占庭是古代东罗马帝国的首都,由于地域宽广,守卫边境的多个将军(系统中的多个节点)需要通过信使来传递消息,达成某些一致的决定。但由于信使中可能存在叛徒(系统中节点出错),这些叛徒将努力向不同的将军发送不同的消息,试图会干扰一致性的达成。
2.2. Paxos算法由来
故事背景是古希腊 Paxos 岛上的多个法官在一个大厅内对一个议案进行表决,如何达成统一的结果。他们之间通过服务人员来传递纸条,但法官可能离开或进入大厅,服务人员可能偷懒去睡觉。
2.3 产生背景
在常见的 分布式系统 中,总会发生 节点宕机 或 网络异常 (包括消息的 重复、丢失、延迟、乱序、网络分区) 等情况。
Paxos 算法主要就是解决如何在一个 发生如上故障 的分布式系统中,快速正确的在集群内 对某个值达成一致,并且保证 整个系统的一致性。
3. 算法详解
3.1 角色 & 提案
提案 (Proposal)
注意:提案的范围>value.后面会讲到,[提案=编号+Value].也可表示为[M,V].
以下描述中暂定: 提案=P,Value=V.
角色
- Proposer : Proposer 可以 提出提案 (Proposal)。
- Accecptor : Acceptor 可以 接受提案。一旦接受提案,