為什么說,CAP是分布式理論的基礎?
分布式系統非常關注三個指標:
- 數據一致性;
- 系統可用性;
- 節點連通性與擴展性;
這三個指標的關系如何,今天來聊一聊分布式理論的基礎CAP。
什么是數據一致性?
數據“強一致性”,是希望系統只讀到最新寫入的數據,例如:通過單點串行化的方式,就能夠達到這個效果。
關于session一致性,DB主從一致性,DB雙主一致性,DB與Cache一致性,數據冗余一致性,消息時序一致性,分布式事務一致性,庫存扣減一致性,都存在類似的一致性問題。
什么可用性?
如果系統每運行100個時間單位,會有1個時間單位無法提供服務,則說系統的可用性是99%。
可用性和可靠性是比較容易搞混的兩個指標,以一臺取款機為例:
- 正確的輸入,能夠取到正確的錢,表示系統可靠;
- 取款機7*24小時提供服務,表示系統可用;
保證系統高可用的方法是:
- 冗余;
- 故障自動轉移;
什么是連通性與擴展性?
分布式系統,往往有多個節點,每個節點之間,都不是完全獨立的,需要相互通信,當發生節點無法聯通時,數據是否還能保持一致,系統要如何進行容錯處理,是需要考慮的。
同時,連通性和擴展性緊密相關,想要加機器擴展性能,必須有良好的連通性。當一個節點脫離系統,系統就出現問題,往往意味著系統是無法擴展的。
什么是CAP定理?
CAP定理,是對上述分布式系統的三個特性,進行了歸納:
- 一致性(Consistency);
- 可用性(Availability);
- 分區容忍性(Partition Tolerance);
并且,定理指出,在系統實現時,這三者最多兼顧兩點。
一致性,可用性,多節點擴展性三者只能取其二,既然加鎖已經加上,常見的最佳工程架構實踐是什么呢?
互聯網,最常見的實踐是這樣的:
- 節點連通性,多節點擴展性,連通性異常的處理必須保證,滿足P;
- 一致性C與可用性A一般二選一;
- 選擇一致性C,舉例:傳統單庫水平切分,就是這類選型的典型;
- 選擇可用性A,舉例:雙主庫同步高可用,就是這類選型的典型;
強一致很難怎么辦?
單點串行化,雖然能保證“強一致”,但對系統的并發性能,以及高可用有較大影響,互聯網的玩法,更多的是“最終一致性”,短期內未必讀到最新的數據,但在一個可接受的時間窗口之后,能夠讀到最新的數據。
例如:數據庫主從同步,從庫上的數據,就是一個最終的一致。
總結
- CAP可以理解為一致性,可用性,聯通與擴展性;
- CAP三者只能取其二;
- 最常見的實踐是AP+最終一致性;
【本文為51CTO專欄作者“58沈劍”原創稿件,轉載請聯系原作者】