分布式CAP定理

CAP 定理

在一個分布式系統中,以下三個特性不可能同時完全滿足,最多只能滿足其中兩個:

  • C(Consistency,一致性)
    所有節點在同一時間看到的數據是完全一致的(即更新操作成功并返回后,所有節點都能獲取到最新值)。

  • A(Availability,可用性)
    只要收到用戶的請求,系統就必須在合理時間內返回一個非錯誤的響應(即系統始終處于可用狀態,不會拒絕服務)。

  • P(Partition tolerance,分區容錯性)
    當分布式系統中的網絡出現分區(如節點間通信中斷)時,系統仍能繼續運行(即對網絡故障的容忍能力)。

為什么三者不可兼得?

在分布式系統中,網絡分區(P)是不可避免的(如網絡故障、延遲等)。因此,實際設計中往往需要在?C 和 A 之間做權衡

  • 若優先保證?C + P(CP 系統):網絡分區時,為了保證數據一致,可能會拒絕部分節點的請求(犧牲可用性)。
  • 若優先保證?A + P(AP 系統):網絡分區時,為了保證所有節點可用,可能會返回不一致的數據(犧牲一致性)。

CP 系統

是指在分布式系統中,通過強一致性協議(如 Raft)多數派確認故障檢測,優先保證一致性(C)和分區容錯性(P),犧牲可用性(A)?的設計。適合對數據一致性要求極高的場景(如金融交易、分布式鎖)。

強一致性優先(Consistency First)

所有節點必須達成數據一致后才響應客戶端,不允許 “臟讀” 或 “中間狀態”。例如:分布式鎖服務必須保證同一時間只有一個客戶端獲取鎖。

采用強一致性協議確保數據同步,常見選擇:Paxos/Raft:通過選舉 Leader 節點協調寫入,確保多數節點確認后才提交數據。Raft 更易實現,適合工程落地(如 etcd、Consul 采用)。2PC(兩階段提交):適合中心化架構,但容錯性較差(協調者故障會導致阻塞)。

集群成員管理:故障檢測:通過心跳(Heartbeat)或定期探活識別失聯節點(如 ZooKeeper 的 Follower 與 Leader 保持心跳)。法定人數(Quorum):要求超過半數節點可用才能進行寫操作(如 5 節點集群需 3 節點確認,避免分區時兩邊都能寫入)。

數據存儲設計:只讀副本:可部署只讀節點分擔讀壓力,但寫操作必須通過主節點(Leader)。版本控制:通過版本號(如樂觀鎖)避免舊數據覆蓋新數據(如 etcd 的 Revision 機制)。

分區容錯性保障

網絡分區發生時,系統需能識別故障節點,避免數據分裂(腦裂)。例如:通過心跳檢測和超時機制標記故障節點。

可用性妥協

分區期間,可能拒絕部分讀寫請求(返回錯誤或超時),直到分區恢復或集群重新達成一致。

注意事項

  • 避免過度犧牲可用性

    • 分區時可允許讀舊數據(弱一致性讀),但寫操作必須嚴格保證一致。
    • 例如:etcd 提供 “線性一致性讀”(通過 Leader 讀取)和 “串行化讀”(可能讀舊數據)兩種模式。
  • 網絡分區恢復策略

    • 分區恢復后,需通過日志同步(如 Raft 的日志復制)讓所有節點數據一致。
    • 少數派節點需丟棄本地未提交的修改,以 Leader 數據為準。
  • 性能優化

    • 讀寫分離:Leader 處理寫請求,Follower 處理讀請求(需保證讀一致性)。
    • 批量操作:減少網絡交互,提升同步效率

?CP 系統場景

  • 分布式鎖(如 Redis RedLock、ZooKeeper 分布式鎖):必須保證同一時間只有一個持有者。
  • 元數據管理(如 HDFS NameNode、Kubernetes ETCD):集群配置需強一致。
  • 金融交易:轉賬操作必須確保雙方賬戶余額同步更新

AP系統

AP 系統(Availability + Partition Tolerance)是分布式系統設計中,優先保證可用性(A)和分區容錯性(P),而在網絡分區時允許一定程度數據不一致的系統。它更注重服務的持續可用,適合對響應速度和服務連續性要求高的場景。

高可用性(Availability)

無論是否發生網絡分區,系統都能在合理時間內響應客戶端請求(不返回錯誤),確保服務不中斷。

無中心節點:避免單點依賴,采用去中心化設計(如 P2P 或多主節點模式),每個節點可獨立處理請求。

本地優先寫入,異步復制:寫請求優先在本地節點執行并立即返回,數據通過后臺線程異步同步到其他節點(如 Cassandra 的 “最終一致性” 復制策略)。

沖突解決機制:分區恢復后,若不同節點存在數據沖突(如同一 key 被修改多次),需通過預設規則解決(如時間戳、版本號、業務邏輯)。

冗余設計:數據多副本存儲,即使部分節點故障,仍能從其他副本讀取數據。

讀寫策略:讀本地:優先讀取本地節點數據,保證低延遲。NWR 模型:可配置 “寫 N 個節點,讀 W 個節點”,在一致性和可用性間靈活調整(如 Riak)。

故障檢測與自動恢復:通過 Gossip 協議傳播節點狀態,分區恢復后自動觸發數據合并(如 Redis Cluster 的槽位遷移)。

分區容錯性(P)

網絡分區(節點通信中斷)時,各分區仍能獨立處理請求,不會因部分節點故障導致整個系統不可用。

最終一致性

犧牲強一致性,但保證 “最終一致性”—— 分區恢復后,通過數據同步機制,最終所有節點的數據會達成一致。

AP系統場景

  • 社交網絡:用戶動態、評論等對實時一致性要求低,但需高可用。
  • 內容分發:視頻、圖片等靜態資源,允許短期數據不一致。
  • 物聯網(IoT):設備狀態上報,優先保證設備能持續寫入數據。
  • 緩存系統:如 Redis Cluster,優先保證緩存服務可用,短暫不一致可接受。

?????

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

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

相關文章

PHP-Casbin:現代化 PHP 應用的權限管理引擎

在當今復雜的Web應用中,精細化的權限管理是保障系統安全的關鍵環節。PHP-Casbin 作為Casbin生態的PHP實現,憑借其靈活的模型支持和強大的擴展能力,已成為PHP開發者實現訪問控制的首選工具。 超越傳統權限模型 PHP-Casbin 基于PERM&#xff…

FastDeploy2.0:環境變量的說明

一、執行# 設置日志目錄 export FD_LOG_DIR/workspace/models/log# 指定使用的 GPU 設備 export CUDA_VISIBLE_DEVICES0,1,2,3# 創建日志目錄(如果不存在) mkdir -p "$FD_LOG_DIR"# 定義日志文件路徑 LOG_FILE"$FD_LOG_DIR/fastdeploy_se…

C語言:指針(1-2)

5. 指針運算指針的基本運算有三種,分別是:指針-整數指針-指針指針的關系運算5.1 指針運算在上面,我們知道,數組在內存中是連續存放的,只要知道第一個元素的地址,順藤摸瓜就能找到后面的所有元素。那么&…

【多模態】DPO學習筆記

DPO學習筆記1 原理1.0 名詞1.1 preference model1.2 RLHF1.3 從RLHF到DPOA.解的最優形式B. DPO下參數估計C. DPO下梯度更新D. DPO訓練的穩定性2 源代碼2.1 數據集構成2.2 計算log prob2.3 DPO loss1 原理 1.0 名詞 preference model:對人類偏好進行建模&#xff0…

2025最新、UI媲美豆包、DeepSeek等AI大廠的AIGC系統 - IMYAI源碼部署教程

IMYAI 系統部署與使用手冊 一、系統演示 🔹 快速體驗 前端演示地址:https://super.imyaigc.com后臺演示地址:https://super.imyaigc.com/settings 🔹 技術架構 前端:Vite Vue3 NaiveUI TailwindCSS Plyr后端&…

【關于Java的反射】

在 Java 編程中,反射(Reflection) 是一個非常強大的工具,它允許你在運行時動態地獲取類的信息、創建對象、調用方法和訪問字段。雖然反射功能強大,但它也有一些局限性和性能開銷,因此需要謹慎使用。一、什么…

Gitee推出“移動軟件工廠“解決方案 解決嵌入式與涉密場景研發困局

Gitee推出"移動軟件工廠"解決方案 破解嵌入式與涉密場景研發困局 隨著數字化轉型浪潮的推進,軟件開發正面臨著前所未有的復雜環境挑戰。特別是在嵌入式系統、FPGA開發以及涉密信息系統等特殊場景下,研發團隊往往需要在高安全要求與有限網絡環境…

低功耗16*8位四線串行8*4按鍵陣矩LED驅動專用電路

概述:PC0340是占空比可調的LED顯示控制驅動電路。由16根段輸出、8根位輸出、數字接口、數據鎖存器、顯示存儲器、鍵掃描電路及相關控制電路組成了一個高可靠性的單片機外圍LED驅動電路。串行數據通過4線串行接口輸入到PC0340,采用LQFP44L的封裝形式。本產…

通過自定義注解加aop切面實現權限控制

前言:自定義注解,通過aop切面前置通知,對請求接口進行權限控制1,創建枚舉類package org.springblade.sample.annotationCommon;import lombok.AllArgsConstructor; import lombok.Getter;import java.util.Arrays; import java.ut…

IDS知識點

在網絡安全工程師、系統運維工程師等崗位的面試中,??IDS(Intrusion Detection System,入侵檢測系統)?? 是高頻考點,尤其是對網絡安全防護、安全監控類崗位。以下是IDS的核心考點和必須掌握的知識點,按優…

Adobe Analytics 數據分析平臺|全渠道客戶行為分析與體驗優化

Adobe Analytics 是業界領先的數據分析平臺,幫助企業實時追蹤客戶行為,整合多渠道數據,通過強大的分析與可視化工具深入分析客戶旅程,優化數字體驗。結合 Adobe Experience Cloud,Adobe Analytics 成為推動數字化增長和…

【輪播圖】H5端輪播圖、橫向滑動、劃屏效果實現方案——Vue3+CSS position/CSS scroller

文章目錄定位實現滑屏效果前置知識CSS: touch-action屬性CSS: transform屬性觸摸事件forEach回調占位符準備階段實現移動效果實現跟手效果觸摸結束優化完整代碼滾動實現滑屏效果前置知識CSS: scroll-snap-type屬性準備階段實現滑動效果實現吸附效果滾動條隱藏存在問題完整代碼s…

忘記了WordPress管理員密碼的找回方法

WordPress管理員密碼找回方法 如果您忘記了WordPress管理員密碼,可以通過以下幾種方法找回或重置: 方法1:通過電子郵件重置(最簡單) 訪問您的WordPress登錄頁面(通常是wodepress.com/wp-admin或wodepress.com/wp-login.php) 點擊”忘記密…

RAFT:讓語言模型更聰明地用文檔答題

RAFT:讓語言模型更聰明地用文檔答題 作者注: 本文旨在面向零基礎讀者介紹 UC Berkeley 提出的 RAFT(Retrieval-Augmented Fine-Tuning)方法。它是一種訓練語言模型的新方式,讓模型更好地利用“外部知識”——比如文檔、…

【緊急預警】NVIDIA Triton推理服務器漏洞鏈可導致RCE!

2025 年 8 月 4 日消息,NVIDIA 旗下的 Triton 推理服務器(一款支持 Windows 和 Linux 系統、用于大規模運行 AI 模型的開源平臺)被曝出一系列安全漏洞。這些漏洞一旦被利用,攻擊者有可能完全接管存在漏洞的服務器。 Wiz 安全公司…

基于深度學習的醫學圖像分析:使用PixelCNN實現醫學圖像生成

前言 醫學圖像分析是計算機視覺領域中的一個重要應用,特別是在醫學圖像生成任務中,深度學習技術已經取得了顯著的進展。醫學圖像生成是指通過深度學習模型生成醫學圖像,這對于醫學研究、疾病模擬和圖像增強等任務具有重要意義。近年來&#x…

React ahooks——副作用類hooks之useDebounceFn

useDebounceFn 是 ahooks 提供的用于函數防抖的 Hook,它可以確保一個函數在連續觸發時只執行最后一次。一、基本用法import { useDebounceFn } from ahooks; import { Button } from antd;const Demo () > {const { run } useDebounceFn(() > {console.log(…

【機器學習深度學習】 知識蒸餾

目錄 前言 一、什么是知識蒸餾? 二、知識蒸餾的核心意義 2.1 降低算力與成本 2.2 加速推理與邊緣部署 2.3 推動行業應用落地 2.4 技術自主可控 三、知識蒸餾的本質:大模型的知識傳承 四、知識蒸餾的“四重紅利” 五、DeepSeek的知識蒸餾實踐 …

Python高級編程與實踐:Python高級數據結構與編程技巧

高級數據結構:掌握Python中的高效編程技巧 學習目標 通過本課程,學員將深入了解Python中的高級數據結構,包括列表推導式、字典推導式、集合推導式和生成器表達式。學員將學習如何利用這些結構來編寫更簡潔、更高效的代碼,并了解它…

【C++】Stack and Queue and Functor

本文是小編鞏固自身而作,如有錯誤,歡迎指出!本次我們介紹STL中的stack和queue和其相關的一些容器和仿函數一.stack and queue1.適配器stack和queue其實不是真正意義上的容器,而是容器適配器,而容器適配器又是什么呢&am…