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