分布式一致性算法——Paxos和Raft

资料参考来源拉钩Java高薪训练营


一、Paxos

1.Paxos介绍

自Paxos问世以来就持续垄断了分布式一致性算法,Paxos这个名词几乎等同于分布式一致性。Google的很多大型分布式系统都采用了Paxos算法来解决分布式一致性问题,如Chubby、Megastore以及Spanner等。开源的ZooKeeper,以及MySQL 5.7推出的用来取代传统的主从复制的MySQL Group Replication等纷纷采用Paxos算法解决分布式一致性问题。

Paxos的最大特点就是难,不仅难以理解,更难以实现。

Paxos是分布式系统中通用一致性方案的一种算法,Paxos能达到最终一致性。

2.主要角色

  1. Proposer:提案发起者,多个
    提案者提倡客户请求,试图说服Acceptor对此达成一致,并在发生冲突时充当协调者以推动协议向前发展
  2. Acceptor:决策者,可以批准提案,多个
    Acceptor可以接受(accept)提案;如果某个提案被选定(chosen),那么该提案里的value就被选定了
  3. Learners:最终决策的学习者,多个
    所有节点学习被选定的提案

3.提案规则和提案流程

  • 提案规则
  1. 如果Acceptor没有接收过提案,那么就接收最先到达的提案。
  2. Proposer提案时,如果Acceptor已经接收过提案,那么提案的value必须是Acceptor上次接收过的value。
  3. Acceptor接收提案时,要求提案编号不能比上次小,如果小则忽略。要求提案的value值必须和上次接收的value一样。
  • 提案流程
  1. Proposer发起第一阶段提案,携带提案编号为,假如为N。
  2. Acceptor接收到这个提案,首先判断自己之前是否已经接收过提案,(1).如果没有接收过,返回可以接收这个提案的信息给Proposer。如果之前已经接受过提案,先判断Proposer发起的提案编号N是否大于自己已接受的最大提案编号,(2).大于则返回可以接收提案并且返回之前接收的最大编号的提案value值,(3).小于的话就忽略提案或者拒绝提案。
  3. 针对第二步的3种情况:(1).Proposer发起第二阶段提交,并自己设置value值。(2).Proposer发起第二阶段提交,并设置value为Acceptor返回的value。(3).Acceptor无响应或者返回错误,Proposer编号N+1,重新发起第一阶段提案。
    在这里插入图片描述

4.Paxos的应用场景

https://www.jianshu.com/p/dbb7da189b51

二、Raft

1.介绍

Raft 是一种为了管理复制日志的一致性算法。
Raft 提供了和Paxos算法相同的功能和性能,但是它的算法结构和Paxos不同。Raft 算法更加容易理解并且更容易构建实际的系统。
Raft 将一致性算法分解成了3模块:

  1. 领导人选举
  2. 日志复制
  3. 安全性
    Raft 算法分为两个阶段,首先是选举过程,然后在选举出来的领导人带领进行正常操作,比如日志复制等。

2.领导人Leader选举

Raft通过选举一个领导人,然后给予他全部的管理复制日志的责任来实现一致性。
在Raft中,任何时候一个服务器都可以扮演下面的角色之一:

  • 领导者(leader):处理客户端交互,日志复制等动作,一般一次只有一个领导者
  • 候选者(candidate):候选者就是在选举过程中提名自己的实体,一旦选举成功,则成为领导者
  • 跟随者(follower):类似选民,完全被动的角色,这样的服务器等待被通知投票

Raft使用心跳机制来触发选举。当server启动时,初始状态都是follower。每一个server都有一个定时器,超时时间为election timeout(一般为150-300ms),如果某server没有超时的情况下收到来自领导者或者候选者的任何消息,定时器重启,如果超时,它就开始一次选举。

具体选举详情可以查看动画演示就很清楚了:
http://thesecretlivesofdata.com/raft/

3.日志复制

Leader选出后,就开始接收客户端的请求。Leader把请求作为日志条(Log entries)加入到它的日志中,然后并行的向其他服务器发起 AppendEntries RPC复制日志条目。当这条日志被复制到大多数服务器上,Leader将这条日志应用到它的状态机并向客户端返回执行结果。
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值