主題大綱:
1、點撥分布式系統(tǒng)和Raft算法要點
2、深入剖析Raft實現(xiàn)原理
3、干貨:基于Raft的分布式系統(tǒng)實戰(zhàn)經(jīng)驗
最近我們開源了一個運行在Mesos上的分布式調(diào)度器swan(https://github.com/Dataman-Cloud/swan),在研發(fā)過程中發(fā)現(xiàn)由于目前的分布式存儲并不能滿足我們所有需求,所以自己動手將Raft嵌入到swan中,以保證多節(jié)點之間的數(shù)據(jù)同步。在這個過程中我們積累了一些Raft相關(guān)的經(jīng)驗和教訓(xùn),在這里與大家分享。
一、關(guān)于分布式系統(tǒng)
分布式系統(tǒng)具有可擴展性和高可用性強等特點,被越來越多的應(yīng)用到各個應(yīng)用場景中,但是在分布式系統(tǒng)中,各個服務(wù)器之間數(shù)據(jù)的一致性一直是無法繞過的難題。
所謂一致性,它是指分布式系統(tǒng)中,多個服務(wù)器的狀態(tài)達成一致。但由于各種意外可能,某個服務(wù)器發(fā)生崩潰或變得不可靠,它就不能與其他服務(wù)器達成一致性狀態(tài)。這樣就需要一種Consensus協(xié)議,這個協(xié)議是為了確保容錯性,也就是即使系統(tǒng)中有一兩個服務(wù)器宕機,也不會影響其他的服務(wù)器正常提供服務(wù)。
在過去Paxos一直是分布式協(xié)議的標(biāo)準,但是Paxos難于理解,更難以實現(xiàn)。較于Paxos,來自Stanford的新的分布式協(xié)議Raft更好用一些,它是一個為真實世界應(yīng)用建立的協(xié)議,主要注重協(xié)議的可理解性和落地。
二、Raft如何在多個服務(wù)器之間實現(xiàn)數(shù)據(jù)的一致性
下面簡單介紹一下Raft如何在多個服務(wù)器之間保證數(shù)據(jù)的一致性。為了達成一致性這個目標(biāo),首先Raft需要進行選舉,在Raft中,任何時候一個服務(wù)器可以扮演下面角色之一:
Leader:處理所有客戶端交互,日志復(fù)制等,一般一次只有一個Leader;
Follower:類似選民,完全被動;
Candidate候選人:類似Proposer律師,可以被選為一個新的領(lǐng)導(dǎo)人。參選者需要說服大多數(shù)選民(服務(wù)器)投票給他。
選舉的過程大概分為以下幾步: