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