Raft 协议

Raft 协议

一、Raft概述

  • 分布式系统开发首选的共识算法。
  • Raft 算法是一切以领导者为准的方式,实现一系列值的共识和各节点日志的一致。
  • 用于管理日志一致性的协议。

1.1 raft协议是什么?

分布式系统之于单机系统,优势之一就是有更好的容错性,分布式系统会对数据做备份(backup)。
一个系统的工作模式:接受客户端的command,系统进行处理,将处理的结果返回给客户端。由此可见,系统里的数据可能会因为command而变化。
实现备份的做法之一就是复制状态机(Repilcated State Machine,RSM)。它有一个很重要的性质——确定性(deterministic):
- 如果两个相同的、确定的状态从同一状态开始,并且以相同的顺序获得相同的输入,那么这两个状态机将会生成相同的输出,并且结束在相同的状态,
也就是说,如果能按顺序将command作用于状态机,它就可以产生相同的状态和相同的输出。
那么一个状态机如何实现呢?如下图所示(来自raft协议):
在这里插入图片描述上图中,每个RSM都有一个replicated log,存储的是来自客户端的commands。每个RSM中replicate log中comands的顺序都是相同的,状态机按顺序处理replicate log中的command,并将处理的结果返回给客户端。由于状态机的确定性,因此每个状态机的输出和状态都是相同的。
上图有一个模块——Consensus Module。这个模块用于保证每个server 上 Log 的一致性!
- 如果不做任何保障,直接将command暴力写入,一旦服务器宕机或者出现其他故障,就会导致这个Log丢失,并且无法恢复。而出现故障的可能性是很高的,这就导致系统不可用
- raft 就是 Consensus Module的一个实现

因此,raft是一致性协议,是用来保障servers上副本一致性的一种算法。

为了让一致性协议变得简单可理解,Raft协议主要使用了两种策略。一是将复杂问题进行分解,在 Raft协议中,一致性问题被分解为:leader election、log replication、safety三个简单问题;二是减少状态空间中的状态数目。

1.2 Raft一致性算法

在Raft体系中,有一个强leader,由它全权负责接收客户端的请求命令,并将命令作为日志条目复制给其他服务器,在确认安全的时候,将日志命令提交执行。当leader故障时,会选举产生一个新的leader。在强leader的帮助下,Raft将一致性分解为三个子问题:

  1. leader选举:当已有的leader故障时必须选出一个新的leader;
  2. 日志复制:leader接受来自客户端的命令,记录为日志,并复制给集群中的其他服务器,并强制其他节点的日志与leader保持一致;
  3. 安全safety措施:通过一些措施系统的安全性,如确保所有状态机按照相同顺序执行相同命令的措施。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值