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提交。