概述
Paxos算法是Lamport创造基于消息传递的一致性算法,包括Google的Chubby在内很多系统都应用了Paxos算法,Google Chubby[1]有下面的描述:
all working protocols for asynchronous consensus we have so far encountered have Paxos at their core. |
---|
足见该算法在分布式系统中的地位。
背景说明
Paxos解决的问题是,在分布式系统中系统间如何就一个不可变变量达成一致,仅此而已!但是在该算法的基础之上我们可以做非常有意义的事情,比如Google Chubby就是对Multi-Paxos算法的工程实现,Multi-Paxos
算法的基础就是Paxos,通俗来说,就是多个轮次的Paxos算法的执行,确定一系列不可能变量的值,如果各个节点初始状态一致,再执行相同的操作序列(即确定的一系列不可变变量的值),那么最终结果必然也是一致的。这是可以应用于系统容错和系统一致性上的。
条件约束
在分布式系统一致性领域有一个号称定理的结果 FLP Impossibility[2][3], 在异步通信环境下,没有一个算法可以保证数据一致性。我们能够做的就是尽可能的在Liveness和Safety之前找到一个平衡,这和CAP很相像。
Paxos做了如下保证:
Liveness:
只要存在多数派,并且多数派之间网络是联通的,则:
- 肯定会有提议被接受
- 被接受的提议肯定可以被其他进程学习到
Safety:
Do not be eval ! 保证不做错的事情
- 只有一个值被确定或者批准,不能出现第二个值把第一个值覆盖的情况
也是两个约束条件是Paxos的算法根基。
推导过程
举个栗子: 假设,三个进程 Pi、Pj和Pk 想就变量V达成一致。
最直接的想法:
P1: “进程集合中的任一进程向其他所有进程提议V的值& |
---|