分布式一致性算法Paxos!

在常见的 分布式系统 中,总会发生 节点宕机网络异常 (包括消息的 重复丢失延迟乱序网络分区) 等情况。

Paxos 算法主要就是解决如何在一个 发生如上故障 的分布式系统中,快速正确的在集群内 对某个值达成一致,并且保证 整个系统的一致性

  • 这里某个数据的值并不只是狭义上的某个数,它可以是一条日志,也可以是一条命令。
  • 根据应用场景不同,某个数据的值有不同的含义。

image-20231012113713037

角色:

Proposer : Proposer 可以 提出提案 (Proposal)。

Accecptor : Acceptor 可以 接受提案,一旦接受提案,提案 里面的 value 值就被选定了。

Learner : Acceptor 告诉 Learner 哪个提案被选定了,那么 Learner 就学习这个被选择的 value

算法流程:

学习阶段:Prepare请求

Proposer 选择一个新的提案 向 Acceptor 集合 (数目在半数以上)发送请求,要求 每一个 Acceptor 做出如下响应:

  • 如果 Acceptor 没有接受过提案,则向 Proposer 保证 不再接受编号小于N的提案

  • 如果 Acceptor 接受过请求,则向 Proposer 返回 已经接受过的编号小于N的编号最大的提案

接受阶段:Acceptor请求

如果 Proposer 收到 半数以上Acceptor 响应,则 生成编号为 NvalueV 的提案,V 为所有响应中 编号最大 的提案的 value

如果 Proposer 收到的响应中 没有提案,那么 valueProposer 自己生成,生成后将此提案发送,并期望 Acceptor 能接受此提案。

image-20231012113713037