CAP 是由Brewer 在 90 年代提出谁榜,其核心內(nèi)容是:在一個分布式存儲系統(tǒng)里,無法同時保證一致性凡纳、可用性窃植、分區(qū)容忍性,只能三選二荐糜。
不論面試官巷怜、還是研發(fā)人員,聊到分布式暴氏,必談CAP理論延塑。儼然一副,把CAP理論當做至理名言答渔,懂CAP就是高手关带、就是大佬的樣子。而在我看來研儒,CAP理論其誤導(dǎo)性豫缨,遠大于其實際中的指導(dǎo)意義。所以我稱它為:皇帝的新裝端朵。
在CAP理論里好芭,甚至對于一致性、可用性冲呢、分區(qū)容忍性的準確定義舍败,都存在不同的解讀。更不用說敬拓,我們的系統(tǒng)并不是非黑即白的一致不一致邻薯、可用不可用、可容忍分區(qū)不可容忍分區(qū)乘凸。接下來厕诡,我們從把一個存儲系統(tǒng)設(shè)計為分布式的目的開始,分析一下CAP理論营勤。
首先灵嫌,一個存儲系統(tǒng),設(shè)計成分布式的目的葛作,除了獲得更高性能外寿羞,更多的是為了更高的可用性(即CAP里的A)。
其次赂蠢,要想使一個分布式系統(tǒng)達到高可用绪穆,必然得有對網(wǎng)絡(luò)分區(qū)的容忍性(即CAP里的P)。如果分布式系統(tǒng)沒有P虱岂,那就跟單節(jié)點沒啥區(qū)別了玖院,對吧?(這里不考慮性能原因)。所以在這里第岖,A和P的關(guān)系是:為了獲得A司恳,我們不得不先有P。
接下來我們再看一致性绍傲。為了得到A扔傅,我們使用了分布式,且必須得有P烫饼。這必然會帶來一致性的問題猎塞。如果我們要保持強一致性,則可用性會有所下降杠纵。注意這里說的是可用性下降荠耽,并不是沒有。如果我們在一致性上退步比藻,保持最終一致性即可铝量,則可用性就會提高倘屹。
從以上分析視角來看:我們分布式系統(tǒng)的核心目的就是為了可用性,我們必須得有P慢叨。如果要A高一些纽匙,C就得退讓一些,反之亦然拍谐。他們之間并非三選二的關(guān)系烛缔。
說到這,是不是可以聯(lián)想到BASE理論轩拨?因為分布式系統(tǒng)必然有P践瓷,所以該理論并沒有強調(diào)P,而是說了可用性A和一致性C亡蓉。但該理論更準確的地方是晕翠,它沒有把A和C非黑即白化,而是強調(diào)了基本可用性和最終一致性砍濒。
總的來說崖面,CAP理論誤導(dǎo)性和模糊性太大,甚至說它是錯誤的都沒問題梯影,因為CAP并不是一個三選二的關(guān)系巫员。而是必須有P,然后在C和A之間玩蹺蹺板的關(guān)系甲棍。還是BASE理論更準確简识。