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