一、分布式系統的CAP理論是什么
分布式系統的構建有一個重要理論——CAP理論,這一理論的出現深刻影響著分布式系統的發展(zhan)和設(she)計(ji),那么(me)什(shen)么(me)是CAP理(li)論呢?
CAP理論是加州理工(gong)大學伯(bo)克利分(fen)(fen)校(xiao)的(de)(de)Eric Brewer教(jiao)授在(zai)2000年7月的(de)(de)ACMPODC會議上(shang)首(shou)次提出的(de)(de),它是Eric Brewer在(zai)Inktomi期間研發搜(sou)索引擎、分(fen)(fen)布式Web緩(huan)存時得出的(de)(de)關(guan)于數據(ju)一致性(xing)(C:Consistency)、服(fu)務可用性(xing)(A:Availability)、分(fen)(fen)區容錯性(xing)(P:Partition-tolerance)的(de)(de)一個猜想。
在這個猜想提出的(de)2年以后(hou),來(lai)自(zi)麻省(sheng)理工學(xue)院的(de)Seth Gilbert和Nancy Lynch從(cong)理論上(shang)證(zheng)明了(le)Eric Brewer教授的(de)CAP猜想是(shi)成立的(de),從(cong)此,CAP理論在學(xue)術(shu)上(shang)正(zheng)式成為了(le)分布(bu)式領域公認(ren)的(de)定理,并深刻影響著(zhu)分布(bu)式系統的(de)發展(zhan)。
CAP理論告訴我們, 一個分布式系統不(bu)可能同時(shi)滿足(zu)(zu)數據(ju)一致(zhi)性、服務可用性和分區容錯性這三個基(ji)本需求,最多只能同時(shi)滿足(zu)(zu)其(qi)中的兩個。
二、分布式系統CAP特性如何取舍
分布式系統的CAP理論告訴我們,分布式系統只(zhi)能滿(man)足CAP中的(de)兩個需求(qiu),那么舍棄哪一個比較(jiao)好呢?
1、滿(man)足CA舍棄(qi)P,也(ye)就(jiu)是(shi)(shi)滿(man)足一致(zhi)性(xing)和可用性(xing),舍棄(qi)容錯(cuo)性(xing)。但是(shi)(shi)這也(ye)就(jiu)意味著(zhu)你的系統不是(shi)(shi)分(fen)布式(shi)的了(le),因(yin)為涉及分(fen)布式(shi)的想法就(jiu)是(shi)(shi)把功能分(fen)開,部署(shu)到不同的機(ji)器上。
2、滿(man)足CP舍(she)棄A,也就(jiu)是滿(man)足一致(zhi)性和(he)容錯性,舍(she)棄可用性。如果(guo)你的(de)系統(tong)允許有段(duan)時間的(de)訪問失效等問題(ti),這個是可以滿(man)足的(de)。就(jiu)好(hao)比多個人并發買(mai)票(piao),后臺網絡(luo)出現故障,你買(mai)的(de)時候系統(tong)就(jiu)崩(beng)潰了。
3、滿足(zu)AP舍(she)棄(qi)C,也就是滿足(zu)可(ke)用性和容錯性,舍(she)棄(qi)一致性。這也就是意味著你的(de)(de)系(xi)統在并發訪問(wen)的(de)(de)時候可(ke)能(neng)會出現數據(ju)不(bu)一致的(de)(de)情況。
實時(shi)(shi)證明,大多數都(dou)是(shi)犧牲了一致(zhi)性(xing):就好比(bi)是(shi)你(ni)(ni)買(mai)火車票,本來你(ni)(ni)看到的(de)是(shi)還有一張票,其(qi)實在這個時(shi)(shi)刻(ke)已經被買(mai)走(zou)了,你(ni)(ni)填好了信息準備買(mai)的(de)時(shi)(shi)候發現系統提示你(ni)(ni)沒票了,這就是(shi)犧牲了一致(zhi)性(xing)。
但是(shi)(shi)不是(shi)(shi)說(shuo)犧牲一(yi)致性一(yi)定是(shi)(shi)最好(hao)的(de),就好(hao)比張三(san)給李四轉(zhuan)(zhuan)了(le)100塊錢(qian)(qian),這時候必須保(bao)證張三(san)的(de)賬(zhang)戶(hu)上少了(le)100,李四的(de)賬(zhang)戶(hu)多(duo)了(le)100,因此(ci)需要(yao)數據的(de)一(yi)致性,而(er)且什么時候轉(zhuan)(zhuan)錢(qian)(qian)都可以,也需要(yao)可用性,但是(shi)(shi)轉(zhuan)(zhuan)錢(qian)(qian)失敗(bai)是(shi)(shi)可以允(yun)許(xu)的(de),即可以舍棄容錯性。