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