圖解分佈式一致性算法RAFT

目錄

 

概述

選舉

腦裂

平票

數據一致


概述

在Raft中,每個結點會處於下面三種狀態中的一種:
追隨者:所有結點都以追隨者的狀態開始,無選舉發生,一旦沒有收到領導者的消息,就開始選舉。
領導者:所有對系統的修改都會先經過領導者。每個修改都會寫一條日誌(log entry)。leader收到修改請求後的過程如下,這個過程叫做日誌複製(Log Replication):
候選:會向其他結點“拉選票”,如果得到大部分的票則成爲領導者。這個過程就叫做領導大選(Leader Election)。

選舉

初始狀態大家都一樣,隨機設置了一個超時時間,等待領導的一次召喚,一般叫一次心跳。

沒有等到心跳,最先超時的發起競選,給自己投票並且給能聯繫到的發投票邀請。

那三個沒有領導,並且這個候選者能連接的點最多,於是同意了邀請,這樣候選者得到4票,成功成爲領導

超時時間作廢,開始追隨領導,等待每一次心跳。那兩個失聯於是也開始競選,不超過半數競選失敗。再次到同一網絡時,發起發起競選,發現了更多跟隨者的領導就加入。

腦裂

所有的個體分成兩部分,有兩個領導,就是腦裂。上述選舉不會出現腦裂,但如果運行過程中產生連接中斷則會腦裂

好多追隨者擁護一個領導,突然有大量失聯情況

於是失聯的又一次選舉產生一個領導,所以同時存在兩個領導,互相又不知道,用戶訪問時就會看到兩種數據。

解決辦法:可以設置定時判斷領導的連接數,連接數小於等於一半自動作廢領導地位。再次到同一網絡時,發起發起競選,發現了更多跟隨者的領導就加入。

平票

集羣總數爲偶數,恰好有兩個點同時發起投票,恰好得到的票是相等,於是就不成功開始等待。雖然說時小概率事件等待事件也不長,但是心跳時間和超時時間都是以百毫秒計算,時間長了,系統運行會多浪費一些時間,raft隨機超時時間會減少這種情況。同時,節點的數目都是奇數個也很大程度減少這種情況。

數據一致

衆所周知,讀一般多餘寫,主從結構中,寫的操作在主,讀在從,這就要同步數據了,主要通過複製日誌同步。

1.用戶修改發送到主

2.領導修改日誌發送到從

3.從根據日誌做同樣的事,複製日誌,成功後反饋

4.主收到修改成功反饋給用戶發送修改成功信息

5.主提交,並且告訴從也提交

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章