10分钟了解分布式CAP、BASE理论
CAP理論
2000年7月,Eric Brewer教授提出CAP猜想;2年后,Seth Gilbert和Nancy Lynch從理論上證明了CAP;之后,CAP理論正式成為分布式計算領(lǐng)域的公認定理。CAP定律說的是在一個分布式計算機系統(tǒng)中,一致性,可用性和分區(qū)容錯性這三種保證無法同時得到滿足,最多滿足兩個。CAP:C :Consistency(一致性)A:(Availability)可用性P:(Partition Tolerance)分區(qū)容錯性
讓我們構(gòu)造一個非常簡單的分布式系統(tǒng)。
兩臺服務(wù)器G1和G2
兩臺服務(wù)器可以相互通訊
客戶端可以隨機訪問任何一臺服務(wù)器?
Consistency(一致性)
Gilbert and Lynch 這樣描述的一致性.
any read operation that begins after a write operation completes must return that value, or the result of a later write operation
在寫操作完成之后的任何讀操作都必須返回該值。
客戶端向G1服務(wù)器發(fā)起一個寫操作,把變量初始值v0 改為v1,接下來客戶端可能向節(jié)點G1讀取也可能向節(jié)點G2讀取;
向G1發(fā)起一個讀操作,得到更改后的值V1。這就是滿足了一致性?
向G2發(fā)起一個讀操作,此時G1向G2發(fā)送同步消息
如果同步完成 ,那么讀到的結(jié)果是v1,這樣也滿足了一致性?
還未同步完成,這是G2還是v0,這就不滿足一致性。
(Partition Tolerance)分區(qū)容錯
Gilbert and Lynch 這樣描述的分區(qū)容錯.
the network will be allowed to lose arbitrarily many messages sent from one node to another
網(wǎng)絡(luò)允許丟失任意多的消息從一個節(jié)點發(fā)送到另外一個節(jié)點
在分布式環(huán)境中,節(jié)點之間的通信可能出現(xiàn)問題,整個系統(tǒng)就產(chǎn)生所謂的分區(qū)。所以我們在設(shè)計的時候需要考慮這種情況;剩下來的 A和C滿足好,我們就可以說我們的系統(tǒng)有很好的分區(qū)容錯性。
(Availability)可用性
Gilbert and Lynch 對 availability的描述原文. every request received by a non-failing node in the system must result in a response 系統(tǒng)中非失敗節(jié)點收到的每個請求都必須導(dǎo)致響應(yīng) 在可用性系統(tǒng)中,只要服務(wù)器沒有奔潰,客戶端發(fā)送請求,服務(wù)器必須返回一個相應(yīng)給客戶端。
為什么要CAP不能同時滿足
通過上述的定義和描述知道分區(qū)無法避免,p總是要考慮的。為什么c和a無法同時做到呢?其實都是分區(qū)惹的禍。
如果我們保證一致性;那么G1寫入操作之后,必須保證數(shù)據(jù)同步給G2之后,G2才能對外提供響應(yīng),這顯然就沒有可用性了。
反之 我們保證可用性,那就沒法保證一致性了,既生瑜何生亮的悲劇。
小結(jié)
經(jīng)過上面分析,在分布式系統(tǒng)中,我們一般會選擇AP而犧牲一致性。犧牲并不意味著不關(guān)心一致性,而是首先滿足A和P,如何解決C的問題。參考以下BASE理論
BASE 理論
eBay的架構(gòu)師Dan Pritchett源于對大規(guī)模分布式系統(tǒng)的實踐總結(jié),在ACM上發(fā)表文章提出BASE理論,BASE理論是對CAP理論的延伸,核心思想是即使無法做到強一致性(StrongConsistency,CAP的一致性就是強一致性),但應(yīng)用可以采用適合的方式達到最終一致性(Eventual Consitency)。
(Basically Available)基本可用
在分布式系統(tǒng)出現(xiàn)故障的時候,允許損失部分可用性,即保證核心可用。
(Soft State)軟狀態(tài)
接受一段時間的狀態(tài)不同步,及中間狀態(tài),而改中間狀態(tài)不影響系統(tǒng)整體可用性。這里的中間狀態(tài)就是CAP理論中的數(shù)據(jù)不一致性。
(Eventually Consistent)最終一致性
上面說軟狀態(tài),然后不可能一直是軟狀態(tài),必須有個時間期限。在期限過后系統(tǒng)能夠保證在沒有其他新的更新操作的情況下,數(shù)據(jù)最終一定能夠達到一致的狀態(tài),因此所有客戶端對系統(tǒng)的數(shù)據(jù)訪問最終都能夠獲取到最新的值。
總結(jié)
CAP是分布式系統(tǒng)設(shè)計理論,BASE是CAP理論中AP方案的延伸,對于C我們采用的方式和策略就是保證最終一致性;
參考
英文版的:https://mwhittaker.github.io/blog/an_illustrated_proof_of_the_cap_theorem/
CAP 理論十二年回顧:"規(guī)則"變了:https://www.infoq.cn/article/cap-twelve-years-later-how-the-rules-have-changed
CAP 定理的含義:http://www.ruanyifeng.com/blog/2018/07/cap.html
從零開始學(xué)架構(gòu)PDF
總結(jié)
以上是生活随笔為你收集整理的10分钟了解分布式CAP、BASE理论的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 面对人性,有的选择向左,有的向右
- 下一篇: ASP.NET Core Web Api