raft 筆記

leader選舉

目標 :確保所以log的entry 傳送方向是: leader -> follower
策略:選出的leader就包含所有term中已經(jīng)提交的log entry


目標:選出包含所有term中已經(jīng)提交的log entry的leader
策略:只向比自己更新的cadidate投票。

更新:
1 最后一條log entry 的term 大的更新。
2 在1 條件下,日志更長的更新。

如何提交之前任期內(nèi)的log entry

image.png

如圖的時間序列展示了為什么 leader 無法判斷老的任期號內(nèi)的日志是否已經(jīng)被提交。在 (a) 中,S1 是 leader ,部分地復(fù)制了索引位置 2 的日志條目。在 (b) 中,S1 崩潰了,然后 S5 在任期 3 中通過 S3、S4 和自己的選票贏得選舉,然后從客戶端接收了一條不一樣的日志條目放在了索引 2 處。然后到 (c),S5 又崩潰了;S1 重新啟動,選舉成功,繼續(xù)復(fù)制日志。此時,來自任期 2 的那條日志已經(jīng)被復(fù)制到了集群中的大多數(shù)機器上,但是還沒有被提交。如果 S1 在 (d) 中又崩潰了,S5 可以重新被選舉成功(通過來自 S2,S3 和 S4 的選票),然后覆蓋了他們在索引 2 處的日志。但是,在崩潰之前,如果 S1 在自己的任期里復(fù)制了日志條目到大多數(shù)機器上,如 (e) 中,然后這個條目就會被提交(S5 就不可能選舉成功)。 在這種情況下,之前的所有日志也被提交了。

在c狀態(tài)下 對于 2 號log entry 是否已經(jīng)做過commit(雖然副本數(shù)已經(jīng)過半),leader能否做出判斷?
答案: 不能

因為如果此時如果認為2 號log entry 已經(jīng)提交,并且將2號應(yīng)用與狀態(tài)機,那么接下來的可能的發(fā)展方向是什么呢?
d 狀態(tài)是一種發(fā)展方向,此時2號entry完全覆蓋掉了,一個被commit(或者應(yīng)用到狀態(tài)機) 的entry竟然被覆蓋掉了,what? 這能忍嗎?顯然不行。

如何避免?
我們發(fā)現(xiàn)如果朝著 e方向發(fā)展,在e的狀態(tài)下,認為2是提交的完全沒有問題(不可能再有任何情況會將2 覆蓋掉)。
那么e是什么狀態(tài)呢?
e 的狀態(tài)在當(dāng)前(最新的)任期內(nèi)commit了一條新的 log entry。
所以:
老任期內(nèi)的log entry被當(dāng)前任期內(nèi)的新(對新 log entry)commit 間接提交。
換句話說: 老任期內(nèi)的log entry 能不能看做是被提交的還得依賴后面有沒有新的log entry commit過。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 可進入我的博客查看原文。 Raft 算法是可以用來替代 Paxos 算法的分布式一致性算法,而且 raft 算法比...
    Jeffbond閱讀 13,667評論 4 91
  • 最近看了Ongaro在2014年的博士論文《CONSENSUS: BRIDGING THEORY AND PRAC...
    山本聰閱讀 4,734評論 3 11
  • 1 整體描述 在Raft被提出來之前,Paxos協(xié)議是第一個被證明的一致性算法,但是Paxos的論文非常難懂,導(dǎo)致...
    船_長閱讀 7,445評論 0 7
  • 尋找一種易于理解的一致性算法(擴展版) 摘要 Raft 是一種為了管理復(fù)制日志的一致性算法。它提供了和 Paxos...
    yflau閱讀 1,121評論 0 1
  • 一 SMR 副本狀態(tài)機:每個服務(wù)器節(jié)點作為狀態(tài)機,接收相同順序的操作指令,產(chǎn)生相同的狀態(tài)變更,構(gòu)成一組強一致的副本...
    夢工廠閱讀 814評論 0 4

友情鏈接更多精彩內(nèi)容