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