raft算法理论与实践

前言

我计划写raft的一系列文章,包含从理论到代码实践,此文章依托于MIT的研究生课程。

背景

raft 是一种分布式的共识算法,其目的是要实现多个节点集群的容错性,一致性从而能够构建大规模的软件系统。
在raft之前,比较有名的是Paxos。但是paxos难于理解。
raft的诞生是为了让共识算法更容易理解,在工程上更容易实现。

和其他的共识算法不同的是,raft具有下面的特点:
1、leader:raft中会有一个领导者具有超级权限,可以把自己的log 复制到其他节点中。
2、leader election: raft每隔一段随机的时间就会进行leader的选举
3、raft允许集群配置变化时正常运行。

Replicated state machine

状态机是分布式系统中的一个重要概念,任何一个系统的最终状态都可以看成是每一个操作的集合。因此,算法会维护一份replicated log,将每一份操作都存储起来。
每一个节点只要按顺序执行log中的命令,就会到达相同的最终状态。这样,即便是系统奔溃也可以快速的恢复。
共识算法需要保证relicated log的一致性,服务器收到客户端发出来的执行命令Command后,会将其加入到log中。
服务器之间会相互的交流,保证最后的log的一致性(即便服务器奔溃),即Command 会复制到其他服务器的log中,所有服务器的log是相同的,有序的。
其他服务器会执行此log,即会执行此命令。最后,所有的服务器都会到达同一个状态。

共识算法必须满足下面的属性:
1、在极端情况下(丢包、奔溃)任然能够保证安全性。
2、大多数节点正常的情况下能够保证可用。
3、不能依靠时间戳去保证log的一致性。
4、当大部分的节点通过RPC远程调用交流 达成共识后,command就可以被确认和执行。小部分节点的不稳定不会影响整个系统。

raft basic

raft集群一般保持奇数个数量(5个节点比较普遍). 从而只要大部分节点存活,即可用。
raft中的节点有3种状态。 leader, Candidates, follower。
1、一般的状态只会存在一个leader,其余的节点都是follower。
2、leader会处理所有的客户端请求, 如果是客户端请求follower,也会被转发到leader处理。
3、Candidates 是一种选举时候的过渡状态,用于自身拉票选举leader。

在raft中会有一个叫做term的时间周期。term是以选举leade

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值