Raft是一種易於理解的分布式系統一致性算法(弱一致性,最終一致性)。它在容錯性和性能上相當於Paxos。不同之處在於,它被分解成相對獨立的子問題,並且清晰地處理了實際系統所需的所有主要部分。
系統角色
leader follower candidate(leader失敗以后 follower的一種競選中間狀態 成功后變為leader狀態)
主要子問題
Leader Election:
timeout競選機制 同票情況(隨機timeout)最先達到timeout的服務器給自己投票 並且讓其他服務器給自己投票 然后term+1 用於分區融合和宕機重啟的服務器能同步最新數據
Log Replication:
通過leader向follower同步log (只能由leader發出)當大多數服務器已經向leader確認log寫入成功后 代表寫入成功 leader會進一步通知集群進行commit操作 真正寫入成功
Safety:
log sync + commit + majority 多數成功則成功 此時宕機的服務器也可以在之后通過term同步最新數據
S1為leader 橙色球為心跳包可攜帶日志數據 每次心跳達到會更新timeout 此時S4宕機數據落后於系統整體
https://raft.github.io/slides/raftuserstudy2013.pdf
動態演示:
http://thesecretlivesofdata.com/raft/