共識算法raft

很好的動畫http://thesecretlivesofdata.com/raft/

節點分爲3種狀態:leader、follower、candidate

leader選舉

網絡剛開始時,所有節點都是follwer狀態,如果他們收不到leader發過來的消息,就會有其中1個節點變成candidate狀態。

candidate節點給其他節點發送請求投票消息。

其他follwer節點會返回給candidate節點消息,表示同意。

如果收到一般以上節點同意,這個節點會成爲leader狀態。

整個網絡的所有改變必須經過leader節點。

客戶端會發一個消息給leader節點,leader節點會加一個entity到日誌log中。

leader會把這個entity廣播到其他follower節點。

當leader節點收到大多數節點回復同意的時候,leader會commit這個entity,然後廣播給其他follower節點,follower節點收到commit消息,本地提交,落盤。

election timeout選舉超時,這個值是隨機的,在150ms到300ms之間。誰最快的election timeout的,誰就會成爲candidate狀態,然後給自己投一票,然後給其他節點發送要求投他爲主節點的request。

heartbeat timeout,每隔一段時間間隔,leader就得給follower發送一次。follower回覆append entity消息給leader。

如果一個節點在election timeout的間隔中,收不到hearbeat消息,那麼它自己就會成爲candidate,從新開始共識。

如果leader選舉中產生2個candidate,不會產生leader,所有節點會再次election timeout從新選舉。

網絡腦裂處理

當發生腦裂,網絡分叉時,佔大多數的節點,可以繼續處理交易。佔少數的節點,就不能處理交易了,因爲得不到大多數的同意。

從這裏可以看出,raft只能用到聯盟鏈或私鏈中。

當網絡通了的時候,少數節點的網絡,會回滾,重新得到多數節點的log,和比特幣長鏈吃短鏈一個原理。

 

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