Paxos是一种提高分布式系统容错性的一致性算法。
推荐《从 Paxos 到 ZooKeeper 分布式一致性原理与实践》书,概述讲述的更详细一点,
1、问题描述
一致性算法要保证如下几点;
- 在被提出的提案中,只有一个会被选定。
- 没有提案被提出时,不会有提案被选定。
- 当某提案被选定后,进程应该可以获取被选定的提案信息。
- 安全性需求:
- 只有被提出的提案才能被选定。
- 只能有一个值被选定。
- 如果进程认为某个提案被选定了,那么该提案必须是真的被选定那个。
2、提案的选定
当提案被多个Acceptor通过后,我们就认为提案被选定。前提是:每个Acceptor最多只能批准一个提案。
3、Paxos一致性算法的条件
- 一个Acceptor必须批准它收到的第一个提案。([编号,Value])
- 如果编号为M0、Value值为V0的提案被选定了,那么所有比编号M0更高的,且被选中的提案,其Value值必须也是V0.(简单来说:就是如果提案被选中,编号M必须最大。)
- a:如果编号为M0,Value值为V0的提案被选定了,那么所有比编号M0更高的,且被Acceptor批准的提案,其Value值必须也是V0。
- b:如果一个提案[M0,V0]被选定后,那么之后任何Proposer产生的编号更高的提案,其Value值都为V0。