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