raft论文笔记

2020-06-14  本文已影响0人  yongfutian

raft论文笔记

使用目的:Raft 算法是可以用来替代 Paxos 算法的分布式一致性算法,是用来管理复制日志(replicated log)的一致性协议。

复制状态机:复制状态机用于解决分布式系统中的各种容错问题。通常使用复制日志实现,每个服务器存储一个包含一系列命令的日志,其状态机按顺序执行日志中的命令。 每个日志中命令都相同并且顺序也一样,因此每个状态机处理相同的命令序列。 这样就能得到相同的状态和相同的输出序列。

State

Persistent state on all servers:

currentTerm     latest term server has seen (initialized to 0 on first boot, increases monotomically)
 voteFor    candidateId that received vote in current term (or null if none)
 log[]          log entries; each entry contains commend for state machine, and term when entry was received by leader ( first index is 1)

Volatile state in all servers:

commitIndex     index of highest logentry known to be committed ( initialized to 0, increases monotonically)
lastApplied index of highest log entry applied to state machine (initalized to 0, increases monotonically)

Volatile state on leaders:

nextIndex[] for each server, index of the next log entry to send to that server (intialized to leader last log index +1 )
matchIndex[]    for each server, index of highest log entry konwn to be replicated on server (initalized to 0 increases monotonically)

RequestVote RPC:
Invoked by candidates to gather votes

Arguments:

term    candidate's term
candidateId candidate reqyesting vote
lastLogIndex    index of candidate's last log entry
lastLogTerm     term of candidate's last log entry

Result:

term    currentTerm, for candidate to update itself
voteGranted true means candidate received vote

Receiver implementation:

1. Reply false if term < currentTerm
2. If voteFor is null or candidateId, and candidate's log is at least as up-to-date as receiver's log, grant vote

AppendEntries RPC
Invoked by leader to replicate log entries; also used as heart beat

Argument:

term    leader's term
leaderId    so follower can redirect clients
prevLogIndex    index of log entry immediately preceding new ones

prevLogTerm term of prevLogIndex entry
entries[]   log entries to store(empty for heartbeat; may send more than one for efficiency)

leaderCommit    leader's commitIndex 

Results:

term    currentTerm, for leader to update itself
success     true if follower contained entry matching prevLogIndex and prevLogTerm

Receiver implementation:

1.Reply false if term < currentTerm
2.Reply false if log doesn't contain an entry at prevLogIndex whose term matches prevLogTerm
3.if an existing entry conflicts with a new one (same index but different terms), delete the existing entry and all that follow it
4.Appebd any new entries not already in the log 
5.If leaderCommit > commitIndex, set commitIndex = min(leaderCommit, index of last new entry)

Rules for Servers

All Servers:

Followers:

Candidates:

Leader:

Election Safety: at most one leader can be elected in a given term.
Leader Append-Only: a leader never overwrites or deletes entries in its log; ig only appends new entries.
Log Matching: if two logs contain an entry with the same index and term, then the logs are identical in all entries up through the given index.
Leader Completeness: if a log entry is committed in a given term, then that entry will be present in the logs of the leaders for all higher-numbered terms.
State Machine Safety: if a server has applied alog entry at a given index to its state machine, no other server will ever apply a different log entry for the same index

上一篇下一篇

猜你喜欢

热点阅读