CAP定理20年回首:時代變了嗎?

前言

10年前的今天,Eric Brewer 博士發(fā)表CAP Twelve Years Later—How the 'Rules' Have Changed,原文上萬字,翻譯并摘要、附注如下:

CAP Twelve Years Later 摘要

CAP理論(CAP Theorem)斷言任何基于分布式數(shù)據(jù)共享系統(tǒng),最多只能滿足數(shù)據(jù)一致性、可用性、分區(qū)容忍性三要素中的兩個要素。但是通過顯式處理分區(qū)情形,系統(tǒng)設(shè)計師可以做到優(yōu)化數(shù)據(jù)一致性和可用性,進而取得三者之間的平衡。

Eric Brewer是 UC,Berkeley 的計算機科學教授,聯(lián)系方式:brewer@cs.berkeley.edu

22年前,Eric Brewer在Principles of Distributed Computing大會上發(fā)表了CAP理論。2012年,作者在Computer雜志發(fā)表了回顧。

作者認為是三選二公式有誤導性,CAP把三者的相互關(guān)系過分簡單化了,強調(diào)沒有必要為很小的概率去犧牲A和C。對分布式系統(tǒng)來說分區(qū)容忍性(P)是基本要求,但可用性和一致性在系統(tǒng)正常工作期間是好搭檔,并非是矛盾。

引入 CAP 理論的十幾年里,架構(gòu)師和研究者已經(jīng)以它為理論基礎(chǔ)探索了各式各樣新穎的分布式系統(tǒng),甚至到了濫用的程度。NoSQL 運動也將 CAP 理論當作對抗傳統(tǒng)關(guān)系型數(shù)據(jù)庫的依據(jù)。

譯注:NoSQL實踐中廣為人知的應(yīng)該就是HBase和Cassandra了。

HBase是CAP中的CP系統(tǒng),即HBase是強一致性的。(在默認不開啟Region replica的情況下)

  • HBase之所以是CP系統(tǒng),和底層HDFS無關(guān)。它是CP系統(tǒng),是因為每個Region同時只有一臺RegionServer為它服務(wù),對一個Region所有的操作請求,都由這一臺Region server來響應(yīng),自然是強一致性的,跟單機的JVM差不多。
  • 在這臺RegionServer 掛掉的時候,它管理的Region會failover到其他Region Server時,需要根據(jù)WAL-log來redo,進行redo的Region這時候是Unavailable(不可用)的,Region需要分鐘級恢復來提供服務(wù),所以HBase降低了可用性,提高了一致性。

Cassandra擁有分散式架構(gòu):任何節(jié)點都能執(zhí)行任何操作,它提供了CAP原理中的AP(可用性和分區(qū)可容忍性)。

此外,MongoDB也是CP陣營的一員。

ACID(原子性、一致性、隔離性、持久性。)和 BASE 代表了兩種截然相反的設(shè)計哲學,分區(qū)一致性 - 可用性分布圖譜的兩極。ACID 注重一致性,是數(shù)據(jù)庫的傳統(tǒng)設(shè)計思路,也有很多優(yōu)點。

中文博大精深,此處英文也有異曲同工之妙??。

ACIDBASE除了設(shè)計哲學上是大路朝天各走一邊,而且在英文原意上也是冤家路窄,前者是“酸”,后者是“堿”。

出現(xiàn)較晚的 BASE 硬湊的感覺更明顯,它是“Basically Available, Soft state, Eventually consistent(基本可用、軟狀態(tài)、最終一致性)”的首字母縮寫。其中的軟狀態(tài)最終一致性這兩種技巧擅于對付存在分區(qū)的場合,并因此提高了可用性。

當然,從數(shù)學邏輯的層面上講,只有強一致性不一致。最終一致性等于沒有一致性,或者不保證強一致,屬于一致性模型的范疇。BASE的目的是彌合分區(qū)場合下A和C之間的裂痕——雖然墻體已然出現(xiàn)了縫隙,但表面上仍然是粉飾的平平整整。

綜上,ACID在一致性的路上一往無前,BASE則試圖對可用性進行改良。CAP是帽子,BASE更像是帽檐上的掛穗??。

CAP 與 ACID 的關(guān)系更復雜一些,也因此引起更多誤解。其中一個原因是 ACID 的 C 和 A 字母所代表的概念不同于 CAP 的 C 和 A。

譯注:

記得我們在學習ACID的概念時,總是會講銀行匯取款的故事來講原子操作至關(guān)重要,所以金融系統(tǒng)幾乎完全使用 ACID 數(shù)據(jù)庫。在金錢方面,肯定有一方無法容忍不一致的發(fā)生。

總的來說,OLTP搭ACID,OLAP搭BASE已經(jīng)盡善盡美了,然而,新的體系結(jié)構(gòu)HTAP還是出現(xiàn)了,混合事務(wù)分析處理野心勃勃地要打破事務(wù)處理和分析之間的“墻”??————結(jié)合前面的分析來說,理論上是做不到的,只能在API層面(對用戶來說透明)進行融合,底層則是縫合怪。

CAP 理論的經(jīng)典解釋,是忽略網(wǎng)絡(luò)延遲的,但在實際中延遲和分區(qū)緊密相關(guān)。網(wǎng)絡(luò)阻塞時,依靠多次嘗試通信的方法來達到一致性,比如 Paxos 算法或者兩階段事務(wù)提交,但這僅是拖延了決策的時間,系統(tǒng)最終要做一個決定。無限期地嘗試下去,本身就是選擇一致性犧牲可用性的表現(xiàn)。

CAP 理論經(jīng)常在不同方面被人誤解,對于可用性和一致性的作用范圍的誤解尤為嚴重,如果用戶根本獲取不到服務(wù),那么其實談不上 C 和 A 之間做取舍。

譯注:

所謂“存地失人,人地皆失;存人失地,人地皆得”。

實踐中,大部分團體認為(位于單一地點的)數(shù)據(jù)中心內(nèi)部是沒有分區(qū)的,因此在單一數(shù)據(jù)中心之內(nèi)可以選擇 CA;CAP 理論出現(xiàn)之前,系統(tǒng)都默認這樣的設(shè)計思路,包括傳統(tǒng)數(shù)據(jù)庫在內(nèi)。然而就算可能性極低,單數(shù)據(jù)中心完全有可能出現(xiàn)分區(qū)的情況,一旦出現(xiàn)就會動搖以 CA 為取向的設(shè)計基礎(chǔ)。最后,考慮到跨區(qū)域時出現(xiàn)的高延遲,在數(shù)據(jù)一致性上讓步來換取更好性能的做法相對比較常見。

當代 CAP 實踐應(yīng)將目標定為針對具體的應(yīng)用,在合理范圍內(nèi)最大化數(shù)據(jù)一致性和可用性的“合力”。這樣的思路延伸為如何規(guī)劃分區(qū)期間的操作和分區(qū)之后的恢復,從而啟發(fā)設(shè)計師加深對 CAP 的認識,突破過去由于 CAP 理論的表述而產(chǎn)生的思維局限。

后語

CAP并不是犧牲三要素其一的擋箭牌,而是啟發(fā)設(shè)計者就C&A進行更加高效合理的架構(gòu)規(guī)約,沒有萬能的架構(gòu),只有最合適的場景。


后面我會另文探討一下HTAP產(chǎn)品以及新生的大數(shù)據(jù)軟件是真的結(jié)束了這場紛爭??,亦或是新瓶裝舊酒???

歡迎訪問我的博客小站~

?著作權(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ù)。

相關(guān)閱讀更多精彩內(nèi)容

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