代码改变世界

paxos raft zab

2020-12-07 21:06  Tony、  阅读(107)  评论(0编辑  收藏  举报

三者都是强一致性算法(cp)的理论基础。如何体现出CP?因为leader存在单点,当leader挂了之后,再重新选举出leader这个时间段内是不可用的。

paxos 有多个版本,basic paxos和multi paxos。

basic paxos

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 multi paxos

 

 

 

Basic Paxos的问题:难实现、效率低(每次选举都有prepare的过程)、活锁,每次提交事务 都要有议案 议案通过之后在进行2pc提交

Multi Paxos: 只有在第一次事务提交 没有leader的时候 会找选举leader的过程 在leader选举的时候会有议案过程 以后得事务提交 因为leader已经存在了 所以就没有议案的过程了 直接进行2pc提交;

Raft zab

这个两种一致性算法是从Multi Paxos衍生而来。

Raft

划分出了三个问题
  leader选举
  日志记录
  安全(数据恢复)
1 每个节点有三个角色
  leader 主节点
  follow 从节点
  candidate 当节点要竞选为leader时候的角色 是个瞬间角色
2 两个阶段
  2.1 选择leader阶段
  2.2 提交数据
只能提交给leader 然后由leader向follow节点同步 过半节点接受即可
3 leader和follow节点心跳监控
  由leader节点固定时间给follow发心跳包 follow自身会维护一个定时器 在定时的时间内如果没有收到leader的心跳包 就认为leader挂了 然后发送选举自己为leader

zab

基本同raft一直 不同点
1 节点的角色类型不一样 没有candidate这个角色 多了一个observe的角色
  leader
  follow
  looking. 和raft的candidate差不多
  observe 用来做读 不参与选举leader
2 提交数据不一样
  leader和follow数据可以提交给follow 但是follow会将请求转给leader 由leader写 然后向follow同步 过半即可
3 节点心跳监控原理不一样
  由follow定时给leader发送心跳 如果心跳失败 follow就认为leader挂掉 选举自己为leader

raft和zab相对于Multi Paxos来说,在选举leader的过程中 阉割吊了 议案的过程,只有一个2pc提交。