美文网首页
raft论文总结

raft论文总结

作者: 小王ovo | 来源:发表于2021-05-20 16:05 被阅读0次

之前都是看别人的文章,这一次自己看了一遍论文,简单总结一下,之后还需要再仔细看看

cap

1.分区容错
2.可用性
3.一致性

raft的一切

1.关键模块

领导人选举,日志复制和安全性

2.重点记录

1.强领导者:日志条目只能从领导者发送给其他服务器。
2.领导选举:使用一个随机计时器来选举领导者。

3.复制状态机

重点:
1.保证日志相同
2.5个节点的集群可以容忍两个节点的失败。

4.paxos的问题

说白了就太难理解了,有没有标准实现。

5.为了可理解性的设计

1.日志不可以有空洞
2.随机化去简化 Raft 中领导人选举算法(这一句暂时没什么直接的理解)

6.raft的一致性算法

1.选举领导人。由领导人负责管理日志复制的责任来实现一致性。

2.这一段主要讲了一些选举的条件

7.raft基础

1.5个节点最多允许失效2个(节点数为2n+1,失效容忍数不能超过节点的一半)。
2.服务的节点角色:领导人,跟随者,候选人
3.正常情况下只允许一个领导人,其他都是跟随者。
4.跟随者都是被动的,只是简单的处理领导和候选的请求。领导人处理客户端的请求
4.如果客户端的请求打到了跟随者,跟随者会把请求重定向到领导人。
5.在一个给定的任其term内只有最多只有一个领导者。
6.term任期在raft中充当逻辑时钟划分整个集群的时间线。
7.如果一个节点发现自己的任期过期了,改节点会立马变成跟随者状态。同理一个节点受到一个过期的请求,那么该节点会直接拒绝这个请求。
8.raft的rpc只有两种。投票(RequestVote)附加条目(AppendEntries)

8.领导人选举

1.领导者周期性的向所有跟随者发送心跳包,如果一个跟随者在一段时间里没有受到任何消息,也就是超时选举,那么他就会认为系统中没有可用的领导者,并且发起选举选出心的领导者。

2.开始选举跟随者的term需要+1,并将自己的角色转换为候选人。然后并行的向集群中的其他服务器发送投票rpc.候选人状态会保持直到三件事情之一发生
1.他自己赢得了这次选举
2.其他服务器成为了领导者
3.一段时间后没有任何人获胜(选举超时)

3.一个任期内只能投票一次,一旦某个候选人成为领导人,那么他就会给其他服务器发送心跳消息来建立自己的权威并阻止新的领导人诞生。

4.为了防止投票被均匀瓜分导致选举失败,raft使用随机选举超时时间解决。选举时间是在150-300毫秒这个区间随机选择的。

9.日志复制

1.日志是由指令和任期组成的,每一条指令也有自己的整数索引。

2.leader先把指令附加到日志里面去,然后同过rpc同步到其他服务器。当日志被完整的复制,领导人就会应用这条日志到状态机中,然后把执行结果返回给客户端。如果跟随者崩溃或者运行缓慢,再或者网络丢包,领导人会不断重复尝试附加日志的rpc直到所有跟随者最终都储存了所有的日志条目。

3.被应用到状态机的日志叫做已提交日志。

4.领导人的崩溃会使日志变的不一致。这种不一致的解决方案是使用强制复制领导人的日志解决的,这意味着跟随者的冲突的日志条目会被领导人的日志覆盖。

首先要开始检查第一次产生冲突的索引位置,然后删除跟随者从此往后的日志条目并复制领导人从此往后的日志,从而达到日志的一致性。

5.当一个领导人获得权利的时候首先应该初始化自己的nextIndex(自己最后的一条日志的索引加1)。

6.如果跟随者日志和领导不一致那么rpc的一致性检测就会失败,此时领导人就是减小nextIndex并进行重试,直到找到一致日志为止,之后就会像上面提到的那样删除冲突日志并重新复制领导人日志。

10.安全性

1.选举限制
1.如何比较两份日志的新旧?
通过最后一条日志的索引和任期比较。即任期相同的情况下日志长的日志新

11.集群成员变化

大概是在讲脑裂了

日志分为两种:
1.普通指令日志
2.集群配置日志

12.日志压缩

1.为什么要日志压缩?
因为日志会一直增长,而我们的存储资源却不是无限的。

2.快照是简单的压缩方法,raft保存最新的已提交的日志条目的索引和任期作为快照内容。

3.快照操作后的第一次附加日志请求时需要一致性检查,需要快最后提交的日志条目的任期和索引,所以这个数据需要保存在快照里。如果最新的快照保存成功就可以丢弃之前快照,论文里还说了可以丢弃整个日志。这里暂时保持怀疑。使用快照重置状态机以及加载快照的集群配置。

4.领导人给落后的跟随者发送快照安装的rpc.这样跟随就就可以追上集群的进度。这时候快照的指令一定比日志新,此时就可以丢弃整个日志了。和上面的内容对应了,解决了我的疑惑

13.客户端交互

1.客户端启动的时候发送的请求可能不是发给领导人的,那么当前服务器就会拒绝客户端的请求并且提供最近的领导人的信息。如果领导人崩溃了,那么客户端的请求就会超时。之后客户端重试挑选服务器的过程。

2.如果领导在提交日志之后相应客户端之前崩溃了,那么客户端会向新的领导人重试这条指令,导致指令被再次执行,解决方案请求附加唯一id。只读操作直接执行而不需要记录日志。但是一个领导人在返回结果的时候可能已经被作废了,这时候已经有新的领导人了,如果执行成功就会返回脏数据。
1.领导人在任期开始的时候需要提交一个没有操作的空日志,即只有index和term的no-op日志
2.领导人在处理制度请求的时候必须检察自己是否被废除了。

14.自己的感悟

1.选举就是为了保证上一任提交的完整性。
2.leader保证本任期的提交。

一个前置节点和本节点将整个流程串联起来就是一个类似链表的设计理念

相关文章

  • Raft 算法浓缩

    Raft 算法浓缩总结 Raft 论文给出了下面的表格,用于总结 Raft 算法精华 。 实际上,这些精华都是一条...

  • raft论文总结

    之前都是看别人的文章,这一次自己看了一遍论文,简单总结一下,之后还需要再仔细看看 cap 1.分区容错2.可用性3...

  • Raft论文学习

    [TOC] 参考资料 raft论文原文 raft论文中文译文 raft毕业论文 raft理解 一文带你了解 Raf...

  • raft理解

    前言 这是一篇学习raft论文的总结,主要是对看论文过程中难以理解的几个问题的记录。系统性的讲解还是得看raft论...

  • 分布式系统的Raft算法

    Raft 协议的易理解性描述 虽然 Raft 的论文比 Paxos 简单版论文还容易读了,但论文依然发散的比较多,...

  • raft论文

    In Search of an Understandable Consensus Algorithm (Exten...

  • raft论文

    概念说明 leader: 如果candidate收大多数(n/2+1)节点的投票,就会转换成leader,lead...

  • 【转载】Raft协议原理详解

    想要学习Raft算法,最好的方式就是看作者博士论文了,详细清晰!我将作者的博士论文翻译和总结这篇文档中了,想要更详...

  • 分布式之Raft——解读《Raft》

    title: 分布式之Raft——解读《Raft》date: 2022-01-29 16:18:07 前言 论文:...

  • raft理论与实践[4]-lab2b

    准备工作 阅读raft论文 阅读我写的raft理论与实践[1]-理论篇 阅读raft理论与实践[2]-lab2a ...

网友评论

      本文标题:raft论文总结

      本文链接:https://www.haomeiwen.com/subject/dchbjltx.html