分布式 CAP理論 總結

前言


?相關系列

  • 《分布式 & 目錄》
  • 《分布式 & CAP理論 & 總結》
  • 《分布式 & CAP理論 & 問題》
    ?
    ?

分布式


????分布式的核心是將大型業務拆解成多個子業務以使之在不同的機器上執行。分布式是用于解決單個物理機容量&性能瓶頸問題而采用的優化手段,服務之間通過遠程調用進行交流,從而協同工作以對外提供服務。
?
?

CAP理論


  • Consistency @ (強)一致性:系統的所有節點在相同時刻可以看到相同數據,即對于在多個節點中存在的變量而言,其在同一時刻的值必然是相同的;
  • Availability @ 可用性:無論響應結果如何,系統都可以“在合理的時間內”響應請求,即使節點因為各類故障(包含但不限于網絡分區)而不可用;
  • Partition Tolerance @ 分區容錯性:系統能夠在發生(特指)網絡分區時繼續響應請求。

????所謂CAP理論指的是分布式系統無法在“讀/寫數據”時同時滿足“一致性/可用性/分區容錯性”三種特性,因此系統設計者必須在這三者之間做出權衡:

  • CA策略 @ 一致性&可用性:犧牲分區容錯性來保證一致性&可用性。CA策略不屬于分布式系統的可用策略,因為以目前的技術能力而言網絡分區是無法避免的。因此如果放棄了分區容錯性,那么分布式系統在網絡分區時將完全不可用。但該策略在單機部署&單點集群部署(服務雖然被多個部署為集群,但相互間沒有交互)時是可用的,或者說單機部署&單點集群部署的程序默認就是CA策略,因為其內部不存在網絡交互,因此也就無需在意網絡分區的發生。所有程序&系統在服務未拆分/未集群的情況下采用的都是CA策略;
  • CP策略 @ 一致性&分區容錯性:犧牲可用性來保證一致性&分區容錯性,適用于對數據一致性要求較高的分布式系統。當網絡分區發生時,如果節點A無法正常請求節點B以完成數據同步,那么其可以通過阻塞至網絡恢復的方式(并非只有這一種方式)來保證分區容錯性。這種方式同時還可保證一致性,因為其可保證數據的讀/寫一定是正確的。但與此同時該方法會犧牲可用性,因為阻塞可能會導致請求難以/無法被及時回應。在實際情況中,從節點A復制數據到節點B總是需要花費一定時間的。如果是跨地域(例如北京到廣州)的機房,耗費的時間就可能是幾十/幾百毫秒。因此CAP理論中的C在實踐中是不可能完美實現的,因為在數據復制的過程中節點A&B 的數據并不一致,但CAP理論并不在意這種延遲。ZooKeeper就是一個典型的CP系統,它采用分布式一致性算法(如Paxos/Raft等)來確保在不同節點之間就數據狀態達成強一致。此外,分布式一致性算法通常都帶有容錯特性,即只追求多數一致而非完全一致,故而大多數CP系統可用性其實也相當可觀;
  • AP策略 @ 可用性&分區容錯性:犧牲一致性來保證可用性&分區容錯性,適用于對可用性較高的場景。當節點故障/網絡分區發生時,如果節點A無法正常請求節點B以完成數據同步,那么其可以通過放棄請求的方式(并非只有這一種方式)來保證分區容錯性。這種方式同時還可保證可用性,因為其確保了回應必然是及時的。但與此同時該方法會犧牲一致性,因為請求將難以/無法正確地讀/寫數據。AP策略通常依賴“最終一致性”模型進行彌補,即雖然會有一定的延遲,但數據最終還是會在一定時間內會達成一致。

????CAP理論策略的選擇不是一成不變的。在 CAP理論落地實踐時,我們需要將系統數據按照不同的應用場景和要求進行分類,從而為每類數據選擇不同的分布式策略,而不是直接限定整個系統的所有數據都使用同一策略。

????CAP理論告訴我們必須“犧牲”三特性中的一個,但這里的“犧牲”其實有一定誤導作用,因為“犧牲”讓很多人理解成徹底放棄。但實際上CAP理論的“犧牲”只是說我們無法在節點故障/網絡分區期間保證一致性/可用性,而現實情況是系統在整個生命周期的大部分時間里·都是正常的,發生節點故障/網絡分區現象的時間并不長。例如4個9 @ 99.99%可用性的系統一年運行下來不可用的時間只有50分鐘;而5個9 @ 99.999%可用性的系統一年運行下來不可用的時間更是只有5分鐘而已。在節點故障/網絡分區期間放棄一致性/可用性并不意味著永遠放棄,我們可以在節點故障/網絡分區期間進行一些操作,從而令分布式系統在故障解決后重新達到一致性&可用性的狀態。
?
?

BASE理論


????BASE理論是對CAP理論一致性&可用性進行權衡后的結果,其核心思想是即使無法做到Strong consistency @ 強一致性,但每個應用也該根據自身業務的特點采用適當的方式來使系統達到Eventual consistency @ 最終一致性。

????BASE是Basically Available @ 基本可用/Soft state @ 軟狀態/Eventually consistent @ 最終一致三個短語的簡寫,其各自含義具體如下:

  • 基本可用:基本可用是指允許分布式系統在出現不可預知故障時候損失部分可用性。但注意!這絕不等價于系統不可用,以下兩個就是“基本可用”的典型例子:
    ????響應時間上的損失:正常情況下,一個在線搜索引擎需要0.5秒內返回給用戶相應的查詢結果,但由于出現異常(比如系統部分機房發生斷電或斷網故障),查詢結果的響應時間增加到了1 ~ 2秒;
    ????功能上的損失:正常情況下,在一個電子商務網站上進行購物,消費者幾乎能夠順利地完成每一筆訂單,但是在一些節日大促購物高峰的時候,由于消費者的購物行為激增,為了保護購物系統的穩定性,部分消費者可能會被引導到一個降級頁面。
  • 軟狀態:軟狀態也稱弱狀態,和硬狀態相對,是指允許系統中的數據存在中間狀態,并認為該中間狀態的存在不會影響系統的整體可用性。通俗的說就是允許系統在不同節點的數據副本之間進行同步的過程存在延時。
  • 最終一致性:最終一致性強調的是系統中所有的數據副本,在經過一段時間的同步后,最終能夠達到一個一致的狀態。最終一致性的本質是需要系統數據最終能夠達到一致,而不需要實時保證系統數據的強一致性。

????BASE理論是對CAP理論AP策略的延伸&補充,是權衡一致性&可用性后的結果。BASE理論的誕生基礎是CAP理論的AP/CP策略本質實現的也是最終一致性:例如CP策略雖然名義上保證了強一致性,但現實中數據副本的同步是有延遲的,但CAP理論直接忽視了這些延遲,因此絕對完美的CP策略是不存在的;而AP策略雖然犧牲了一致性,但這種犧牲實際上也只限于節點故障/網絡分區期間,當故障恢復正常后數據同樣會恢復至最終一致。

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

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

相關文章

python xpath解析筆記

與bs4的區別 bs4有很多屬性和方法,而xpath只有一個方法,是通過不同的xpath表達式實現很多功能的。 html例子 定位 tree.xpath(‘/html/head/title’) 返回列表。 開頭的斜杠表示從根節點遍歷。 中間的斜杠表示層級。(相當于bs4中的>…

Q學習(Q-Learning)詳解

?作者簡介:2022年博客新星 第八。熱愛國學的Java后端開發者,修心和技術同步精進。 🍎個人主頁:Java Fans的博客 🍊個人信條:不遷怒,不貳過。小知識,大智慧。 💞當前專欄…

樹狀數組詳解

概述 樹狀數組(Binary Indexed Tree,簡稱BIT),是一種數據結構,用于處理區間查詢和更新問題。它是一種可以高效地在對數級別時間復雜度內進行單點更新和區間查詢的數據結構。樹狀數組通常用于解決以下兩類問題&#xf…

freeswitch(開啟支持MCU視頻會議,使用mod_av模塊)

親測版本centos 7.9系統–》 freeswitch1.10.9 本人freeswitch安裝路徑(根據自己的路徑進入) /usr/local/freeswitch/etc/freeswitch場景說明: 有些場景想使用視頻會議MCU融合畫面進行開會使用方法: 第一步:下載插件 yum install -y epel-release yum install

【大數據技術基礎】【記錄Ubuntu 16.04升級到18.04】Ubuntu的一個版本升級到另一個版本

在 Ubuntu 操作系統中進行軟件更新和系統升級 Ubuntu Kylin 16.04 LTS 系統進行系統升級到 Ubuntu 18.04.6 LTS 版本 升級提示:系統彈出提示框,告知用戶有新版本的 Ubuntu 可用,詢問用戶是否想要升級。 認證窗口:顯示了一個認證…

這是一個vue3 + scss的數字滾動效果

介紹: 當數字變化時&#xff0c;只改變變化的數字位&#xff0c;其余的不變&#xff0c;可以遞增、遞減、驟變、負數也可以&#xff0c;但是樣式要根據具體的項目需求去改&#xff1b; 效果1、增加數字&#xff1a; 效果2、減少數字&#xff1a; 使用方法&#xff1a; <te…

TortoiseGit的下載、安裝和配置

一、TortoiseGit的簡介 tortoiseGit是一個開放的git版本控制系統的源客戶端&#xff0c;支持Winxp/vista/win7.該軟件功能和git一樣 不同的是&#xff1a;git是命令行操作模式&#xff0c;tortoiseGit界面化操作模式&#xff0c;不用記git相關命令就可以直接操作&#xff0c;讀…

最新版Chrome瀏覽器加載ActiveX控件之Adobe PDF閱讀器控件

背景 Adobe PDF閱讀器控件是一個ActiveX控件&#xff0c;用于在Windows平臺上顯示和操作PDF文件。它提供了一系列方法和屬性&#xff0c;可以實現對PDF文件的加載、顯示、搜索、打印、保存等操作。 allWebPlugin中間件是一款為用戶提供安全、可靠、便捷的瀏覽器插件服務的中間件…

linux在沒網的情況下如何校驗時間 超詳細拿來即用

一、沒有校時服務器的話 1、手動修改 sudo date --set"2024-06-17 13:44:00"二、有校時服務器的話 1、手動校時 ntpdate 14.193.73.22、自動校時 寫一個校時服務腳本 14.193.73.2 是校驗時間服務器 #!/bin/sh while true dontpdate 14.193.73.2sleep 5;hwclock…

源碼分析之Openlayers中的控件篇Control基類介紹

概述 Openlayers 中內置了9類控件&#xff0c;這9類控件都是基于Control類&#xff0c;而Control類則是繼承于BaseObject類&#xff0c;如下圖所示&#xff1a; 如上&#xff0c;這9類控件分別是&#xff1a; Attribution&#xff1a;屬性控件FullScreen:全屏控件MousePositi…

計算機網絡知識點全梳理(二.HTTP知識點總結)

目錄 HTTP基本概念 HTTP優缺點 HTTP優點&#xff08;1.1&#xff09; HTTP缺點 HTTP與HTTPS HTTP 與 HTTPS 的區別 HTTPS 解決 HTTP 的哪些安全問題&#xff1f; HTTPS 如何解決安全問題&#xff1f; HTTPS 連接建立的過程&#xff1a; HTTP/1.1、HTTP/2、HTTP/3 演…

第P2周:Pytorch實現CIFAR10彩色圖片識別

&#x1f368; 本文為&#x1f517;365天深度學習訓練營 中的學習記錄博客&#x1f356; 原作者&#xff1a;K同學啊 目標 實現CIFAR-10的彩色圖片識別實現比P1周更復雜一點的CNN網絡 具體實現 &#xff08;一&#xff09;環境 語言環境&#xff1a;Python 3.10 編 譯 器: …

Quant connect的優勢和不足,學習曲線難

Quant connect的優勢和不足 Quant connect作為一個成熟的算法交易平臺&#xff0c;具有許多優勢&#xff0c;包括&#xff1a; 強大的回測功能&#xff1a;Quant connect提供了豐富的數據源和回測功能&#xff0c;可以對各種交易策略進行全面的回測和分析。 容易上手&#xf…

深入理解 Ansible Playbook:組件與實戰

目錄 1 playbook介紹 2 YAML語言 2.1語法簡介 2.2數據類型 3 Playbook核心組件 3.1 hosts組件 3.2 remote_user組件 3.3 task列表和action組件 3.4 handlers 3.5 tags組件 3.6 其他組件說明 1 playbook介紹 playbook 劇本是由一個或多個"play"組成的列表。…

2024年食堂采購系統源碼技術趨勢:如何開發智能的供應鏈管理APP

本篇文章&#xff0c;小編將與大家一同探討2024年食堂采購系統的技術趨勢&#xff0c;并提供開發更智能的供應鏈管理APP的策略。 一、2024年食堂采購系統的技術趨勢 1.人工智能與機器學習的深度應用 在2024年&#xff0c;AI和機器學習在食堂采購系統中的應用將更加普遍。這些…

代碼隨想錄-算法訓練營-番外(圖論01:圖論理論基礎,所有可到達的路徑)

day01 圖論part01 今日任務:圖論理論基礎/所有可到達的路徑 代碼隨想錄圖論視頻部分還沒更新 https://programmercarl.com/kamacoder/圖論理論基礎.html#圖的基本概念 day01 所有可達路徑 鄰接矩陣 import java.util.Scanner;import java.util.List;import java.util.ArrayL…

系統架構的演變

什么是系統架構&#xff1f; 系統架構是系統的一種整體的高層次的結構表示&#xff0c;它確定了系統的基本組織、組件之間的關系、組件與環境的關系&#xff0c;以及指導其設計和發展的原則。隨著技術的發展和業務需求的增長&#xff0c;系統架構經歷了從簡單到復雜、從集中到…

c++總復習

C 中多態性在實際項目中的應用場景 圖形繪制系統 描述&#xff1a;在一個圖形繪制軟件中&#xff0c;可能有多種圖形&#xff0c;如圓形、矩形、三角形等。這些圖形都有一個共同的操作&#xff0c;比如繪制&#xff08;draw&#xff09;。通過多態性&#xff0c;可以定義一個基…

pip離線安裝一個github倉庫

要使用pip安裝一個本地Git倉庫&#xff0c;你可以按照以下步驟操作&#xff1a; 確保你已經克隆了Git倉庫到本地。 進入倉庫所在的目錄。 使用pip安裝。 以下是具體的命令&#xff1a; 克隆Git倉庫到本地&#xff08;替換下面的URL為你的倉庫URL&#xff09; git clone https…

【從零開始入門unity游戲開發之——C#篇04】棧(Stack)和堆(Heap),值類型和引用類型,以及特殊的引用類型string

文章目錄 知識回顧一、棧&#xff08;Stack&#xff09;和堆&#xff08;Heap&#xff09;1、什么是棧和堆2、為什么要分棧和堆3、棧和堆的區別棧堆 4、總結 二、值類型和引用類型1、那么值類型和引用類型到底有什么區別呢&#xff1f;值類型引用類型 2、總結 三、特殊的引用類…