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