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