什麼是CAP理論?
2000年7月,加州大學伯克利分校的Eric Brewer教授在ACM PODC會議上提出CAP猜想。2年後麻省理工學院的Seth Gilbert和NancyLynch從理論上證明了CAP,之後CAP理論正式成為分布式計算領域的公認定理。
CAP理論是由下面三個概念組成的,且在分布式系統中三者不能兼得,隻能同時滿足兩種條件。
一緻性(C)
All nodes see the same data at the same time
所有資料庫叢集節點在同一時間點看到的資料完全一緻,即所有節點能實時保持資料同步。
可用性(A)
Reads and writes always succeed
讀寫操作永遠是成功的。即服務一直是可用的,即使叢集一部分節點故障,叢集整體還能正常響應用戶端的讀寫請求。
分區容錯性(P)
The system continues to operate despite arbitrary message loss or failure of part of the system
盡管系統中有任意的資訊丢失或故障,系統仍在繼續運作。以實際效果而言,分區相當于對通信的時限要求。系統如果不能在時限内達成資料一緻性,就意味着發生了分區的情況,必須就目前操作在C和A之間做出選擇。
CAP權衡使用
1、保留CA,放棄P
如果想避免分區容錯性問題的發生,一種做法是将所有的資料(與事務相關的)都放在一台機器上。雖然無法100%保證系統不會出錯,但不會碰到由分區帶來的負面效果。當然這個選擇會嚴重的影響系統的擴充性。
作為一個分布式系統,放棄P,即相當于放棄了分布式,一旦并發性很高,單機服務根本不能承受壓力。
像很多銀行服務,确确實實就是舍棄了P,隻用單台小型機+ORACLE保證服務可用性。
2、保留CP,放棄A
相對于放棄“分區容錯性“來說,其反面就是放棄可用性。一旦遇到分區容錯故障,那麼受到影響的服務需要等待一定的時間,是以在等待期間系統無法對外提供服務。
作為分布式系統,有分區服務發生問題很有可能,如果因為某些服務不能用,導緻整個服務都不能用,這個根本不是好的分布式系統。
3、保留AP,舍棄C
這裡所說的放棄一緻性,并不是完全放棄資料一緻性,而是放棄資料的強一緻性。即放棄了同一時刻的資料一緻性,而保留資料的最終一緻性。
以網絡購物為例,對隻剩下一件庫存的商品,如果同時接受到了兩份訂單,那麼較晚的訂單将被告知商品告罄。
通常情況下,很多分布式服務系統都是采用該方案,保證可用性性,分布式服務,因為某些分區服務發生問題,先容忍,最終通過一些折中的方法達到最終資料一緻性。
推薦閱讀
去BAT面試完的Mysql面試題總結(55道,帶完整答案) 阿裡進階Java面試題(首發,70道,帶詳細答案) 2017派卧底去阿裡、京東、美團、滴滴帶回來的面試題及答案 Spring面試題(70道,史上最全) 通往大神之路,百度Java面試題前200頁。分享Java幹貨,高并發程式設計,熱門技術教程,微服務及分布式技術,架構設計,區塊鍊技術,人工智能,大資料,Java面試題,以及前沿熱門資訊等。