分布式系统中的一致性协议
本文詳細介紹目前分布式系統中常見的一些一致性協議:兩階段提交協議,三階段提交協議,向量時鐘,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中參與者的有限狀態機如下圖:
三. 向量時鐘
通過向量空間祖先繼承的關系比較, 使數據保持最終一致性,這就是向量時鐘的基本定義。
下面給出一個場景來說明向量時鐘的作用:
Vector Clock就是為了解決這種問題而設計的,簡單來說,就是為每個商議結果加上一個時間戳,當結果改變時,更新時間戳。所以加上時間戳之后,我們再一次描述上面的場景,如下:
以上這個決策用到了向量時鐘,有個圖還比較清晰了說明整個過程:
四. 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原理,歷程及實踐:http://chuansong.me/n/2189245
2. ?微信自研生產級Paxos類庫Phxpaxos實現原理介紹:http://mp.weixin.qq.com/s?__biz=MzI4NDMyNTU2Mw==&mid=2247483695&idx=1&sn=91ea422913fc62579e020e941d1d059e#rd ?
3. ?數據一致性與Paxos算法(上,中,下三篇文章):?http://blog.csdn.net/yinwenjie/article/details/60584554
六. Raft協議
1. ?Raft協議的動畫:?http://thesecretlivesofdata.com/raft/
2. ?https://raft.github.io/
參考資料:
Vector Clock.?http://en.wikipedia.org/wiki/Vector_clock
Leslie Lamport. Paxos Made Simple. ACM SIGACT News
The chubby lock service for loosely-coupled distributed systems.pdf
Diego Ongaro and John Ousterhout. In Search of an Understandable Consensus Algorithm
http://www.cnblogs.com/yanghuahui/p/3767365.html
other resources
————————————————
版權聲明:本文為CSDN博主「快樂的霖霖」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/chdhust/article/details/52651741
總結
以上是生活随笔為你收集整理的分布式系统中的一致性协议的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 复肝宁片_功效作用注意事项用药禁忌用法用
- 下一篇: MySQL锁总结