分散式系統 - CAP定理
在理論電腦科學中,CAP定理(CAP theorem),又被稱作布魯爾定理(Brewer’s theorem),指的是在一個分散式系統中,Consistency(一致性)、 Availability(可用性)、Partition tolerance(分割槽容錯性)這三個基本需求,最多隻能同時滿足其中的2個
- 一致性(Consistency):資料在多個副本之間能夠保持一致的特性
- 可用性(Availability):系統提供的服務必須一直處於可用的狀態,每次請求都能獲取到非錯的響應(不保證獲取的資料為最新資料)
- 分割槽容錯性(Partition tolerance):分散式系統在遇到任何網路分割槽故障的時候,仍然能夠對外提供滿足一致性和可用性的服務,除非整個網路環境都發生了故障
CAP權衡
既然根據CAP定理,我們無法同時滿足一致性,可用性和分割槽容錯性,那要捨棄哪個呢?
-
CA without P
如果不要求P(不允許分割槽),則C(強一致性)和A(可用性)是可以保證的。但其實分割槽不是你想不想的問題,而是始終會存在,因此CA的系統更多的是允許分割槽後各子系統依然保持CA。 -
CP without A
如果不要求A(可用性),相當於每個請求都需要在Server之間強一致,而P(分割槽)會導致同步時間無限延長,如此CP也是可以保證的。很多傳統的資料庫分散式事務都屬於這種模式。 -
AP wihtout C
要高可用並允許分割槽,則需放棄一致性。一旦分割槽發生,節點之間可能會失去聯絡,為了高可用,每個節點只能用本地資料提供服務,而這樣會導致全域性資料的不一致性。實際上,目前大部分NoSQL都屬於這一類。