Paxos

Paxos是一个较为基础的分布式算法。

基本Paxos

Phase 1:Prepare & Promise
Proposer向全部Acceptors发送消息,消息内容是提议序列号,PrepareID;

Acceptor收到消息,会比较上次接收的PrepareID,如果此消息中的提议序列号比较小,可以忽略或发送否认;
如果比自己历史接收过的序列号大,就发送Promise,保证自己会在Proposer搞事情的时候响应号召。

假如Proposer得到了大多数Acceptor的Promise,就开始第二阶段。否则放弃,因为得不到大众支持。
Paxos_第1张图片
Phase 2:Accept & Accepted

Acceptor在接收后会向Proposer和Learner(响应客户端请求)发送消息。Learner会更新为最新值,Proposer这里和Learner是一个节点。

Proposer成功情况:
Paxos_第2张图片
Proposer失败情况:
第一个Acceptor在向此Proposer承诺之后,又转而承诺了一个更高版本的Proposer,并发送最新值,Proposer的值更新为最新值。
Paxos_第3张图片

问题也是出现在阶段2失败情况下,假如两个Proposer交替更新Prepare的序列号,也就相互影响都进入不了第二阶段,直接上wiki的图
Paxos_第4张图片

Multi-Paxos

假如Leader是不容易挂掉的,那么Basic Paxos的Phase 1就可以省略了,因为Phase 1的任务就是Leader检测自己与众多Acceptor的连接是否正常。

那么,Acceptor记住自己认定的Proposer的ID,假如一个认定的Proposer发送了Phase 2消息就直接执行;否则通知一个新的Proposer开始第一阶段,走认定手续。

Paxos和Raft的区别

  1. Raft检测集群状态是通过周期性的心跳信息,而不是像Paxos这样用户请求时才检测集群状态。
  2. Raft合并了Proposer和Learner的角色。

References List

  1. Fast Paxos,Leslie Lamport,MSR-TR-2005-112
  2. Paxos Wikipedia

你可能感兴趣的:(分布式与微服务,Algorithm)