美文网首页
raft 小论文笔记

raft 小论文笔记

作者: 西门早柿 | 来源:发表于2021-02-04 22:02 被阅读0次

request vote rpc

各 follower 超时之后,变为 candidate,向其它成员发送 request vote,请求成为 leader。request vote rpc 需要的参数如下:

  • candidate id,标识自己是谁。
  • term,标识自己当前的任期。
  • lastLogIndex,自己拥有的最大的 log index。
  • lastLogTerm,自己拥有的最大的 log term。

回复格式参数如下:

  • term,reciever 的 term 信息,如果 reciever term > sender term,则 voteGranted 必为 false,sender candidate 需要更新自己的 term 信息,并重新转化为 follower。
  • voteGranted,为 true 需要满足三个条件,一个是当前 reciever 没有给其它 candidate 投过票,即 voteFor 为 null 或者 sender candidate id,一个是 term,一个是 log index。

append entry rpc

用于复制日志。

request rpc 格式:

  • logEntry[],复制的日志内容,其中包含 term 和 index。
  • term,leader term。
  • leaderId,用于重定向到 leader。
  • prevLogIndex,上一次复制请求包含的最新 log index。
  • prevLogTerm,上一次复制请求包含的最新 log term。
  • leaderCommit,leader's commit index。

prevLogIndex 和 prevLogTerm 用于判断 follower 上的日志是否跟上了 leader 的进度。类似于 offset。

response 格式:

  • term
  • success

reciever implementation。

  • if currentTerm > term,reply false。
  • logTerm 相同,logIndex 不存在,说明进度落后,返回 false。logTerm 落后,也返回 false。
  • 日志有冲突,logIndex 相同,但 term 不同,删掉对应日志以及之后的所有日志,并返回 false。
  • append 新的日志,并返回 true。
  • 如果 commitIndex < leaderCommit,set commitIndex = min(leaderCommit, index of last log entry)。

server 的行为

All servers:

  • if commitIndex > appliedIndex,increment appliedIndex,write log[appliedIndex] to state machine.
  • if term in request or response greater currentTerm,set currentTerm to it and becomes follower.

follower:

  • response to rpc from leader and candidate。
  • 长时间没有收到 leader 发来的 headbeat 或者 candidate 发来的 request vote,则变为 follower。

candidate:

  • 成为 candidate 之后

    • currentTerm + 1

    • vote for self

    • send request vote rpc to others

    • reset timer

  • if recievers major votes,become leader

  • if recieves appendEntries rpc, become follower

  • if timeout, start a new election

leader:

  • Upon leader: send initial empty AppendEntries rpc and repeat,主要是为了维持 leader 的稳定。
  • 处理写请求,写日志,写状态机,都完成之后向 client 返回。
  • if last log index >= nextIndex,send AppendEntry rpc。何时发送 log,发送成功/失败状态如何更新。
    • success -> update next and match.
    • failed -> decrease next and retry.
  • 何时更新 commitIndex。这个更新了之后才能触发写状态机的操作。

membership change

  • log replicated to both old and new configurations.
  • election and replication need majority of both.
  • any server can be elected as leader.

problems to solve:

  • new server may not store any logs.
  • cluster leader may not be part of the new conf.
  • removed servers may disrupt the cluster. 一个 server 如果在最小超时时间内收到了 RequestVote RPC,它不会更新 term 或者 grant vote.

相关文章

  • Raft论文学习

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

  • raft论文笔记

    raft论文笔记 使用目的:Raft 算法是可以用来替代 Paxos 算法的分布式一致性算法,是用来管理复制日志(...

  • Raft论文阅读笔记

    预估阅读时间:30分钟 关键字:raft,分布式一致性 前言 分布式系统中为了保证服务的高可用往往需要将数据分发到...

  • RAFT论文阅读笔记

    论文下载 In Search of an Understandable Consensus Algorithm R...

  • 分布式系统的Raft算法

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

  • raft论文

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

  • raft论文

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

  • Raft 论文读书笔记

    RaftIn Search of an Understandable Consensus Algorithm (E...

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

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

  • Raft 算法浓缩

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

网友评论

      本文标题:raft 小论文笔记

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