1. 程式人生 > 其它 >分散式一致性協議實現原理

分散式一致性協議實現原理

一致性演算法——Paxos、Raft、ZAB

1.1 CAP理論

分散式系統的CAP理論:理論首先把分散式系統中的三個特性進行了如下歸納:
● 一致性(C):在分散式系統中的所有資料備份,在同一時刻是否同樣的值。(等同於所有節點訪問同一份最新的資料副本)

● 可用性(A):在叢集中一部分節點故障後,叢集整體是否還能響應客戶端的讀寫請求。(對資料更新具備高可用性)

● 分割槽容錯性(P):以實際效果而言,分割槽相當於對通訊的時限要求。系統如果不能在時限內達成資料一致性,就意味著發生了分割槽的情況,必須就當前操作在C和A之間做出選擇。

1.2 什麼是一致性?

有兩種一致性模型,分別是弱一致性和強一致性

1)弱一致性

(1)最終一致性

​ DNS域名系統(英文:DomainNameSystem,縮寫:DNS)


在域名解析服務提供商上新增域名解析,一般都是10分鐘以內之後才能通過域名訪問到當前新增的網站,因為你的域名解析ip服務只在當前供應商的伺服器上新增,同步到全球或者全國需要一定的時間,在其他地區或者其他DNS伺服器就有可能訪問不到當前網站,需要等待一段時間。

2 )強一致性

(1)同步

(2)Paxos

(3)Raft(multi-paxos)

(4)ZAB(multi-paxos)

1.3 Paxos

1)明確問題

一致性演算法的為什麼會出現,因為資料不能存在單節點上,但是存在叢集中有一致性的問題(網路、宕機等原因)。

但是有其他的演算法比如說主從,但是主從的可用性極低,一旦有一個節點宕機則無法對外提供服務。

所以需要在保持一致性的同時儘可能的提高可用性。

2)基本思想

多數派:
每次寫入都要保證寫入N/2的節點,每次讀保證從何大於N/2個幾點中讀取
多數派加順序存取:
在其基礎上,因為有叢集的概念,所以還有一個系統正確性需要保證,所以順序非常重要!
  • 1
  • 2
  • 3
  • 4

3)Basic Paxos

Paxos演算法是萊斯利·蘭伯特(Leslie Lamport,就是LaTeX中的"La",此人現在在微軟研究院)於1990年提出的一種基於訊息傳遞的一致性演算法。這個演算法被認為是類似演算法中最有效的。

(1)角色介紹:

Client:產生議題者或者是請求發起者 ,類似於民眾

Proposer :提議者,接收民眾的建議並提出議案,在衝突時有調節作用,類似於議員

Acceptor:決策者或者是投票者,國會成員或者議員等

Learner:最終決策記錄者 備份,對叢集一致性沒有影響

(2)基本流程:

(3)全票通過的場景

(4)部分Accepter通過

但是達到了1/2以上的節點,提案通過,反之則不通過

(5)proposer宕機或者失敗

當前提案不會通過,但是有其他的proposer處理(客戶端需要有重試機制)

(6)活鎖問題的產生

https://www.cnblogs.com/sunnyCx/p/8108366.html

timeout解決

4)Multi Paxos

(1)Basix Paxos問題

實現難
效率低(2輪RPC,來回驗證,效率低)
活鎖
  • 1
  • 2
  • 3

(2)區別

Leader:唯一propser,選舉產生
所有的請求都經過leader
  • 1
  • 2

(3)基本流程

(4)簡化角色

1.4 Raft

http://thesecretlivesofdata.com/raft/

1)角色

(1)Leader

(2)Follwer

(3)Candidate

2)三個場景

(1)Leader Election

(2)Log Repliction

(3)Safety

10.5 ZAB

1.基本與Raft相同
2.叫法的區別:zab將某一個leader的週期成為epoch,而Raft稱之為term
3.心跳方向為leader向follower。ZAB則相反
  • 1
  • 2
  • 3

1)協議原理

ZAB主要包括訊息廣播和崩潰恢復兩個過程,進一步可以分為三個階段,分別是發現(Discovery)、同步(Synchronization)、廣播(Broadcast)階段。ZAB的每一個分散式程序會迴圈執行這三個階段,稱為主程序週期。

· 發現,選舉產生PL(prospective leader),PL收集Follower epoch(cepoch),根據Follower的反饋,PL產生newepoch(每次選舉產生新Leader的同時產生新epoch)。

· 同步,PL補齊相比Follower多數派缺失的狀態、之後各Follower再補齊相比PL缺失的狀態,PL和Follower完成狀態同步後PL變為正式Leader(established leader)。

· 廣播,Leader處理客戶端的寫操作,並將狀態變更廣播至Follower,Follower多數派通過之後Leader發起將狀態變更落地(deliver/commit)。

在正常執行過程中,ZAB協議會一直運行於階段三來反覆進行訊息廣播流程,如果出現崩潰或其他原因導致Leader缺失,那麼此時ZAB協議會再次進入發現階段,選舉新的Leader。

2)執行狀態

每個程序都有可能處於如下三種狀態之一

· LOOKING:Leader選舉階段。

· FOLLOWING:Follower伺服器和Leader伺服器保持同步狀態。

· LEADING:Leader伺服器作為主程序領導狀態。