目錄
1、CAP理論
1.1、介紹
1.2、CAP的三種選擇
1.3、CAP的注意事項
2、BASE理論
2.1、定義介紹
2.2、最終一致性的介紹
2.3、BASE的實現方式
2.4、與ACID的對比
3、CAP與BASE的聯系
4、如何選擇CAP
前言
? ? ? ? ?在分布式系統中,CAP理論和BASE理論是指導系統設計的核心原則,分別從一致性(Consistency)、可用性(Availability)、分區容錯性(Partition Tolerance)以及最終一致性(Eventually Consistent)的角度,幫助開發者權衡分布式系統的特性。
如下圖所示:
????????CAP理論指出分布式系統無法同時保證一致性、可用性和分區容錯性,必須在CA中做出選擇。
????????在網絡分區時,系統通常選擇AP或CP架構,如ZooKeeper是CP,Eureka是AP。
????????BASE理論則是在CAP基礎上,接受在故障時損失部分可用性,允許數據的軟狀態和最終一致性,以實現大規模系統的可伸縮性。
1、CAP理論
1.1、介紹
????????CAP理論由計算機科學家 Eric Brewer 提出,指出在分布式系統中,最多只能同時滿足以下三個特性中的兩個。
????????對于一個分布式系統來說,當設計讀寫操作時,只能同時滿足以下三點中的兩個:
1、一致性(Consistency) :
所有節點訪問同一份最新的數據副本。
2、可用性(Availability):非故障的節點在合理的時間內返回合理的響應(不是錯誤或者超時的響應)。
3、分區容錯性(Partition Tolerance) :分布式系統出現網絡分區的時候,仍然能夠對外提供服務。
如下所示:
????????解決分區問題的最好辦法就是給數據備份,備份在不同的網絡中,這樣,當網絡通信出現故障,就會降低數據訪問不到的風險,提高了分區容錯性。
1.2、CAP的三種選擇
-
CP(一致性 + 分區容錯性)
-
保證數據強一致,但在網絡分區時可能拒絕請求(犧牲可用性)。
-
典型系統:ZooKeeper、etcd、HBase。
-
-
AP(可用性 + 分區容錯性)
-
保證高可用,但可能返回舊數據(犧牲強一致性)。
-
典型系統:Cassandra、DynamoDB、Eureka。
-
-
CA(一致性 + 可用性)
-
僅在無網絡分區的單機或局域網環境中可行,分布式系統通常無法避免分區(P必須選擇)。
-
1.3、CAP的注意事項
-
P是必須選擇的:分布式系統一定會面臨網絡分區問題(如機房斷網、節點宕機),因此實際選擇是?CP 或 AP。
-
CAP是理論極限:實際系統可能動態調整(如降級策略)。
2、BASE理論
????????由于CAP理論中的強一致性(C)和高可用性(A)難以同時滿足。
2.1、定義介紹
????????BASE理論(Basically Available, Soft state, Eventually consistent)提出了一種折中方案,適用于大規模分布式系統(如電商、社交網絡)。
以下是介紹:
????????軟狀態允許數據備份延遲,但最終這些數據都要保證一致性。這就是最終一致性。
2.2、最終一致性的介紹
????????最終一致性在軟狀態上加了一個時限,這個時限取決于網絡延時、系統負載、數據復制方案設計等。
根據實際的業務場景,最終一致性可被分為以下 5 種。
1、因果一致性
? ? ? ? 有果必有因。收到數據更新通知的節點,應該使用更新后的新值,即種下什么因,就得什么果。
????????例如,服務A更新了一個數據后,通知給了服務B,那么服務B如果要操作這個數據,應該使用 A 更新后的新值。如果 C 和 A沒有這種關系,那么可以不受這一條件的限制。
2、讀自身所寫
????????自身寫入的新值,之后讀取也應該是這個新值。這是一種特殊的因果一致性。
3、會話一致性
????????會話一致性將對系統數據的訪問過程框定在了一個會話當中:系統能保證在同一個有效的會話中實現“讀自身所寫”的一致性。
????????也就是說,執行更新操作之后,客戶端能夠在同一個會話中始終讀取到該數據項的最新值。
4、單調讀一致性
? ? ? ? 單調讀一致性是指,如果一個節點從系統中讀取出一個數據項的某個值后,那么系統對于該節點后續的任何數據訪問都不應該返回更舊的值。
5、單調寫一致性
????????單調寫一致性是指,一個系統要能夠保證來自同一個節點的寫操作被順序的執行。
????????在實踐中,這5種一致性往往會結合使用,以構建一個具有最終一致性的分布式系統。
2.3、BASE的實現方式
-
讀寫分離:寫操作同步到主節點,讀操作可能訪問從節點(舊數據)。
-
異步復制:數據先寫入主節點,再異步同步到從節點。
-
沖突解決:使用版本號(Vector Clock)、CRDT(無沖突數據類型)等機制處理沖突。
2.4、與ACID的對比
3、CAP與BASE的聯系
-
CAP是理論框架,指出分布式系統必須權衡一致性、可用性和分區容錯性。
-
BASE是工程實踐,在AP系統(高可用)的基礎上,通過最終一致性平衡性能與一致性。
CAP選擇
-
犧牲部分可用性(A):在網絡分區或選舉期間,ZooKeeper 可能暫時不可用(返回錯誤或阻塞請求)。
?????????Eureka 在設計的時候就是優先保證 A (可用性)。在 Eureka 中不存在什么 Leader 節點,每個節點都是一樣的、平等的。
????????因此 Eureka 不會像 ZooKeeper 那樣出現選舉過程中或者半數以上的機器不可用的時候服務就是不可用的情況。即使大部分節點掛掉也不會影響正常提供服務,只要有一個節點是可用的就行了。只不過這個節點上的數據可能并不是最新的。
4、如何選擇CAP
-
需要強一致性(CP):金融交易、分布式鎖(如etcd)。
-
需要高可用性(AP):社交網絡、商品庫存(如Cassandra)。
-
最終一致性(BASE):評論系統、消息隊列(如Kafka)。
總結
CAP理論:分布式系統必須犧牲C或A,P不可放棄。
BASE理論:通過最終一致性實現高可用,適合對實時一致性要求不高的場景。
現代系統趨勢:
混合模式(如TiDB:Raft保證CP,但通過優化提供高可用)。
動態調整(如網絡恢復后自動修復一致性)。
參考文章:
1、【分布式】CAP理論和BASE理論詳解_cap和base理論區別-CSDN博客https://blog.csdn.net/kazuhura/article/details/129771346?ops_request_misc=&request_id=&biz_id=102&utm_term=cap%E7%90%86%E8%AE%BA%E5%92%8Cbase%E7%90%86%E8%AE%BA&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-1-129771346.142^v102^pc_search_result_base1&spm=1018.2226.3001.4187