分布式一致性算法

分布式一致性问题,即一个分布式系统中的各个进程如何就某个值(决议)达成一致。

Paxos

Paxos将系统中的角色分为提议者 (Proposer),决策者 (Acceptor),和最终决策学习者 (Learner)。Proposer: 提出提案,Acceptor:参与决策,Learner:不参与决策,学习决策。
在这里插入图片描述

第一阶段:Prepare阶段。Proposer向Acceptors发出Prepare请求,Acceptors针对收到的Prepare请求进行Promise承诺。
第二阶段:Accept阶段。Proposer收到多数Acceptors承诺的Promise后,向Acceptors发出Propose请求,Acceptors针对收到的Propose请求进行Accept处理。
第三阶段:Learn阶段。Proposer在收到多数Acceptors的Accept之后,标志着本次Accept成功,决议形成,将形成的决议发送给所有Learners。

在这里插入图片描述
两个承诺:

  • 不再接受Proposal ID小于等于(注意:这里是<= )当前请求的Prepare请求。
  • 不再接受Proposal ID小于(注意:这里是< )当前请求的Propose请求。

一个应答:

  • 不违背以前作出的承诺下,回复已经Accept过的提案中Proposal ID最大的那个提案的Value和Proposal ID,没有则返回空值。

Raft (etcd使用raft算法)

Raft集群包含2n+1个服务器,可以容忍n台故障。每个服务器都处于以下三种状态之一,领导者(Leader),追随者(Follower)或候选人(Candidate)。 这几个状态见可以相互转换。

Leader:处理所有客户端交互,Follower:类似选民,完全被动,Candidate:可以被选为一个新的Leader。
在这里插入图片描述

  1. Raft使用心跳机制来触发领导者选举。 当服务器启动时,它们以Follower的身份开始。 只要服务器从Leader或Candidate接收到有效的RPC请求,服务器就会保持Follower状态。 Leader向所有Follower发送定期心跳(以保持其权限。 如果一个Follower在称为选举超时的一段时间内没有接到任何通信,该Follower认为没有可行的领导者并开始选举新的Leader。节点通过随机timeout进行选举,收到超过半数投票的Candidate成为Leader。

  2. 一旦Leader当选,它就开始为客户请求提供服务。每个客户端请求包含由复制状态机执行的命令。Leader将命令作为新条目附加到其日志,然后并行地向每个其他服务器发出AppendEntries RPC以复制条目。当条目被安全地复制时,Leader将条目应用于其状态机并将该执行的结果返回给客户端。如果Follower崩溃或运行缓慢,或者网络数据包丢失,Leader将无限期地重试AppendEntries RPC(即使它已经响应客户端),直到所有Follower最终存储所有日志条目。

在这里插入图片描述

Zab (zookeeper使用Zab算法)

Zab和raft算法很相似

  1. 都是共识算法,写数据时都需要大部分成功才能把日志应用到状态机。
  2. 都有随机timeout选主、日志对齐、数据广播的流程。
  3. 都把数据分成快照+日志。

在一些细节地方有区别,不影响整体思想相似。

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页