0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

聊一聊分布式系統(tǒng)的CAP理論

汽車玩家 ? 來源:cnblogs ? 作者:cnblogs ? 2020-05-03 18:00 ? 次閱讀

分布式系統(tǒng)當中有一個著名的CAP理論,它也是分布式系統(tǒng)理論的基礎。

CAP理論最早發(fā)表于2000年,由加州伯克利的教授首先在ACM PODC會議上提出猜想,兩年之后,被麻省理工學院的教授Seth Gilbert和Nancy Lynch從理論上證明。從此之后,它成了分布式系統(tǒng)領域的公認定理。

聊一聊分布式系統(tǒng)的CAP理論

今天這篇文章就和大家聊聊這個大名鼎鼎的CAP理論。

CAP理論描述起來其實很簡單,它說的是一個分布式系統(tǒng)最多只能滿足C(一致性)、A(可用性)和P(分區(qū)性)這三者當中的兩個。我們先來看一下這三項分別代表了什么。

Consistency 一致性

分布式系統(tǒng)當中的一致性指的是所有節(jié)點的數(shù)據(jù)一致,或者說是所有副本的數(shù)據(jù)一致。用英文描述是:All the nodes see the same data at the same time。它和數(shù)據(jù)庫事務中的一致性是兩碼事,在我們之前的文章里,曾經(jīng)詳細描述過分布式系統(tǒng)中的各種一致性模型,感興趣的同學可以點擊這里。

我們可以將一致性一分為二,分別從客戶端和服務端進行探究。對于客戶端而言,并不關心后端的實現(xiàn),也不關心后端的節(jié)點運行情況。唯一只關心多次并發(fā)訪問下都能獲得準確的符合預期的結(jié)果。比如用戶多次點擊付款,也只會付款一次,余額無論什么時候查詢都是當下最新的值。

而服務端關心的是會引發(fā)數(shù)據(jù)變更的請求過來,能夠及時準確地同步到所有的節(jié)點和副本,并且考慮可能會出現(xiàn)的網(wǎng)絡以及通信問題,保證極端情況下依舊不會產(chǎn)生錯誤。

在分布式系統(tǒng)當中,針對不同情況以及不同要求下的一致性,設計了多種不同的模型。我們可以簡單做一個總結(jié),將它們分為三類:

1. 要求當下更新成功的數(shù)據(jù)立即生效,在后續(xù)的訪問當中都能返回最新的結(jié)果。這是強一致性。

2. 如果能容忍在更新發(fā)生之后,部分情況無法訪問到最新數(shù)據(jù),這是弱一致性。

3. 如果能容忍更新后一段時間內(nèi)無法訪問到最新數(shù)據(jù),但最終可以保證結(jié)果準確,這是最終一致性。

在CAP理論當中,我們說的無法同時滿足的一致性指的是強一致性。

Availability 可用性

可用性指的是:Reads and writes always succeed. 也就是說系統(tǒng)一直可用,而且服務一直保持正常。

一個高可用性的分布式系統(tǒng),必須對用戶的每一個請求做出響應。不可以出現(xiàn)無法訪問或者是響應超時等影響用戶體驗的情況。在一個分布式系統(tǒng)當中,任何一個節(jié)點的不穩(wěn)定,都有可能影響系統(tǒng)的可用性,比如數(shù)據(jù)庫服務器、負載均衡,web服務器承載等等。為了量化系統(tǒng)的可用性,我們通常使用系統(tǒng)停機時間這個指標。即在一年時間內(nèi),系統(tǒng)停機的總時長。

聊一聊分布式系統(tǒng)的CAP理論

據(jù)說淘寶可以做到5個9,也就是99.999%的時間內(nèi)可用。算下來全年系統(tǒng)停機的時間不會超過5分鐘,這是非常難以做到的。

Partition Tolerance 分區(qū)容錯性

分區(qū)容錯性指的是:System continues operating despire arbitrary message loss or failure of part of the system. 翻譯過來就是說系統(tǒng)在遇到一些節(jié)點或者網(wǎng)絡分區(qū)故障的時候,仍然能夠提供滿足一致性和可用性的服務。

分區(qū)容錯性和拓展性息息相關,因為越大的分布式系統(tǒng)越有可能出現(xiàn)機器宕機,網(wǎng)絡阻塞等情況。即使這些意外情況發(fā)生,系統(tǒng)仍然能保持穩(wěn)定是系統(tǒng)拓展的前提。在分布式系統(tǒng)當中出現(xiàn)的問題可能性很多,既可能出現(xiàn)部分機器宕機,也有可能出現(xiàn)內(nèi)網(wǎng)阻隔,使得整個集群被拆分成互相不能通信的幾個部分。分區(qū)容錯性需要保證即使這些情況發(fā)生,系統(tǒng)也一樣可以保證一致性和可用性。

舉個例子,阿里經(jīng)常做機房斷電實驗,實驗的時候直接把一個機房的電源切斷,觀察這個時候系統(tǒng)是否仍然能夠保持穩(wěn)定。

CAP定理的證明

關于CAP這三個特性我們就介紹完了,接下來我們試著證明一下為什么CAP不能同時滿足。

為了簡化證明的過程,我們假設整個集群里只有兩個N1和N2兩個節(jié)點,如下圖:

聊一聊分布式系統(tǒng)的CAP理論

N1和N2當中各自有一個應用程序AB和數(shù)據(jù)庫,當系統(tǒng)滿足一致性的時候,我們認為N1和N2數(shù)據(jù)庫中的數(shù)據(jù)保持一致。在滿足可用性的時候,我們認為無論用戶訪問N1還是N2,都可以獲得正確的結(jié)果,在滿足分區(qū)容錯性的時候,我們認為無論N1還是N2宕機或者是兩者的通信中斷,都不影響系統(tǒng)的運行。

我們假設一種極端情況,假設某個時刻N1和N2之間的網(wǎng)絡通信突然中斷了。如果系統(tǒng)滿足分區(qū)容錯性,那么顯然可以支持這種異常。問題是在此前提下,一致性和可用性是否可以做到不受影響呢?

我們做個假象實驗,如下圖,突然某一時刻N1和N2之間的關聯(lián)斷開:

聊一聊分布式系統(tǒng)的CAP理論

有用戶向N1發(fā)送了請求更改了數(shù)據(jù),將數(shù)據(jù)庫從V0更新成了V1。由于網(wǎng)絡斷開,所以N2數(shù)據(jù)庫依然是V0,如果這個時候有一個請求發(fā)給了N2,但是N2并沒有辦法可以直接給出最新的結(jié)果V1,這個時候該怎么辦呢?

這個時候無法兩種方法,一種是將錯就錯,將錯誤的V0數(shù)據(jù)返回給用戶。第二種是阻塞等待,等待網(wǎng)絡通信恢復,N2中的數(shù)據(jù)更新之后再返回給用戶。顯然前者犧牲了一致性,后者犧牲了可用性。

這個例子雖然簡單,但是說明的內(nèi)容卻很重要。在分布式系統(tǒng)當中,CAP三個特性我們是無法同時滿足的,必然要舍棄一個。三者舍棄一個,顯然排列組合一共有三種可能。

1. 舍棄A,保留CP

一個系統(tǒng)保證了一致性和分區(qū)容錯性,舍棄可用性。也就是說在極端情況下,允許出現(xiàn)系統(tǒng)無法訪問的情況出現(xiàn),這個時候往往會犧牲用戶體驗,讓用戶保持等待,一直到系統(tǒng)數(shù)據(jù)一致了之后,再恢復服務。

對于有些系統(tǒng)而言,一致性是安身立命之本,比如Hbase、Redis這種分布式存儲,數(shù)據(jù)一致性是最基本的要求。不滿足一致性的存儲顯然不會有用戶愿意使用。

ZooKeeper也是一樣,任何時候訪問ZK都可以獲得一致性的結(jié)果。它的職責就是保證管轄下的服務保持同步和一致,顯然不可能放棄一致性。但是在極端情況下,ZK可能會丟棄調(diào)一些請求,消費者需要重新請求才能獲得結(jié)果。

2. 舍棄C,保留AP

這種是大部分的分布式系統(tǒng)的設計,保證高可用和分區(qū)容錯,但是會犧牲一致性。比如淘寶購物以及12306購票等等,前面說過淘寶可以做到全年可用性5個9的超高級別,但是此時就無法保證數(shù)據(jù)一致性了。

舉個例子,我們在12306買票的時候就經(jīng)常會遇到。在我們點擊購買的時候,系統(tǒng)并沒有提示沒票。等我們輸入了驗證碼,付款的時候才會告知,已經(jīng)沒有票了。這就是因為我們在點擊購買的時候,數(shù)據(jù)沒有達成一致性,在付款校驗的時候才檢驗出余票不足。這種設計會犧牲一些用戶體驗,但是可以保證高可用,讓用戶不至于無法訪問或者是長時間等待,也算是一種取舍吧。

3. 舍棄P,保留CA

很遺憾,這種情況幾乎不存在。因為分布式系統(tǒng),網(wǎng)絡分區(qū)是必然的。如果要舍棄P,那么就是要舍棄分布式系統(tǒng),CAP也就無從談起了??梢哉fP是分布式系統(tǒng)的前提,所以這種情況是不存在的。

比如一般的關系型數(shù)據(jù)庫,像是MySQL或者是Oracle,它們都保證了一致性和可用性,但是并不是分布式系統(tǒng)。從這點上來說CAP并不是等價的,我們并不能通過犧牲CA來提升P。要想提升分區(qū)容錯性,只能通過提升基礎設施的穩(wěn)定性來達到。也就是說這并不是一個軟件問題。

到這里CAP的理論就介紹完了,到最后會發(fā)現(xiàn)這其實是一個取舍問題,并沒有完美的方案。每個設計分布式系統(tǒng)的架構(gòu)師,需要根據(jù)自身業(yè)務場景的實際特性來考量。比如,像是涉及到金錢的問題,一致性是必須的,極端情況下,哪怕用戶暫時無法訪問, 也不能使得相關的數(shù)據(jù)不準確。這不僅會影響一個公司的聲譽,也會帶來許多其他方面的困擾。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 服務器
    +關注

    關注

    12

    文章

    9255

    瀏覽量

    85755
  • 分布式系統(tǒng)

    關注

    0

    文章

    146

    瀏覽量

    19280
收藏 人收藏

    評論

    相關推薦

    分布式云化數(shù)據(jù)庫有哪些類型

    分布式云化數(shù)據(jù)庫有哪些類型?分布式云化數(shù)據(jù)庫主要類型包括:關系型分布式數(shù)據(jù)庫、非關系型分布式數(shù)據(jù)庫、新SQL分布式數(shù)據(jù)庫、以列方式存儲數(shù)據(jù)、
    的頭像 發(fā)表于 01-15 09:43 ?54次閱讀

    基于ptp的分布式系統(tǒng)設計

    在現(xiàn)代分布式系統(tǒng)中,精確的時間同步對于確保數(shù)據(jù)致性、系統(tǒng)穩(wěn)定性和性能至關重要。PTP(Precision Time Protocol)是
    的頭像 發(fā)表于 12-29 10:09 ?139次閱讀

    分布式輸電線路故障定位中的分布式是指什么

    所謂分布式指的是產(chǎn)品的部署方式,是相對于集中式而言的。 、部署方式 分散安裝:分布式輸電線路故障定位系統(tǒng)中的采集裝置需要安裝在輸電線路的多個位置,通常是每隔
    的頭像 發(fā)表于 10-16 11:39 ?313次閱讀
    <b class='flag-5'>分布式</b>輸電線路故障定位中的<b class='flag-5'>分布式</b>是指什么

    CAP 定理:理論、實踐

    分布式數(shù)據(jù)存儲系統(tǒng)中,不可能同時滿足以下三個特性: 致性:所有節(jié)點在同時間具有相同的數(shù)據(jù)視圖。 可用性:每個請求都能在合理的時間內(nèi)
    的頭像 發(fā)表于 08-19 11:27 ?289次閱讀

    分布式光纖測溫系統(tǒng)DTS

    隨著城市用電量的持續(xù)增長,電纜負荷日益加重,電纜故障頻發(fā)成為個不容忽視的問題。傳統(tǒng)的電纜監(jiān)測手段已經(jīng)無法滿足對電纜狀態(tài)實時、精準監(jiān)控的需求,因此部分供電公司采用鼎信分布式光纖測溫系統(tǒng)(DTS)來
    的頭像 發(fā)表于 06-27 17:18 ?597次閱讀

    分布式SCADA系統(tǒng)的特點的組成

    在工業(yè)自動化和能源管理領域,SCADA(Supervisory Control And Data Acquisition)系統(tǒng)扮演著至關重要的角色。其中,分布式SCADA系統(tǒng)憑借其獨特的結(jié)構(gòu)和功能
    的頭像 發(fā)表于 06-07 14:43 ?580次閱讀

    分布式光伏發(fā)電有哪些優(yōu)點?分布式光伏發(fā)電有哪些應用形式?

    分布式光伏發(fā)電是種在用戶附近或用電現(xiàn)場配置的小型光伏發(fā)電系統(tǒng),它具有許多顯著的優(yōu)點和多樣的應用形式。
    的頭像 發(fā)表于 04-29 17:44 ?4447次閱讀

    分布式能源是什么意思?分布式能源有什么優(yōu)勢?

    分布式能源指的是在用戶端或靠近用戶端的小型能源供應系統(tǒng),它能夠直接滿足用戶的多種能源需求,如電力、熱能和冷能。
    的頭像 發(fā)表于 04-29 17:26 ?2420次閱讀

    分布式光伏監(jiān)控系統(tǒng)解決方案

    分布式光伏發(fā)電系統(tǒng)的發(fā)電量,提高分布式光伏發(fā)電系統(tǒng)的利用率。發(fā)展分布式光伏發(fā)電對優(yōu)化能源結(jié)構(gòu)、實現(xiàn)“雙碳目標”、推動節(jié)能減排、實現(xiàn)經(jīng)濟可持續(xù)
    的頭像 發(fā)表于 04-22 15:56 ?1038次閱讀
    <b class='flag-5'>分布式</b>光伏監(jiān)控<b class='flag-5'>系統(tǒng)</b>解決方案

    HarmonyOS實戰(zhàn)案例:【分布式賬本】

    Demo基于Open Harmony系統(tǒng)使用ETS語言進行編寫,本Demo主要通過設備認證、分布式拉起、分布式數(shù)據(jù)管理等功能來實現(xiàn)。
    的頭像 發(fā)表于 04-12 16:40 ?1360次閱讀
    HarmonyOS實戰(zhàn)案例:【<b class='flag-5'>分布式</b>賬本】

    分布式控制系統(tǒng)的七個功能和應用

    分布式控制系統(tǒng)的七個功能和應用? 分布式控制系統(tǒng)種由多個獨立的控制單元組成的系統(tǒng),每個控制單元負責系統(tǒng)中的
    的頭像 發(fā)表于 02-01 10:51 ?1491次閱讀

    鴻蒙OS 分布式任務調(diào)度

    鴻蒙OS 分布式任務調(diào)度概述 在 HarmonyO S中,分布式任務調(diào)度平臺對搭載 HarmonyOS 的多設備構(gòu)筑的“超級虛擬終端”提供統(tǒng)的組件管理能力,為應用定義統(tǒng)的能力基線、
    的頭像 發(fā)表于 01-29 16:50 ?534次閱讀

    分布式大屏控制系統(tǒng)對網(wǎng)絡環(huán)境的要求

    分布式大屏控制系統(tǒng)對網(wǎng)絡環(huán)境的要求較高,主要是因為該系統(tǒng)需要實時傳輸大量的視頻信號數(shù)據(jù),以保證多個顯示屏幕的同步顯示。以下是幾個關鍵的網(wǎng)絡環(huán)境要求: 高帶寬:分布式大屏控制
    的頭像 發(fā)表于 01-29 14:52 ?606次閱讀

    分布式大屏控制系統(tǒng)的應用場景

    分布式大屏控制系統(tǒng)具有廣泛的應用場景,主要涉及以下幾個方面: 監(jiān)控指揮中心:如交通指揮中心、電力調(diào)度中心、應急指揮中心等,用于實時監(jiān)控、調(diào)度和指揮,保證系統(tǒng)的安全、穩(wěn)定、高效運行。 會議中心:在
    的頭像 發(fā)表于 01-29 14:25 ?790次閱讀

    分布式大屏控制系統(tǒng)的工作原理

    分布式大屏控制系統(tǒng)種基于分布式計算、云計算和大數(shù)據(jù)技術(shù)的控制系統(tǒng),具有高效、穩(wěn)定、靈活的特點。該系統(tǒng)
    的頭像 發(fā)表于 01-29 14:24 ?801次閱讀