架構學習 2 CAP理論第二版

2022-09-20 09:03:11 字數 2945 閱讀 6403

一、定義

在乙個分布式系統(指互相連線並共享資料的節點的集合)中,當涉及讀寫操作時,只能保證一致性(consistence)、可用性(**ailability)、分割槽容錯性(partition tolerance)三者中的兩個,另外乙個必須被犧牲。

1. 一致性(consistency)

對某個指定的客戶端來說,讀操作保證能夠返回最新的寫操作結果。

2. 可用性(**ailability)

非故障的節點在合理的時間內返回合理的響應(不是錯誤和超時的響應)。

3. 分割槽容忍性(partition tolerance)

當出現網路分割槽後,系統能夠繼續「履行職責」。

(p要求分布式和資料同步,c要求資料完全一致,a要求返回及時)

cap 應用

雖然 cap 理論定義是三個要素中只能取兩個,但放到分布式環境下來思考,我們會發現必須選擇 p(分割槽容忍)要素,因為網路本身無法做到 100% 可靠,有可能出故障,所以分割槽是乙個必然的現象。如果我們選擇了 ca 而放棄了 p,那麼當發生分割槽現象時,為了保證 c,系統需要禁止寫入,當有寫入請求時,系統返回 error(例如,當前系統不允許寫入),這又和 a 衝突了,因為 a 要求返回 no error 和 no timeout。因此,分布式系統理論上不可能選擇 ca 架構,只能選擇 cp 或者 ap 架構。

1.cp - consistency/partition tolerance

如下圖所示,為了保證一致性,當發生分割槽現象後,n1 節點上的資料已經更新到 y,但由於 n1 和 n2 之間的複製通道中斷,資料 y 無法同步到 n2,n2 節點上的資料還是 x。這時客戶端 c 訪問 n2 時,n2 需要返回 error,提示客戶端 c「系統現在發生了錯誤」,這種處理方式違背了可用性(**ailability)的要求,因此 cap 三者只能滿足 cp。

2.ap - **ailability/partition tolerance

如下圖所示,為了保證可用性,當發生分割槽現象後,n1 節點上的資料已經更新到 y,但由於 n1 和 n2 之間的複製通道中斷,資料 y 無法同步到 n2,n2 節點上的資料還是 x。這時客戶端 c 訪問 n2 時,n2 將當前自己擁有的資料 x 返回給客戶端 c 了,而實際上當前最新的資料已經是 y 了,這就不滿足一致性(consistency)的要求了,因此 cap 三者只能滿足 ap。注意:這裡 n2 節點返回 x,雖然不是乙個「正確」的結果,但是乙個「合理」的結果,因為 x 是舊的資料,並不是乙個錯亂的值,只是不是最新的資料而已。

二、cap 關鍵細節點

1、cap 關注的粒度是資料,而不是整個系統。

2、在實際設計過程中,每個系統不可能只處理一種資料,而是包含多種型別的資料,有的資料必須選擇 cp,有的資料必須選擇 ap。

3、cap 是忽略網路延遲的。

4、正常運**況下,不存在 cp 和 ap 的選擇,可以同時滿足 ca。

三、與acid的區別

《一》、 acid的定義

acid 是資料庫管理系統為了保證事務的正確性而提出來的乙個理論。acid 包含四個約束:

1.atomicity(原子性)乙個事務中的所有操作,要麼全部完成,要麼全部不完成,不會在中間某個環節結束。事務在執行過程中發生錯誤,會被回滾到事務開始前的狀態,就像這個事務從來沒有執行過一樣。

2.consistency(一致性)在事務開始之前和事務結束以後,資料庫的完整性沒有被破壞。

3.isolation(隔離性)資料庫允許多個併發事務同時對資料進行讀寫和修改的能力。隔離性可以防止多個事務併發執行時由於交叉執行而導致資料的不一致。事務隔離分為不同級別,包括讀未提交(read uncommitted)、讀提交(read committed)、可重複讀(repeatable read)和序列化(serializable)。

4.durability(永續性)事務處理結束後,對資料的修改就是永久的,即便系統故障也不會丟失。

《二》、區別

可以看到,acid 中的 a(atomicity)和 cap 中的 a(**ailability)意義完全不同,而 acid 中的 c 和 cap 中的 c 名稱雖然都是一致性,但含義也完全不一樣。acid 中的 c 是指資料庫的資料完整性,而 cap 中的 c 是指分布式節點中的資料一致性。再結合 acid 的應用場景是資料庫事務,cap 關注的是分布式系統資料讀寫這個差異點來看,其實 cap 和 acid 的對比就類似關公戰秦瓊,雖然關公和秦瓊都是武將,但其實沒有太多可比性。

四、與base理論的區別

《一》、base理論定義

base 是指基本可用(basically **ailable)、軟狀態( soft state)、最終一致性( eventual consistency),核心思想是即使無法做到強一致性(cap 的一致性就是強一致性),但應用可以採用適合的方式達到最終一致性。

1. 基本可用(basically **ailable)分布式系統在出現故障時,允許損失部分可用性,即保證核心可用。

2. 軟狀態(soft state)允許系統存在中間狀態,而該中間狀態不會影響系統整體可用性。這裡的中間狀態就是 cap 理論中的資料不一致。

3. 最終一致性(eventual consistency)系統中的所有資料副本經過一定時間後,最終能夠達到一致的狀態。

《二》、區別

1、cap 理論是忽略延時的,而實際應用中延時是無法避免的。這一點就意味著完美的 cp 場景是不存在的,即使是幾毫秒的資料複製延遲,在這幾毫秒時間間隔內,系統是不符合 cp 要求的。因此 cap 中的 cp 方案,實際上也是實現了最終一致性,只是「一定時間」是指幾毫秒而已。

2、ap 方案中犧牲一致性只是指分割槽期間,而不是永遠放棄一致性。這一點其實就是 base 理論延伸的地方,分割槽期間犧牲一致性,但分割槽故障恢復後,系統應該達到最終一致性。

綜合上面的分析,acid 是資料庫事務完整性的理論,cap 是分布式系統設計理論,base 是 cap 理論中 ap 方案的延伸。

gcc學習 二 第二版

1 概要 在使用c語言和其它語言進行程式設計的時候,我們須要標頭檔案來提供對常數的定義和對系統及庫函式呼叫的宣告。庫檔案是一些預先編譯好的函式集合,那些函式都是依照可重用原則編寫的。它們通常由一組互相關聯的用來完畢某項常見工作的函式構成。比方用來處理螢幕顯示情況的函式 ncurses庫 和資料庫訪問...

Makefile學習 一 第二版

1 make 利用 make 工具能夠自己主動完畢編譯工作。這些工作包含 假設僅改動了某幾個原始檔,則僅僅又一次編譯這幾個原始檔 make通過比對對應的.c檔案與.o檔案的時間 假設某個標頭檔案被改動了,則又一次編譯全部包含該標頭檔案的原始檔。利用這樣的自己主動編譯可大大簡化開發工作,避免不必要的又...

試讀 《軟體架構設計(第二版)》

作為技術開發人員以及有將近2年了。因為現在團隊裡有乙個架構師,所以在日常開發中不太涉及到架構方面的思考。但總聽到大家在會議上討論 過度設計 冗餘設計 深刻體會到作為乙個剛入門的開發人員,想要成為乙個架構師還有很多地方需要學習進步。掌握好基本的技術只是第一步。讀書我會首先看目錄,軟體架構設計 這本書的...