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