分布式系統中的一致性協議

2021-10-01 05:51:37 字數 2224 閱讀 8102

本文詳細介紹目前分布式系統中常見的一些一致性協議:兩階段提交協議,三階段提交協議,向量時鐘,rwn協議,paxos協議,raft協議。下面就乙個個詳細講解下。

一. 兩階段提交協議(2pc)

兩階段提交協議,簡稱2pc,是比較常用的解決分布式事務問題的方式,要麼所有參與程序都提交事務,要麼都取消事務,即實現acid中的原子性(a)的常用手段。

兩階段提交將提交過程劃分為連續的兩個階段:表決階段(voting)和提交階段(commit)。假設在沒有故障發生的情形下,兩階段提交協議由下列操作序列構成,如下圖所示:

協調者的有限狀態機如下圖:

如上圖所示:協調者初始處於init狀態,當接收到系統發出的commit訊息後,向參與者多播vote-request訊息後轉入wait狀態,在此進入阻塞狀態,因為要等待所有參與者傳送返回的訊息,當收到所有參與者的返回訊息後,如果其中包含vote-abort訊息,則多播global-abort訊息後轉入abort狀態,否則多播global-commit訊息後轉入commit狀態。

參與者的有限狀態機如下圖:

如上圖所示:參與者初始處於init狀態,當接收到vote-request訊息時,發出vote-commit會轉入ready狀態,告訴協調者已經準備做好提交準備,否則就返回乙個vote-abort訊息。等待協調者行為,如果收到global-abort訊息,就會進入abort狀態,如果收到global-commit訊息,就會轉入commit狀態。

從兩者的有限狀態機可以看出,在所有可能狀態中,存在三個阻塞狀態:協調者的wait狀態,參與者的init狀態和ready狀態。

二. 三階段提交協議(3pc)

3pc就是在2pc基礎上將2pc的提交階段細分位兩個階段:預提交階段和提交階段。

3pc中協調者的有限狀態機如下圖:

3pc中參與者的有限狀態機如下圖:

三. 向量時鐘

通過向量空間祖先繼承的關係比較, 使資料保持最終一致性,這就是向量時鐘的基本定義。

下面給出乙個場景來說明向量時鐘的作用:

以上這個決策用到了向量時鐘,有個圖還比較清晰了說明整個過程:

四. nwr協議

nwr是一種在分布式儲存系統中用於控制一致性級別的一種策略。在amazon的dynamo雲儲存系統中,就應用nwr來控制一致性。

讓我們先來看看這三個字母的含義:

n:在分布式儲存系統中,有多少份備份資料

w:代表一次成功的更新操作要求至少有w份資料寫入成功

r: 代表一次成功的讀資料操作要求至少有r份資料成功讀取

nwr值的不同組合會產生不同的一致性效果,當w+r>n的時候,整個系統對於客戶端來講能保證強一致性。當w+r 以常見的n=3、w=2、r=2為例:

n=3,表示,任何乙個物件都必須有三個副本(replica),w=2表示,對資料的修改操作(write)只需要在3個replica中的2個上面完成就返回,r=2表示,從三個物件中要讀取到2個資料物件,才能返回。

在分布式系統中,資料的單點是不允許存在的。即線上正常存在的replica數量是1的情況是非常危險的,因為一旦這個replica再次錯誤,就 可能發生資料的永久性錯誤。假如我們把n設定成為2,那麼,只要有乙個儲存節點發生損壞,就會有單點的存在。所以n必須大於2。n約高,系統的維護和整體 成本就越高。工業界通常把n設定為3。

當w是2、r是2的時候,w+r>n,這種情況對於客戶端就是強一致性的。

在上圖中,如果r+w>n,則讀取操作和寫入操作成功的資料一定會有交集(如圖中的b),這樣就可以保證一定能夠讀取到最新版本的更新資料,資料的強一致性得到了保證。在滿足資料一致性協議的前提下,r或者w設定的越大,則系統延遲越大,因為這取決於最慢的那份備份資料的響應時間。而如果r+w<=n,則無法保證資料的強一致性,因為成功寫和成功讀集合可能不存在交集,這樣讀操作無法讀取到最新的更新數值,也就無法保證資料的強一致性。

在具體實現系統時,僅僅依靠nwr協議還不能完成一致性保證,因為在上述過程中,當讀取到多個備份資料時,需要判斷哪些資料是最新的,如何判斷資料的新舊?這需要向量時鐘來配合,所以對於dynamo來說,是通過nwr協議結合向量時鐘來共同完成一致性保證的。

五. paxos協議

paxos協議的基礎比較難以理解,這裡就不枯燥無味的介紹paxos協議的理論基礎,這方面的資料也是非常多的。估計大家也不希望看到很多理論,公式很多。這裡給出幾個參考資料供閱讀:

1.  架構師需要了解的paxos原理,歷程及實踐:

3.  資料一致性與paxos演算法(上,中,下三篇文章): 

六. raft協議

1.  raft協議的動畫: 

2.  

保證一致性嗎 分布式系統 一致性協議

一致性模型本質上是程序與資料儲存的約定,通過一致性模型我們可以理解和推理在分布式系統中資料複製需要考慮的問題和基本假設。那麼,一致性模型的具體實現有一些呢?本文會介紹一致性協議實現的主要思想和方法。一致性協議描述了特定一致性模型的實際實現。一致性模型就像是介面,而一致性協議就像是介面的具體實現。一致...

分布式一致性

分布式一致性是指在分布式環境中對某個副本資料進行更新操作時,必須確保其他副本也會更新,避免不同副本資料不一致。分布式系統乙個重要的問題時解決資料複製,一是為了增加系統的可用性防止單點故障,二是提高系統可用性,通過負載聚恆,使分布在不同位置的資料副本能夠提供服務。理想狀態下,當然希望分布式系統能夠實現...

分布式一致性

分布式系統的乙個重要問題是資料的複製。對資料的複製一般有兩個原因 資料複製的主要難題是保持各個副本的一致性。即在更新乙個副本時,必須確保同時更新其他的副本,否則資料的各個副本將不再相同。一致性模型實質上是程序和資料儲存之間的乙個約定。正常情況下,乙個資料項上執行讀操作時,它期待該操作返回的是該資料在...