raft论文笔记

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:

  • If commitIndex > lastApplied: increment lastApplied, apply log[lastAppied] to state machine
  • If RPC request or response contains term T > currentTerm: set currentTerm = T, converetf to follower

Followers:

  • Respond to RPCs from candidates and leaders
  • If election timeout elapses without receiving AppendEntries RPC from current leader orr granting vote to candidate: convert to candidate

Candidates:

  • On conversion to candidate, start election:

    • Increment currentTerm
    • Vote for self
    • Reset election timer
    • Send RequestVote RPCs to all other servers
  • If votes received from majority of servers: become leader

  • If AppendEntries RPC received from new leader: convert to follower

  • If election timeout elapses: start new election

Leader:

  • Upon election: send initial empty AppendEntries RPCs(heartbeat) to each server; repeat during idle periods to prevent election timeouts

  • If command received from client: append entry to local log, respond after entry applied to state machine

  • If last log index >= nextIndex for a follower: send AppendEntries PRC with log entries starting at next Index

    • If successful: update nextIndex and matchIndex for follower
    • If AppendEntries fails because of log inconsistency: decrement nextIndex and retry
    • If there exists an N such that N > commitIndex, amajority of matchIndex[i] >= N, and log[N].term == currentTerm: set commitIndex = N

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,029评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,395评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,570评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,535评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,650评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,850评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,006评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,747评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,207评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,536评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,683评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,342评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,964评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,772评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,004评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,401评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,566评论 2 349