CAP理論
為什么需要CAP理論
開發(fā)分布式系統(tǒng)時,我們需要根據(jù)業(yè)務(wù)特點酥宴,設(shè)計合適的分區(qū)容錯一致性模型您觉,以實現(xiàn)集群能力拙寡。這個問題的棘手點在于:當(dāng)系統(tǒng)發(fā)生分區(qū)錯誤時琳水,應(yīng)該如何保障系統(tǒng)穩(wěn)定運行般堆,不影響業(yè)務(wù)。而CAP理論可以解決這個問題淮摔。
CAP理論是一個很好的思考框架始赎,它對分布式系統(tǒng)的特性做了高度抽象和橙,將其抽象成一致性造垛、可用性和分區(qū)容錯性,并對特性之間的沖突做了總結(jié)五辽,即CAP不可能三角。一旦掌握它奔脐,我們就能根據(jù)業(yè)務(wù)特點吁讨,自然而然地設(shè)計出合適的分區(qū)容錯一致性模型。
什么是CAP理論
概念
在一個分布式系統(tǒng)(互相連接并共享數(shù)據(jù)的節(jié)點的集合)中建丧,當(dāng)涉及讀寫操作時,只能保證
一致性翎朱、可用性和分區(qū)容錯性中的兩個,另一個必須被犧牲争舞。
適用場景
CAP理論探討的是
節(jié)點互聯(lián)和共享數(shù)據(jù)的分布式系統(tǒng)。如果分布式系統(tǒng)的節(jié)點沒有互聯(lián)竞川,或沒有共享數(shù)據(jù)叁熔,那就不是CAP理論討論的范圍委乌。不過荣回,這個條件是天然滿足的。畢竟心软,節(jié)點互聯(lián)和共享數(shù)據(jù)的分布式系統(tǒng)才會有數(shù)據(jù)一致性問題著蛙。
CAP理論探討的是數(shù)據(jù)的讀寫操作算利,不是分布式系統(tǒng)的所有功能。也就是效拭,CAP理論針對的是數(shù)據(jù),不是整個系統(tǒng)缎患。因為一個系統(tǒng)可能有多份數(shù)據(jù)。
CAP三個指標(biāo)
CAP 理論對分布式系統(tǒng)的特性做了高度抽象挤渔,形成了三個指標(biāo):
- 一致性:對客戶端的每次讀取操作,不管訪問的是哪個節(jié)點嫉父,返回的都是同一份最新的數(shù)據(jù),否則讀取失敗绕辖。一致性強(qiáng)調(diào)各節(jié)點間的數(shù)據(jù)一致擂红。也就是說仪际,在客戶端看來昵骤,集群和單機(jī)在數(shù)據(jù)一致性上是一樣的。
- 可用性:對客戶端的任何請求变秦,訪問非故障節(jié)點時,都能返回合理的響應(yīng)(不是錯誤或者超時)伦连,但不保證是同一份最新數(shù)據(jù)。可用性強(qiáng)調(diào)服務(wù)可用惑淳,但不保證數(shù)據(jù)的一致饺窿。
- 分區(qū)容錯性:當(dāng)出現(xiàn)網(wǎng)絡(luò)分區(qū)[1]時歧焦,系統(tǒng)可以繼續(xù)提供服務(wù)。網(wǎng)絡(luò)分區(qū)可能是因為消息丟失向瓷,高延遲,連接中斷等等猖任。分區(qū)容錯性強(qiáng)調(diào)系統(tǒng)對分區(qū)故障的容錯性瓷耙。
CAP不可能三角
CAP 不可能三角指,對于一個分布式系統(tǒng)來說搁痛,一致性、可用性和分區(qū)容錯性三者不可兼得鸡典,只能選擇其中兩個。
如何使用CAP理論
- 分區(qū)容錯性(P)必選彻况。分布式系統(tǒng)一定有網(wǎng)絡(luò)交互。只要有網(wǎng)絡(luò)交互症汹,就一定會出現(xiàn)消息丟失等網(wǎng)絡(luò)故障。這種狀況我們必須接受,還必須保證系統(tǒng)正常運行咬展。
-
當(dāng)發(fā)生網(wǎng)絡(luò)分區(qū)時,要么選擇一致性(C)涮总,保證數(shù)據(jù)的絕對一致;要么選擇可用性(A)瀑梗,保證服務(wù)可用裳扯。
- 當(dāng)選擇了一致性(C)時抛丽,即采用CP模型饰豺,如果發(fā)生網(wǎng)絡(luò)分區(qū),集群拒絕客戶端的寫請求冤吨,因為服務(wù)法保證所有節(jié)點間的數(shù)據(jù)一致饶套。
- 當(dāng)選擇了可用性(A)時垒探,即采用AP模型,如果發(fā)生網(wǎng)絡(luò)分區(qū)圾叼,集群仍然接受客戶端的讀、寫請求褐奥,但是節(jié)點返回的可能不是最新的數(shù)據(jù)。
- 不存在網(wǎng)絡(luò)分區(qū)的情況下儿倒,即系統(tǒng)正常運行的情況下,一致性(C) 和可用性( A) 要能夠同時保證夫否。
實戰(zhàn)
如何為系統(tǒng)設(shè)計分區(qū)容錯一致性模型叫胁?
- CAP理論針對的是數(shù)據(jù)凰慈,而不是系統(tǒng)驼鹅;一個系統(tǒng)有多種數(shù)據(jù)。所以输钩,一個系統(tǒng)有多種分區(qū)容錯一致性模型。
- 分區(qū)容錯性(P)必選姻氨。在發(fā)生分區(qū)故障時,系統(tǒng)必須還能正常運行肴焊。
- 當(dāng)發(fā)生網(wǎng)絡(luò)分區(qū)功戚,選擇一致性還是可用性,取決于:數(shù)據(jù)不一致對系統(tǒng)有沒有影響啸臀?我們能容忍這種影響嗎?如果可以,選擇可用性顽馋,否則一致性。
-
網(wǎng)絡(luò)分區(qū)指的是網(wǎng)絡(luò)故障將整個網(wǎng)絡(luò)分為多個子網(wǎng)絡(luò)寸谜,子網(wǎng)絡(luò)間不互通属桦,但是子網(wǎng)絡(luò)內(nèi)的節(jié)點間是互通的熊痴。 ?