RAFT论文阅读笔记

2020-08-09  本文已影响0人  睡不醒的大橘

论文下载

In Search of an Understandable Consensus Algorithm

RAFT算法

RAFT基本概念

三个状态
  1. leader
  2. follower
  3. candidate
Term (任期)
节点间的通信

Leader的选举

  1. 将自己的 current term number + 1,并切换到candidate状态
  2. 为自己投上一票,同时并行地给其它follower发送RequestVote RPC
  3. 节点保持candidate状态直到出现以下情景之一:

a) 赢得选举:candidate收到半数以上节点的投票。每一个节点每个term至多能给一个candidate投票,基于的是first-come-first-served的原则(后文还介绍了其它限制)。一旦节点赢得选举,它会立刻发送heartbeat给其它节点,以终止选举流程。

b) 其它节点成为了leader:节点可能收到来自其它节点的 AppendEntries RPC (宣称自己是leader)。如果leader的term大于等于它的term,节点会认为该leader是合法的,并将自己的状态转换为follower。如果小于,节点会拒绝该RPC并保持candidate状态。

c) 一定时间过去后仍没有节点赢得选举:如果多个follower同时成为candidate,可能导致没有任何一个follower得到大多数的选票。此时各个candidate将会超时,并发起新一轮的选举流程(重复步骤1,2,3)。为了避免无限的超时重选举,RAFT将每个server的超时时间(election timeouts)随机化,使得大多数情况下一个server率先超时,在其它server超时前赢得选举。

Log replication

Log replication步骤
  1. 当leader接收到client的请求,它会把请求所包含的command 添加(append)到其log中,称为一条entry
  2. 接着并行发送Append-Entries RPCs到follower使其复制该entry。
  3. 当entry被大多数节点成功复制后(此时该entry被称为committed entry),leader将会将该entry应用于状态机中(执行该command),并返回执行结果给client
log entry
committed entry
Log Matching 特性

Safty

选举安全性
Raft never commits log entries from previous terms by counting replicas.

Log 压缩

算法总结

上一篇 下一篇

猜你喜欢

热点阅读