Paxos 算法
Paxos 算法(CP)
少数服从多数,最终达成一致。
基本概念
- Proposer: 提案人
- Proposal:提案
- proposal id
- value 决策
- Proposal:提案
- acceptor 决策者
- learner 学习者
约束
- 决策(value)只有被提案人(proposer)提出之后才能被批准(chosen)
- 一次 paxos 算法执行的实例中,只批准(chosen)一个值(value)
- 学习者(learners)只能获得被批准(chosen)的提案(value)
paxos 算法就是对上面的约束不断加强得到的。
情景一:一个分布式系统,存在多个提案人同时提出提案,多个决策者接收提案。
proposer1 --> 提出 value=A
proposer2 --> 提出 value=B
acceptor1
acceptor2
acceptor3
注意:这些提案中,只有一个提案会被接收
一个提案必须被半数以上的 acceptor 接收
P1 约束
一个 acceptor 必须接收第一次收到的提案
P2 约束
如果某个 value 为 v 的提案被批准,那么之后批准的提案必须具有 value v
P2a
一旦一个具有 value v 的提案被批准,那么之后任何 acceptor 再次接收的提案必须具有 value v
P2b
一旦一个具有 value v 的提案被批准,那么以后任何 proposer 提出的提案必须具有 value v
p2c
如果一个编号为 n 的提案具有 value v,该提案被提出,那么存在一个多数派,要么他们中所有人都没有接受(accept)编号小于 n 的任何提案(这里指的是 n 是 acceptor 接收到第一个提案),要么他们已经接受(accept)的所有编号小于 n 的提案中编号最大的那个提案具有 value v(这里指的是在接收编号 n 提案之前,已经接收到了其他编号小于 n 的提案)。
p1a
当且仅当 Acceptor 没有回应过编号大于 n 的 prepare 请求时,Acceptor 接受(accept)编号为 n 的提案。