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