CAP 理論筆記

一、CAP 理論概述

CAP 理論由 Eric Brewer 于 2000 年提出,并在 2002 年被正式證明。它描述了分布式系統在 一致性(Consistency)可用性(Availability)分區容忍性(Partition Tolerance) 三個特性之間的取舍。

CAP 三個核心概念:

  • C(Consistency,一致性)
    所有節點在同一時間的數據視圖一致。
    表現:客戶端無論連接哪個節點,都能讀取到最新數據。
  • A(Availability,可用性)
    每個請求都能在有限時間內得到響應(成功或失敗)。
    表現:即使部分節點宕機,系統也能正常對外提供服務。
  • P(Partition Tolerance,分區容忍性)
    系統能夠容忍網絡分區(節點間通信中斷)并繼續提供服務。
    表現:即使集群被分隔成多個子集群,系統仍能運行。

二、為什么不能同時滿足 CAP 三者?

原因:
分布式系統不可避免會出現 網絡分區(P),如果系統要求 可用性(A),必須繼續響應請求;如果要求 一致性(C),必須等待所有節點同步完成再返回結果。這兩者在網絡分區時是沖突的。

直觀示例:

  • 如果要保證 一致性(C)
    網絡分區后,某個節點接到寫請求,必須等待另一個分區的節點確認,導致無法響應,降低可用性。
  • 如果要保證 可用性(A)
    網絡分區后,節點仍然獨立處理請求,但不同分區的數據可能不一致。

三、CAP 三者的關系

CAP 理論核心結論:

在分布式系統中,網絡分區(P)必然會發生,因此只能在 一致性(C)和可用性(A)之間取舍

對應組合:

  • CP 系統(Consistency + Partition Tolerance)
    特點:犧牲可用性,保證一致性。
    示例:ZooKeeper、HBase。
  • AP 系統(Availability + Partition Tolerance)
    特點:犧牲強一致性,保證可用性,采用最終一致性。
    示例:Cassandra、Eureka。
  • CA 系統(Consistency + Availability)
    特點:不考慮網絡分區(單機數據庫)。
    示例:MySQL 單機模式。

四、分布式場景下的 CAP 取舍

系統類型選擇典型案例
單機數據庫CAMySQL 單機
分布式協調服務CPZookeeper、etcd
分布式緩存系統APRedis Cluster、Cassandra

五、CAP 理論在常見系統中的應用

1. MySQL 主從復制

  • 目標:數據一致性高(主從同步),但延遲可能影響可用性。

  • 方案:

    • 強一致性(CP):主從同步采用 同步復制,但可用性下降。
    • 高可用(AP):主從同步采用 異步復制,提升可用性,但可能出現短暫不一致。

2. Redis Cluster

  • 目標:高可用性。

  • Redis 選擇 AP

    • 分區時,仍然接受請求,保證可用性。
    • 通過 異步復制 + 最終一致性 解決數據一致性問題。

3. ZooKeeper

  • 目標:強一致性。

  • ZooKeeper 選擇 CP

    • 網絡分區時,為保持一致性,部分節點拒絕服務,降低可用性。

六、CAP 與 BASE 理論

CAP 是基礎理論,而實際工程中,很多系統選擇 AP + 最終一致性,這就是 BASE 理論

  • Basically Available(基本可用)
  • Soft State(軟狀態)
  • Eventually Consistent(最終一致性)

七、圖解 CAP

        CAP 三角關系+-----------+|    C      ||           ||           |+----+----+      ||         |      |A         P
  • CA:單機系統。
  • CP:一致性 + 分區容忍 → 犧牲可用性。
  • AP:可用性 + 分區容忍 → 犧牲強一致性。

八、面試高頻問答

Q1:CAP 理論中,為什么不能同時滿足三者?

  • 網絡分區(P)在分布式系統中必然發生。
  • 分區發生時,保證 一致性(C) 需要同步確認,降低可用性。
  • 保證 可用性(A) 則必須放棄強一致性。

Q2:MySQL 屬于 CAP 哪種?

  • 單機:CA。

  • 主從復制:

    • 同步復制:CP。
    • 異步復制:AP。

Q3:Redis 屬于 CAP 哪種?

  • Redis Cluster:AP(高可用 + 最終一致性)。

Q4:ZooKeeper 屬于哪種?

  • CP(犧牲可用性,保證一致性)。

Q5:CAP 理論與 BASE 理論區別?

  • CAP:理論模型,三者不可兼得。
  • BASE:工程實踐,強調最終一致性。

九、總結表

特性含義典型場景
C所有節點數據一致事務數據庫
A每次請求都能得到響應分布式緩存
P系統能容忍分區故障并繼續提供服務所有分布式系統必須具備的能力

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

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

相關文章

Android 底層實現基礎

Activity 生命周期應用內 Activity 跳轉流程(A → B) 從 Activity A 打開新的 Activity B(如點擊按鈕跳轉詳情頁) A.onCreate() → A.onStart() → A.onResume() (A 已在前臺)點擊跳轉按鈕 → A.onPause() …

MySQL進階:(第一篇) 深入解析MySQL存儲引擎架構

一、MySQL的體系結構連接層:最上層是一些客戶端和鏈接服務,主要完成一些類似于連接處理、授權認證、及相關的安全方案。服務器也會為安全接入的每個客戶端驗證它所具有的操作權限。服務層:第二層架構主要完成大多數的核心服務功能&#xff0c…

京東m端 滑塊 分析 t30

聲明: 本文章中所有內容僅供學習交流使用,不用于其他任何目的,抓包內容、敏感網址、數據接口等均已做脫敏處理,嚴禁用于商業用途和非法用途,否則由此產生的一切后果均與作者無關!部分python代碼response requests.pos…

CentOS使用命令行工具為其配置靜態網絡并使用VMware軟件ovf配置文件快速配置多臺不同ip的centos文件

目錄 一、實驗前準備 1.SSH遠程登錄工具 二、CentOS配置靜態IP并實現遠程ssh登錄 1.VMware軟件查看NAT模式下默認網段和網關 2.使用ipconfig查看當前網卡名字和動態分配的ip地址 3.使用VIM編輯網絡配置文件(此步驟可有其他編輯器替代,例如&#xf…

設計模式學習[17]---組合模式

文章目錄前言1.引例2.一致性抽象處理3.透明組合模式與安全組合模式總結前言 在畫類圖的時候,類與類之間有組合關系,聚合關系,我本來以為這個組合模式應該是整體與部分的關系,其實設計模式中的組合模式和類圖中的組合不是同一個東…

48Days-Day12 | 添加字符,數組變換,裝箱問題

添加字符 添加字符_牛客筆試題_牛客網 算法原理 因為本題數據量都比較小,所以我們可以直接使用暴力解法,枚舉B字符串的每一個位置作為與A字符串比較的起點,維護一個最小位數的值 代碼 import java.util.*;// 注意類名必須為 Main, 不要有…

關于npm前端項目編譯時棧溢出 Maximum call stack size exceeded的處理方案

背景:使用vueelementui的前端項目,使用jenkins進行自動化編譯部署,某天在進行編譯發版的時候,突然出現 npm ERR! Maximum call stack size exceeded 錯誤,一直都沒法編譯成功。原因:隨著前端項目的不斷迭代…

微信小程序組件發布為 npm 包的具體步驟

1. 準備工作 首先,您需要在系統上安裝 Node.js 和 npm。如果尚未安裝,請訪問 Node.js — Run JavaScript Everywhere 下載并安裝最新版本。 2. 創建獨立的組件目錄 為了更好地管理組件,建議將其從當前項目中獨立出來: wechat-…

LCM中間件入門(2):LCM核心實現原理解析

文章目錄一、good()函數:LCM實例狀態檢查的實現原理1. 實現邏輯2. 簡化代碼示例(C語言核心邏輯)二、publish():向指定channel發送消息的原理1. 完整流程拆解2. 簡化代碼示例(C核心邏輯)三、subscribe()&…

Nginx安裝及配置

一.nginx安裝1.1nginx概述1.1.1 nginx介紹Nginx是一款高性能的開源HTTP和反向代理服務器,是免費的、開源的、高性能的HTTP和反向代理服務器、郵件代理服務器、以及TCP/UDP代理服務器解決C10K問題(10K Connections)。同時也支持IMAP/POP3代理服…

SelectDB數據庫,新一代實時數據倉庫的全面解析與應用

摘要:SelectDB是一款基于Apache Doris的新一代實時數據倉庫解決方案,具備實時極速、融合統一、彈性架構和開放生態四大核心特性。它采用云原生存算分離架構,支持秒級數據更新、毫秒級查詢響應,在TPC-H等基準測試中性能超越傳統系統…

自動駕駛的未來:多模態傳感器鉆機

倫敦大學學院博士生袁方正在建造多模態傳感器鉆機,以探索自動駕駛的未來。他的最新設置匯集了一套尖端傳感器: 📡 60 GHz 雷達(用于 Raspberry Pi 的 DreamHAT)DreamRF 📷 RGB 深度攝像頭 (Real…

13.Redis 的級聯復制

Redis 的級聯復制 即實現基于Slave節點的Slave 1. 修改 Slave 節點配置文件 # 第一個slave節點 [rootubuntu2204 ~]#vim /apps/redis/etc/redis.conf(大約在533行附近) replicaof 10.0.0.100 6379 masterauth 123456# 第二個slave節點 [rootubuntu2204 ~]#vim /apps/redis/etc/…

spring-ai-alibaba 學習(二十)——graph之檢查點

前面學習了graph的基本概念,參數設置,特殊節點和邊,今天學習一下檢查點檢查點可能名稱比較抽象,換個名字可能比較容易理解,進度保存點或者存檔點,可以類比游戲中保存當前游戲進度的存檔進度主要用于人工介入…

sqli-labs:Less-19關卡詳細解析

1. 思路🚀 本關的SQL語句為: $insert"INSERT INTO security.referers (referer, ip_address) VALUES ($uagent, $IP)";注入類型:字符串型(單引號包裹)、INSERT操作提示:參數需以閉合關鍵參數&a…

Java小紅書源碼1:1還原uniapp_仿小紅書源碼

在內容驅動型社交平臺興起的背景下,小紅書作為圖文/視頻種草社區的代表,其產品結構與功能體驗逐漸成為眾多開發者與創業團隊的模仿藍本。本項目基于Java后端uni-app前端棧,完整復刻小紅書主要功能,支持多端(小程序、H5…

USB Type-C PD協議一文通

原文:https://www.richtek.com/Design%20Support/Technical%20Document/AN056?sc_langzh-TW譯者:TrustZone1、概述 USB Type-C標準的出現是為了滿足不斷增長的現代設備之間的連接需要,它在傳統USB標準的基礎上提供了更高的電源傳輸能力和資料…

AI文檔比對和Word的“比較”功能有什么區別?

AI文檔比對工具的核心區別在于,它超越了Word的純文本“找不同”,能精準處理掃描件、表格及印章,并將文檔審查從被動的文本核對,處理大文檔也更為快速及準確。 為什么Word的“比較”功能已經不夠用了? 對于許多專業人士…

AI驅動SEO關鍵詞智能進化

內容概要 隨著人工智能(AI)技術的快速演進,搜索引擎優化(SEO)領域正迎來前所未有的變革。本文核心探討AI如何驅動SEO關鍵詞的智能進化,重點解析人工智能革新關鍵詞研究與優化策略的機制,包括智能…

基于SpringBoot+MyBatis+MySQL+VUE實現的青年公寓服務平臺管理系統(附源碼+數據庫+畢業論文+部署教程+配套軟件)

摘 要 傳統信息的管理大部分依賴于管理人員的手工登記與管理,然而,隨著近些年信息技術的迅猛發展,讓許多比較老套的信息管理模式進行了更新迭代,房屋信息因為其管理內容繁雜,管理數量繁多導致手工進行處理不能滿足廣…