1、分布式基礎(chǔ)之CAP和BASE理論

  • ACID 是數(shù)據(jù)庫事務(wù)完整性的理論,CAP 是分布式系統(tǒng)設(shè)計理論,BASE 是 CAP 理論中 AP 方案的延伸。

一、從集中式到分布式

1、集中式

集中式是指有一臺或者多臺計算機組成的中心節(jié)點,數(shù)據(jù)集中存儲于這個中心節(jié)點中,并且整個系統(tǒng)的所有業(yè)務(wù)單元都集中部署在這個中心節(jié)點上,系統(tǒng)的所有功能均由集中處理。

2、分布式

分布式系統(tǒng)是一個硬件或者軟件分布在不同的網(wǎng)絡(luò)計算機上,彼此之間僅僅通過消費傳遞進行通信和協(xié)調(diào)的系統(tǒng)。
分布式系統(tǒng)特征:

1、分布性
2、對等性
3、并發(fā)性
4、缺乏全球時鐘(由于分布式系統(tǒng)由一些列的空間上任意分布的多個進程組成,具有分布性,很難定義兩個事件究竟是誰先誰后)
5、故障總是會發(fā)生

分布式系統(tǒng)典型難題:

1、通信問題
2、網(wǎng)絡(luò)分區(qū)(當(dāng)網(wǎng)絡(luò)發(fā)生異常時候,只有部分節(jié)點進行正常通信,另一些節(jié)點不可用,網(wǎng)絡(luò)分區(qū)嚴(yán)重情況下面會導(dǎo)致“腦裂”)
3、三態(tài)(成功、失敗、超時)
4、節(jié)點故障

二、CAP理論和BASE理論

  • 分布式事物:指事物參與者、支持事物的服務(wù)器、資源服務(wù)器以及事物管理器分別于分布式系統(tǒng)的不同節(jié)點之上。通常一個分布式事物中會涉及對多個數(shù)據(jù)源或者業(yè)務(wù)系統(tǒng)的操作。
  • 本地事物可以采用ACID模型保證數(shù)據(jù)的嚴(yán)格一致性。但在分布式系統(tǒng)中,實現(xiàn)事物的嚴(yán)格一致性會和服務(wù)的可用性產(chǎn)生沖突,這是有分布式系統(tǒng)的特征決定的。因此,在可用性和一致性之間永遠(yuǎn)無法存在一個兩全其美的方案,于是如何構(gòu)建一個兼顧可用性和一致性的分布式系統(tǒng)成為一個難題,因此出現(xiàn)了諸如CAP和BASE這樣的分布式經(jīng)典理論。
1、CAP理論
  • CAP 定理(CAP theorem)又被稱作布魯爾定理(Brewer's theorem),是加州大學(xué)伯克利分校的計算機科學(xué)家埃里克·布魯爾(Eric Brewer)在 2000 年的 ACM PODC 上提出的一個猜想。2002 年,麻省理工學(xué)院的賽斯·吉爾伯特(Seth Gilbert)和南?!ち制妫∟ancy Lynch)發(fā)表了布魯爾猜想的證明,使之成為分布式計算領(lǐng)域公認(rèn)的一個定理。對于設(shè)計分布式系統(tǒng)的架構(gòu)師來說,CAP 是必須掌握的理論。

在一個分布式系統(tǒng)(指互相連接并共享數(shù)據(jù)的節(jié)點的集合)中,當(dāng)涉及讀寫操作時,只能保證一致性(Consistence)、可用性(Availability)、分區(qū)容錯性(Partition Tolerance)三者中的兩個,另外一個必須被犧牲。

(1)一致性

一致性指數(shù)據(jù)在多個副本之間是否能夠保持一致性的特性。在一致性的需求下,當(dāng)一個系統(tǒng)在數(shù)據(jù)一致的狀態(tài)下執(zhí)行了更新操作后,應(yīng)該保證系統(tǒng)的數(shù)據(jù)任然處于一致的狀態(tài)。布魯爾提到對某個指定的客戶端來說,讀操作保證能夠返回最新的寫操作結(jié)果。

  • 在分布式系統(tǒng)中如果能夠針對一個數(shù)據(jù)項的更新操作執(zhí)行成功后,所有用戶都可以讀取到其最新的值,那么這樣的系統(tǒng)就被認(rèn)為具有強一致性。

(2)可用性

可用性指系統(tǒng)提供的服務(wù)必須一致處于可用的狀態(tài),對于用戶的每一個操作請求總是能夠在有限的時間內(nèi)(指用戶的一個操作,系統(tǒng)必須能夠在指定的時間內(nèi)返回對應(yīng)的處理結(jié)果,如果超過了這個時間,系統(tǒng)就認(rèn)為不可用)****返回結(jié)果(返回結(jié)果是可用性的另一個重要指標(biāo),要求系統(tǒng)在完成對用戶請求處理后,返回一個正常的響應(yīng)結(jié)果,失敗或者成功,而不是一個困惑的結(jié)果)。

(3)分區(qū)容錯性

  • 網(wǎng)絡(luò)分區(qū)指在分布式系統(tǒng)中,不同節(jié)點分布在不同的子網(wǎng)絡(luò)(機房或者異地網(wǎng)絡(luò)等)中,由于一些特殊的原因?qū)е逻@些網(wǎng)絡(luò)之間出現(xiàn)網(wǎng)絡(luò)不連通的狀態(tài),但是各個子網(wǎng)絡(luò)的內(nèi)部網(wǎng)絡(luò)是正常的,從而導(dǎo)致整個系統(tǒng)的網(wǎng)絡(luò)呼喊經(jīng)被切分為若干個孤立的區(qū)域。

分區(qū)容錯性約束了一個分布式系統(tǒng)需要具有如下特征:分布式系統(tǒng)在遇到任何網(wǎng)絡(luò)分區(qū)故障的時候,仍熱能夠保證對外提供滿足一致性或可用性的服務(wù),除非整合網(wǎng)絡(luò)環(huán)境發(fā)生了故障。

(4)總結(jié)

  • 在分布式環(huán)境中,我們會發(fā)現(xiàn)必須選擇 P(分區(qū)容忍)要素,因為網(wǎng)絡(luò)本身無法做到 100% 可靠,有可能出故障,所以分區(qū)是一個必然的現(xiàn)象。也就是說分區(qū)容錯性是分布式系統(tǒng)的一個最基本要求。
  • 在CAP理論中,不能同時滿足一致性、分區(qū)容忍性、可用性,而分區(qū)容忍性優(yōu)勢分布式系統(tǒng)的基本要求,因此在架構(gòu)設(shè)計的時候只能在CA或者CP中取舍,也就是只能在一致性或者可用性之間取舍。


    CP系統(tǒng)

    AP系統(tǒng)

(5)CAP理論中幾個重要的細(xì)節(jié)

  • CAP 關(guān)注的粒度是數(shù)據(jù),而不是整個系統(tǒng)。C 與 A 之間的取舍可以在同一系統(tǒng)內(nèi)以非常細(xì)小的粒度反復(fù)發(fā)生,而每一次的決策可能因為具體的操作,乃至因為牽涉到特定的數(shù)據(jù)或用戶而有所不同。但在實際設(shè)計過程中,每個系統(tǒng)不可能只處理一種數(shù)據(jù),而是包含多種類型的數(shù)據(jù),有的數(shù)據(jù)必須選擇 CP,有的數(shù)據(jù)必須選擇 AP。而如果我們做設(shè)計時,從整個系統(tǒng)的角度去選擇 CP 還是 AP,就會發(fā)現(xiàn)顧此失彼,無論怎么做都是有問題的。(以一個最簡單的用戶管理系統(tǒng)為例,用戶管理系統(tǒng)包含用戶賬號數(shù)據(jù)(用戶 ID、密碼)、用戶信息數(shù)據(jù)(昵稱、興趣、愛好、性別、自我介紹等)。通常情況下,用戶賬號數(shù)據(jù)會選擇 CP,而用戶信息數(shù)據(jù)會選擇 AP,如果限定整個系統(tǒng)為 CP,則不符合用戶信息數(shù)據(jù)的應(yīng)用場景;如果限定整個系統(tǒng)為 AP,則又不符合用戶賬號數(shù)據(jù)的應(yīng)用場景。)
  • CAP 是忽略網(wǎng)絡(luò)延遲的。意味著,CAP 理論中的 C 在實踐中是不可能完美實現(xiàn)的,在數(shù)據(jù)復(fù)制的過程中,節(jié)點 A 和節(jié)點 B 的數(shù)據(jù)并不一致。
  • 正常運行情況下,不存在 CP 和 AP 的選擇,可以同時滿足 CA。CAP 理論告訴我們分布式系統(tǒng)只能選擇 CP 或者 AP,但其實這里的前提是系統(tǒng)發(fā)生了“分區(qū)”現(xiàn)象。如果系統(tǒng)沒有發(fā)生分區(qū)現(xiàn)象,也就是說 P 不存在的時候(節(jié)點間的網(wǎng)絡(luò)連接一切正常),我們沒有必要放棄 C 或者 A,應(yīng)該 C 和 A 都可以保證,這就要求架構(gòu)設(shè)計的時候既要考慮分區(qū)發(fā)生時選擇 CP 還是 AP,也要考慮分區(qū)沒有發(fā)生時如何保證 CA。(同樣以用戶管理系統(tǒng)為例,即使是實現(xiàn) CA,不同的數(shù)據(jù)實現(xiàn)方式也可能不一樣:用戶賬號數(shù)據(jù)可以采用“消息隊列”的方式來實現(xiàn) CA,因為消息隊列可以比較好地控制實時性,但實現(xiàn)起來就復(fù)雜一些;而用戶信息數(shù)據(jù)可以采用“數(shù)據(jù)庫同步”的方式來實現(xiàn) CA,因為數(shù)據(jù)庫的方式雖然在某些場景下可能延遲較高,但使用起來簡單。)
  • 放棄并不等于什么都不做,需要為分區(qū)恢復(fù)后做準(zhǔn)備。
2、BASE理論
  • BASE 是基本可用(Basically Available)、軟狀態(tài)( Soft State)、最終一致性( Eventual Consistency)三個短語的簡寫。BASE理論是對CAP中一致性和可用性權(quán)衡的結(jié)果,是基于CAP定力逐步演化而來的,是源于大規(guī)模互聯(lián)網(wǎng)系統(tǒng)分布式實踐的總結(jié)。其核心思想:無法做到強一致性,但是每一個應(yīng)用都可以根據(jù)自身的業(yè)務(wù)特點,采用適當(dāng)?shù)姆绞絹硎瓜到y(tǒng)達到最終一致性。

(1)基本可用

基本可用指分布式系統(tǒng)在出現(xiàn)不可預(yù)知的故障時候,允許損失部分可用性,保證核心服務(wù)可用。響應(yīng)時間上的損失(正常0.5ms之內(nèi)的故障時候響應(yīng)延時為1-2秒了)和功能上的損失(秒殺時候的降級數(shù)據(jù))

(2)弱狀態(tài)

也稱軟狀態(tài),指允許系統(tǒng)中的數(shù)據(jù)存在中間狀態(tài),并認(rèn)為該中間狀態(tài)的存在不會影響系統(tǒng)的整體可用性,即允許系統(tǒng)在不同節(jié)點的數(shù)據(jù)副本之間進行數(shù)據(jù)同步的過程中存在延時。

(3)最終一致性

最終一致性強調(diào)的是系統(tǒng)中所有的數(shù)據(jù)副本,在進過一段時間的同步后,最終能夠達到一個一致的狀態(tài)。最終一致性需要保證數(shù)據(jù)最終能夠一致而不需要保證數(shù)據(jù)實時的一致性。

  • 在沒有發(fā)生故障的前提下,數(shù)據(jù)的一致性狀態(tài)的時間延時,取決于網(wǎng)絡(luò)延遲,系統(tǒng)負(fù)載,數(shù)據(jù)恢復(fù)策略等等因素。

(4)總結(jié)

  • BASE 理論本質(zhì)上是對 CAP 的延伸和補充,更具體地說,是對 CAP 中 AP 方案的一個補充。其基本思路就是:通過業(yè)務(wù),犧牲強一致性而獲得可用性,并允許數(shù)據(jù)在一段時間內(nèi)是不一致的,但是最終達到一致性狀態(tài)。

三、思考:按照CAP理論如何設(shè)計一個電商系統(tǒng)?

  • 首先個電商網(wǎng)站核心模塊有用戶,訂單,商品,支付,促銷管理

1、對于用戶模塊,包括登錄,個人設(shè)置,個人訂單,購物車,收藏夾等,這些模塊保證AP,數(shù)據(jù)短時間不一致不影響使用。
2、訂單模塊的下單付款扣減庫存操作是整個系統(tǒng)的核心,CA都需要保證,極端情況下面犧牲A保證C
3、商品模塊的商品上下架和庫存管理保證CP
4、搜索功能因為本身就不是實時性非常高的模塊,所以保證AP就可以了。
5、促銷是短時間的數(shù)據(jù)不一致,結(jié)果就是優(yōu)惠信息看不到,但是已有的優(yōu)惠要保證可用,而且優(yōu)惠可以提前預(yù)計算,所以可以保證AP。
6、支付這一塊是獨立的系統(tǒng),或者使用第三方的支付寶,微信。其實CAP是由第三方來保證的,支付系統(tǒng)是一個對CAP要求極高的系統(tǒng),C是必須要保證的,AP中A相對更重要,不能因為分區(qū),導(dǎo)致所有人都不能支付

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容