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