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