分布式理論:CAP、Base理論

目錄

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的三種選擇

  1. CP(一致性 + 分區容錯性)

    • 保證數據強一致,但在網絡分區時可能拒絕請求(犧牲可用性)。

    • 典型系統:ZooKeeper、etcd、HBase。

  2. AP(可用性 + 分區容錯性)

    • 保證高可用,但可能返回舊數據(犧牲強一致性)。

    • 典型系統:Cassandra、DynamoDB、Eureka。

  3. 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的實現方式

  1. 讀寫分離:寫操作同步到主節點,讀操作可能訪問從節點(舊數據)。

  2. 異步復制:數據先寫入主節點,再異步同步到從節點。

  3. 沖突解決:使用版本號(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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/87992.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/87992.shtml
英文地址,請注明出處:http://en.pswp.cn/web/87992.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【最新】飛算 JavaAl安裝、注冊,使用全流程,讓ai自己給你寫代碼,解放雙手

目錄 飛算 JavaAl 產品介紹 安裝飛算 JavaAl 第一步:點擊 File->Setting 第二步:點擊 Plugins 第三步:搜索 CalEx-JavaAI 第四步:點擊 Install 進行安裝 第五步:點擊 Install ,查看安裝好的飛算…

無人設備遙控器之姿態控制算法篇

無人設備遙控器的姿態控制算法通過傳感器數據融合、控制算法優化和執行機構調節實現動態平衡,核心算法包括PID控制、自適應控制、模型預測控制(MPC),以及數據融合中的互補濾波和卡爾曼濾波,同時涉及四元數算法和深度強…

【加解密與C】Base系列(三)Base85

Base85 編碼簡介 Base85(也稱為 Ascii85)是一種二進制到文本的編碼方案,用于將二進制數據轉換為可打印的ASCII字符。它的效率高于Base64,但生成的字符串可能包含特殊字符(如引號或反斜杠),需在…

Docker企業級應用:從入門到生產環境最佳實踐

一、Docker核心概念與架構 1.1 Docker技術棧 #mermaid-svg-CUEiyGo05ZYG524v {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-CUEiyGo05ZYG524v .error-icon{fill:#552222;}#mermaid-svg-CUEiyGo05ZYG524v .error-te…

8、保存應用數據

目錄用戶首選項的使用用戶首選項主要API用戶首選項開發流程用戶首選項開發實踐關系型數據庫的使用關系型數據庫工作流程關系型數據庫開發實踐用戶首選項的使用 用戶首選項主要API 用戶首選項開發流程 成功的獲取了一個名為myStore的Preferences實例 保存了一個鍵值對&#x…

(C++)list列表相關基礎用法(C++教程)(STL庫基礎教程)

源代碼&#xff1a;#include <iostream> #include <list>using namespace std;int main(){list<int> numbers{10,20,30};numbers.push_front(5);numbers.push_back(40);auto it numbers.begin();advance(it,2);numbers.insert(it,15);cout<<"該列…

Spring CGLIB私有方法訪問成員變量為null問題

場景 代碼 RestController public class TestJob {Autowiredprivate XxService xxService;XxlJob("testCGLIB")private void doTest(){System.out.println("方法調用");System.out.println("成員變量注入:"(xxService!null));this.doInnerTest()…

Paimon本地表查詢引擎LocalTableQuery詳解

LocalTableQueryLocalTableQuery 是 Paimon 中實現本地化、帶緩存的表查詢的核心引擎。它的主要應用場景是 Flink 中的 Lookup Join。當 Flink 作業需要根據一個流中的 Key 去關聯一個 Paimon 維表時&#xff0c;LocalTableQuery 可以在 Flink 的 TaskManager 節點上&#xff0…

使用協程簡化異步資源獲取操作

異步編程的兩種場景 在異步編程中&#xff0c;回調函數通常服務于兩種不同場景&#xff1a; 一次性資源獲取&#xff1a;等待異步操作完成并返回結果。持續事件通知。監聽并響應多個狀態變更。 Kotlin為這兩種場景提供了解決方案&#xff1a;使用掛起函數簡化一次性資源獲取…

ABP VNext + Cosmos DB Change Feed:搭建實時數據變更流服務

ABP VNext Cosmos DB Change Feed&#xff1a;搭建實時數據變更流服務 &#x1f680; &#x1f4da; 目錄ABP VNext Cosmos DB Change Feed&#xff1a;搭建實時數據變更流服務 &#x1f680;TL;DR ?&#x1f680;1. 環境與依賴 &#x1f3d7;?2. 服務注冊與依賴注入 &…

STM32-定時器

定時器&#xff1a;有4個獨立通道&#xff1a;輸入捕獲&#xff1b;輸出比較PWM生成&#xff1b;單脈沖模式輸出&#xff1b;可通外部信號控制定時器&#xff08;TIMx-ETR&#xff09;&#xff1b;支持針對定時的增量&#xff08;正交&#xff09;編碼器、霍爾傳感器電路通用定…

Windows Server 2019--職業技能大賽B模塊Windows服務器配置樣題

一、賽題說明 &#xff08;一&#xff09;競賽介紹 請詳細閱讀網絡拓撲圖&#xff0c;為所有計算機修改默認防火墻以便允許ICMP和相應的流量&#xff0c;不允許直接關閉主機的防火墻。除了CD-ROM/HDD驅動器&#xff0c;請不要修改虛擬機本身的硬件設置。 &#xff08;二&…

vue3+Echarts實現立體柱狀圖

Echarts柱狀圖中文網&#xff1a;https://echarts.apache.org/examples/zh/index.html#chart-type-bar 效果展示&#xff1a; 主要實現過程是三部分的組合&#xff0c;最上面是一個橢圓&#xff0c;中間是正常的柱子&#xff0c;下方再加上一個橢圓&#xff0c;就出來立體的效…

【UE5】虛幻引擎小百科

一、類名前面的大寫字母的含義是什么UE5常見前綴分類表前綴含義實例用于AActorACharacter&#xff0c;AWeaponBase可放入世界中的對象&#xff08;有位置、可碰撞等&#xff09;UUObject派生類UUserWidget&#xff0c;UWeaponComponent引擎對象、邏輯模塊&#xff0c;不具備Tra…

【Linux系統】vim編輯器 | 編譯器gcc/g++ | make/Makefile

1. vim編輯器一、歷史發展與Vim vs Vi的區別起源與演進Vi&#xff08;1976年&#xff09; &#xff1a;由Bill Joy開發&#xff0c;嵌入BSD Unix系統&#xff0c;是首個面向屏幕的文本編輯器&#xff0c;但功能有限&#xff08;如無多級撤銷&#xff09;。Vim&#xff08;1991年…

國產飛騰主板,賦能網絡安全防御硬手段

? 當前&#xff0c;網絡安全形勢嚴峻&#xff0c;網絡攻擊手段不斷翻新&#xff0c;從數據泄露到電腦中毒&#xff0c;企業、機構乃至國家的數字資產都面臨著巨大風險。在此背景下&#xff0c;國產硬件技術的突破對筑牢網絡安全防線意義重大。 高能計算機基于市場需求&#…

Spring AI 概述與架構設計

目錄一、前言二、簡介三、核心能力概覽四、理解模塊架構圖五、模型適配能力六、最小應用示例七、與傳統 LLM 調用相比八、總結九、參考一、前言 在 AI 正以前所未有的速度“下沉”到各類系統與業務的當下&#xff0c;Spring 官方推出的 Spring AI 項目&#xff0c;為 Java 開發…

UI前端與數字孿生融合新領域:智慧環保的污染源監測與治理

hello寶子們...我們是艾斯視覺擅長ui設計、前端開發、數字孿生、大數據、三維建模、三維動畫10年經驗!希望我的分享能幫助到您!如需幫助可以評論關注私信我們一起探討!致敬感謝感恩!一、引言&#xff1a;數字孿生重構智慧環保的技術范式在環境污染治理壓力持續增大的背景下&…

【go/wails】wails入門系列(一)環境安裝與demo

文章目錄說在前面go安裝nodejs安裝wails創建項目運行說在前面 操作系統&#xff1a;win11go版本&#xff1a;1.24.4nodejs版本&#xff1a;v22.16.0wails版本&#xff1a;v2.10.1 go安裝 官網 這里 下載安裝即可 nodejs 官網 這里 下載安裝即可 安裝wails 設置go國內代理g…

linux qt 使用log4cpp庫

一、日志庫下載 下載地址&#xff1a;https://log4cpp.sourceforge.net/二、日志庫解壓&#xff0c;編譯 1.將文件夾解壓出來2.進入文件夾內部&#xff0c;打開終端3.終端中依次輸入以下命令 mkdir build ./configure --prefix$(pwd)/build make make install 一般來說不會報錯…