CAP原則又稱CAP定理,指的是在一個分布式系統(tǒng)中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分區(qū)容錯性),三者不可得兼。
CAP原則是NOSQL數(shù)據(jù)庫的基石。Consistency(一致性)。 Availability(可用性)。Partition tolerance(分區(qū)容錯性)。
分布式系統(tǒng)的CAP理論:理論首先把分布式系統(tǒng)中的三個特性進行了如下歸納:
一致性(C):在分布式系統(tǒng)中的所有數(shù)據(jù)備份,在同一時刻是否同樣的值。(等同于所有節(jié)點訪問同一份最新的數(shù)據(jù)副本)
可用性(A):在集群中一部分節(jié)點故障后,集群整體是否還能響應客戶端的讀寫請求。(對數(shù)據(jù)更新具備高可用性)
分區(qū)容忍性(P):以實際效果而言,分區(qū)相當于對通信的時限要求。系統(tǒng)如果不能在時限內(nèi)達成數(shù)據(jù)一致性,就意味著發(fā)生了分區(qū)的情況,必須就當前操作在C和A之間做出選擇。
在分布式系統(tǒng)中的CAP定律,如果舍去P,只保留CA,那么這就是一個單機系統(tǒng)了,分布式就無從談起。所以在分布式系統(tǒng)中,關(guān)于CAP三選二的說法是誤解,一般來說 P 是前提(分布式系統(tǒng)中不可能沒有網(wǎng)絡(luò)分區(qū)的情況)。所以基本是CA里選,不是任意3選2.為什么呢?P 意指分區(qū)容忍性。 這個分區(qū)容忍性什么意思,很多人容易望文生義,不要見風就是雨,理解成別的什么意思。所謂分區(qū)指的是網(wǎng)絡(luò)分區(qū)的意思,這個一樣還是容易望文生義。詳細一點解釋,比如你有A B兩臺服務器,它們之間是有通信的,突然,不知道為什么,它們之間的網(wǎng)絡(luò)鏈接斷掉了。好了,那么現(xiàn)在本來AB在同一個網(wǎng)絡(luò)現(xiàn)在發(fā)生了網(wǎng)絡(luò)分區(qū),變成了A所在的A網(wǎng)絡(luò)和B所在的B網(wǎng)絡(luò)。所謂的分區(qū)容忍性,就是說一個數(shù)據(jù)服務的多臺服務器在發(fā)生了上述情況的時候,依然能繼續(xù)提供服務。所以顯而易見的,P是大前提,如果P發(fā)生了,咱們的數(shù)據(jù)服務直接不服務了,就無需談可用性和一致性了。因此CAP要解釋成,當P發(fā)生的時候,A和C只能而選一。
舉個簡單的例子,A服務器B服務器同步數(shù)據(jù),現(xiàn)在A B之間網(wǎng)絡(luò)斷掉了,那么現(xiàn)在發(fā)來A一個寫入請求,但是B卻沒有相關(guān)的請求,顯然,如果A不寫,保持一致性,那么我們就失去了A的服務,但是如果A寫了,跟B的數(shù)據(jù)就不一致了,我們自然就喪失了一致性。這里設(shè)計就涉及到架構(gòu)師的選擇了。注意這里的一致性是強一致性,意思是AB的數(shù)據(jù)時刻都是同步的,如果我們放棄了強一致性,不代表我們的數(shù)據(jù)就是一定是不一致的了,我們可以讓A先寫入本地,等到通信恢復了再同步給B,這就是所謂的最終一致性,長遠的看我們的數(shù)據(jù)還是一致的,我們只是在某一個時間窗口里數(shù)據(jù)不一致罷了。綜上,CAP應該描述成,當發(fā)生網(wǎng)絡(luò)分區(qū)的時候,如果我們要繼續(xù)服務,那么強一致性和可用性只能2選1。