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