Paxos 算法是非拜占庭容错的, 使用二阶段提交的分布式共识算法, 实现了共识和可用性.

Paxos 算法

组成

  • Basic Paxos
  • Multi-Paxos

概念

  • 提案
  • 准备(Prepare)请求
  • 接受(Accept)请求
  • 角色

三种角色

  • 提议者(Proposer), 提议一个值,用于投票表决。
  • 接受者(Acceptor), 对每个提议的值进行投票,并存储接受的值.
  • 学习者(Learner), 被告知投票的结果,接受达成共识的值,存储保存,不参与投票的过程。

image.png

达成共识过程

1. 准备(Prepare)阶段

选择 提案编号 大的提案.

image.png

image.png

2. 接受(Accept)阶段

image.png

image.png

其他

二阶段提交用来实现:

  • 分布式事务
    • 不能容错, 所有节点都同意才能进行
  • Paxos 算法
    • 实现了容错, 大多数节点同意
  • 本质上而言,提案编号的大小代表着优先级

根据提案编号的大小,接受者保证三个承诺,具体来说:

  • 如果 准备请求 的提案编号,小于等于接受者已经响应的准备请求的提案编号,那么接受者将承诺不响应这个准备请求;
  • 如果 接受请求 中的提案的提案编号,小于接受者已经响应的准备请求的提案编号,那么接受者将承诺不通过这个提案;
  • 如果接受者之前有通过提案,那么接受者将承诺,会在 准备请求的响应 中,包含已经通过的最大编号的提案信息