本文主要簡單聊聊分布式共識演算法raft在發生網路分割槽的時候如何保持最終一致性。如果有對raft基礎不清楚,或者對日誌複製和首領選舉有疑問可以參看之前的文章.raft
共識演算法(1)
首先我們看乙個狀態就是沒有網路分割槽的情況。
圖中我們可以觀察到的情況就是綠色的client和藍色的服務端節點之間網路是互通的。接下來我們來新增乙個分割槽來使得他們有網路隔離存在。
黑色的虛線代表網路隔離,這樣節點ab和cde三個節點就不在同一分割槽了,然後我們可以看到黑色圈的b依然是leader。上面的三個節點是沒有leader的。上面的cde經過一次首領選舉以後會變成下圖的樣子。
注意看上圖節點c也是leader了,但是節點c的term 是2 也就是說任期提公升了乙個任期。由於出現網路分割槽導致我們現在存在不同的兩個leader(這裡要注意這兩個leader是不一樣的任期,也就是term不一樣)。
然後我們在ab的網路分割槽中增加乙個client來嘗試改變這個節點b的值(對於這個增加的client可能在真實場景中本來就有甚至有很多個)。
下圖中我們可以看到ab的節點網路分割槽中嘗試更新節點的值為3,但是呢這個黑色的框中日誌是紅色的。代表著這個 set 3這條日誌還沒有提交,然後我們的節點值也沒有發生變化。為什麼呢,因為我們看到的是有5個節點,對於 set 3 這條日誌是沒有辦法根據日誌複製原則,複製到一半以上的節點的,所以這條日誌無法提交,這樣也就無法進行提交和更改。也就是說raft在發生網路分割槽的時候,我們是沒有辦法在半數以下的節點的網路分割槽中進行更改的
對於上圖中cde所在的網路分割槽中,leader的節點c是可以把日誌複製到3個節點的(也就是半數以上個節點),這樣我們可以看到,對於節點c的更改是成功的。那麼我們這個時候如果修復了網路分割槽會怎樣呢。
修復網路分割槽以後我們發現,原先節點ab的任期是1,修復分割槽以後節點任期增加到2了。而且上一步的日誌 set 3 沒有了,這就說明呀,所有未提交的日誌,遇到了更高任期的leader的時候都會被回滾掉。還有當接收到任期比自己高的leader的心跳的時候,是複製了leader的節點日誌的。而且把自己任期追上了leader的任期。這樣我們的日誌在整個的集群中都是一致的。
以上就是我們的raft演算法在發生網路分割槽的時候如何保持最終一致性的過程了。
——————————————————————————————————————
參考文獻:資料的秘密
生活和夢想同樣重要。我是小碼農,謝謝您的瀏覽!
分布式共識演算法 Raft詳解
拜占庭將軍問題是分布式領域最複雜 最嚴格的容錯模型。但在日 常工作中使用的分布式系統面對的問題不會那麼複雜,更多的是因 為計算機故障宕機,或者網路通訊問題而沒法傳遞資訊,這種情況 不考慮計算機之間互相傳送惡意資訊,極大簡化了系統對容錯的要 求,最主要的是達到一致性。假設將軍中沒有叛軍,信使的資訊可靠...
分布式 Raft演算法
raft也是分布式一致性協議,主要是用來競選主節點。有三種節點 follower,candidate和leader。leader會週期性的傳送心跳給follower。每個follower都設定了乙個隨機的競選超時時間,一般為150ms 300ms,如果在這個時間內沒有收到leader的心跳包,就會變...
RAFT 區塊鏈中分布式共識協議
即便如此paxos演算法還是沒有得到重視,2001年lamport 覺得同行無法接受他的幽默感,於是用容易接受的方法重新表述了一遍 paxos made 可見lamport對paxos演算法情有獨鍾。近幾年paxos演算法的普遍使用也證明它在分布式一致性演算法中的重要地位。2006年google的三...