分布式理论分布式理论Paxos, Raft
一、一、Paxos算法算法
世界上只有一种一致性算法,就是 Paxos,其它的算法都是残次品,但Paxos非常复杂难懂。
算法原理参考:Paxos的通俗解释 Paxos共识算法详解
算法例子参考:如何浅显易懂地解说 Paxos 的算法?
Paxos算法的核心问题是:解决分布式系统的一致性的问题,所有问题均围绕着在分布式环境达成一致性而展开讨论的。
预备知识预备知识
术语术语:
proposer:提案者,它可以提出一个提案。
acceptor:提案的受理者,有权决定是否它本身是否批准该提案。
learner:不参与Paxos提案选定的过程,只在提案被选定时,知道提案结果的角色。
proposal:由Proposer 提出的提案,每个提案由编号及value组成,如[m, value],提案的编号必须是全局唯一,value即代表了提案本
身的内容。
choose:提案被选定,当有半数以上Acceptor批准该提案时,就认为该提案被选定了。
提案编号提案编号:
有专门的编号生成算法,只需要知道它是全局唯一且递增的就行了,就是说越新的提案,编号越大。
通信条件通信条件:
系统所有消息均存在延迟、丢失、重复的可能,系统也可以随时会重启。
系统所有的消息不存篡改的问题,也即不存在拜占庭的问题。
算法过程算法过程
跳过复杂的推理过程,直接给出算法过程。
Learner不参与投票过程,为了简化描述,我们直接忽略掉这个角色。
算法分为两个阶段执行。
阶段阶段1.
proposer:选择一个提案编号Mn,向超过半数的acceptor发送编号为Mn的prepare请求请求。
acceptor:如果接收到编号为Mn 的prepare请求,并且Mn大于它已经回应的任何prepare请求,它就回复Promise响应响应,返回已经批
准的编号最高的提案的value(如果有的话),并承诺不再批准任何编号小于Mn的提案。
阶段阶段2.
proposer :
如果收到了多数acceptor对prepare请求Mn的回应,它就向这些Acceptor发送提案[Mn, Mv]的accept请求请求,其中Mn的值为:
响应带回了其他的已批准的提案,所有prepare请求响应中编号最大的已批准提案的value(相当于放弃自己的提案,变成复读机)。
响应没有带回其他的已批准的提案:proposer 自己选择的value(相当于还没有其他提案被批准过,该proposer获得first blood)。
没有收到多数acceptor对prepare请求Mn的回应:回到第一步重新发起提案。
acceptor:如果收到了提案[Mn, Mv]的accept请求,它就回复accepted响应响应,批准该提案,除非它已经回应了一个编号大于Mn的提
案。
算法过程图示算法过程图示