一致性算法Paxos和Raft

作为一个资深火影迷,什么都喜欢往火影里套,下边用一个不那么贴切的类比来帮助自己理解一致性。

  • 强一致性:鸣人发动多重影分身之术,每个鸣人都手举一个大玉螺旋丸,砸向了九喇叭,整个过程中,所有的鸣人状态都是一致的。
  • 最终一致性:鸣人先发送后宫色诱术,变成了银发双马尾大波浪女,发现这招对大筒木辉夜不起作用,于是又变回了自己,在这个过程中,部分鸣人的状态不一致,但最终所有的鸣人状态都一致了。

1 Paxos

通过消除单点故障来解决一致性问题。

1.1 三个重要概念
  1. 提议者(Proposer):提议一个值(法官或律师)
  2. 接受者(Acceptor):对每个提议进行投票(评审员)
  3. 告知者(Learner):被告知投票的结果,不参与投票(原告被告亲属)

用于达成共识问题,也就是评审员意见达成一致后,向法官宣读评审结果,即对多个节点产生的值,保证只选出唯一一个。

1.2 BasicPaxos
1.2.1 提议过程
  • 获取一个提议序号,提议者向网络内超过半数的接受者发送prepare消息
  • 接受者正常情况下回复promise消息

如果还没最终认可一个值,他就会不断认同提议序号最大的那个提议。

1.2.2 决议过程
  • 在有足够多的acceptor回复promise消息时,提议者发送accept消息
  • 正常情况下,接受者回复accepted消息。
1.3 FastPaxos

后续再总结学习,还没理顺。

1.4 两个约束条件
  • 正确性:只有一个提议值会生效,且是少数服从多数。(评审团的最终意见,是被大众所接受的,正所谓群众的眼睛是雪亮的)
  • 可终止性:最后都只会有一个评审结果,朝着被多数评审员接受的提议靠拢。(不管是一审还是二审,庭判终究会结束,终究会结案)

2 Raft

和Paxos类似,但更容易理解,也更容易实现,主要是用于竞选主节点。
同Paxos,有三种节点:追随者、候选人和领袖。

  1. 单个候选人的竞选
  2. 多个候选人的竞选
  3. 日志复制
2.1 单个候选人的竞选
  1. 领袖会周期性发送心跳包给追随者;
  2. 每个追随者都设置了一个随机的竞选超时时间,一般是150ms~300ms;
  3. 如果在这个时间内没有收到领袖的心跳(网络阻塞等原因),就会变成候选人,进入竞选阶段;
  4. 如果有多数节点回复了候选人,则候选人就会变成领袖。
2.1.1 领袖会周期性发送心跳包给追随者

一开始是三个普通节点,假设左下角的节点(黑圈节点)给另外两个节点发送心跳,另外两个节点同意了左下节点成为领袖,此时,就算某个节点发生了网络阻塞接收不到心跳,左下节点也会自己给自己vote一票,总归是超过半数票,这个过程也就是Leader选举,成为领袖之后,会周期性发送心跳包给追随者。
在这里插入图片描述
当有变更需求时,会第一时间通知领袖,由领袖将请求发给所有的追随者,但有多数节点同意了本次修改,则所有节点提交修改。
在这里插入图片描述

2.1.2 每个追随者都设置了一个随机的竞选超时时间,一般是150ms~300ms

在这里插入图片描述
节点B相较于其他两个节点,先竞选为候选者,B会给另外两个节点发送投票意向选举。
在这里插入图片描述

2.1.3 如果在这个时间内没有收到领袖的心跳(网络阻塞等原因),就会变成候选人,进入竞选阶段

在领袖B给其它节点发送心跳的过程中,其它节点也同样在进行着计时,如果某个时间内A没有收到领袖的心跳,且节点A达到了竞选超时时间,则A会变成候选人。
在这里插入图片描述

2.1.4 如果有多数节点回复了候选人,则候选人就会变成领袖

此时节点A成为了新领袖,向其它节点发送心跳。
在这里插入图片描述

2.2 多个候选人的竞选
  1. 如果有多个追随者成为了候选人,并且票数一样;
  2. 则重新进行投票,由于每个节点设置的随机竞选超时时间不同,因此再次出现多候选人的概率很低。
    在这里插入图片描述
    候选者C、D票数一样,重新进行超时竞选,此时C成为了新的候选者,且赢得了大多数票,成为了领袖。
    在这里插入图片描述
2.3 日志复制
  1. 领袖向追随者发出日志复制的请求,开始日志复制;
  2. 如果复制的过程中,某个追随者与领袖失去了联系,没有接收到领袖的心跳,那么这个追随者成为了候选人;
  3. 如果有其它追随者给他投票,让他成为新的领袖,那么他们会形成一个小团体;
  4. 这个新领袖收到的请求,都会发送给小团体里的每个追随者;
  5. 当网络故障恢复后,这个领袖又会重新成为追随者。

在这里插入图片描述
节点A、B组成了小团体。
在这里插入图片描述

参考文章

搞懂分布式技术2:分布式一致性协议与Paxos,Raft算法
分布式系统的Raft算法
Raft算法动画演示
NEAT ALGORITHMS - PAXOS

结语

本人所有博客仅用于学习记录,不做任何商业用途,如涉及侵权,还请联系删除,感谢阅读,欢迎留言,一起进步~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值