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