Paxos与Raft

Paxos

解决了一致性问题。

在一个分布式系统中,每个 proposer都可以提出一个 value,consensus 算法就是用来从这些 values 里选定一个最终 value。如果没有 value 被提出来,那么就没有 value 被选中;如果有1个 value 被选中,那么所有的 process 都应该被通知到。

Paxos 例子说明

  • 无人竞争,超过半数即可通过提案
  • 先后竞争,先到先得,回复当前选择;同时竞争,先到先得,视后到者身份不同,可能有回复,可能无回复

Raft

Raft 是一种为了管理复制日志的一致性算法。

一致性
一致性算法允许一组机器像一个整体一样工作,即使其中一些机器出现故障也能够继续工作下去。

管理日志
一致性算法是从复制状态机的背景下提出的,复制状态机通常都是基于复制日志实现的,这个日志可以理解为一个指令。

领导人选举

Raft 通过选举一个领导人,然后给予他全部的管理复制日志的责任来实现一致性。

每个 server 都可能会在 3 个身份之间切换:领导者、候选者、跟随者

所有服务器初始化的时候,都是 跟随者,这个时候需要一个 领导者,所有人都变成 候选者,直到有人成功当选 领导者

领导者也有宕机的时候,宕机后引发新的 选举,所以,整个集群在选举和正常运行之间切换

每一个 server 最多在一个任期内投出一张选票(有任期号约束),先到先得。

一旦成功,立即成为领导人,然后广播所有服务器停止投票阻止新得领导产生。

日志复制

客户端发送日志给领导者,随后领导者将日志复制到其他的服务器。如果跟随者故障,领导者将会尝试重试。直到所有的跟随者都成功存储了所有日志。

步骤

  1. 客户端提交
  2. 复制数据到所有跟随者
  3. 跟随者回复 确认收到
  4. 领导者回复客户端和所有跟随者 确认提交

   转载规则


《Paxos与Raft》 wangyixin-tom 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
python多线程同步 python多线程同步
Condition相关函数acquire() — 线程锁,注意线程条件变量Condition中的所有相关函数使用必须在acquire() /release() 内部操作; release() — 释放锁; wait(timeout) — 线
2021-06-26
下一篇 
2PC与3PC 2PC与3PC
2PC二阶段提交就是将事务的提交过程分成了两个阶段来进行处理。 阶段一 事务询问协调者向所有的参与者询问,是否准备好了执行事务,并开始等待各参与者的响应。 执行事务各参与者节点执行事务操作,并将 Undo 和 Redo 信息记入事务日志中
2021-06-23
  目录