CAP理論
CAP理論說明在(zai)分(fen)布式系統中(zhong),一致(zhi)性,可用性和分(fen)區容忍性中(zhong)的3項只(zhi)能滿足兩項
-
C:一致性:假(jia)設在 T 時刻寫入了一個(ge)值,那(nei)么在 T 之后的讀(du)取一定要能讀(du)到這(zhe)個(ge)最新(xin)的值。
-
A:可用性:也就(jiu)是(shi)無論系統發生任何故障,都仍然能(neng)對外提(ti)供服(fu)務。
-
P:分區容忍性。
P:分區容忍性(xing)
分(fen)區(qu)錯(cuo)(cuo)誤(wu)指的(de)是(shi)分(fen)布式集群中的(de)出現兩(liang)(liang)個(ge)節(jie)點之(zhi)間(jian)通信失敗,可(ke)能(neng)是(shi)兩(liang)(liang)個(ge)節(jie)點之(zhi)間(jian)的(de)通信鏈路出錯(cuo)(cuo),也可(ke)以是(shi)其中一個(ge)節(jie)點宕機。例如下圖(tu)中的(de)兩(liang)(liang)個(ge)節(jie)點G1和G2分(fen)別處于兩(liang)(liang)個(ge)子網中,G1向G2發送(song)消息(xi),G2可(ke)能(neng)無法(fa)收到,就出現了分(fen)區(qu)錯(cuo)(cuo)誤(wu)。

分(fen)(fen)區(qu)容忍(ren)性是(shi)指分(fen)(fen)布(bu)(bu)(bu)式(shi)系統中能夠容忍(ren)分(fen)(fen)區(qu)錯誤(wu)(wu)的出現,在分(fen)(fen)布(bu)(bu)(bu)式(shi)系統內,分(fen)(fen)區(qu)是(shi)必然的發生(sheng)的,因此分(fen)(fen)布(bu)(bu)(bu)式(shi)系統必須選則 P,否則一旦發生(sheng)分(fen)(fen)區(qu)錯誤(wu)(wu),整個分(fen)(fen)布(bu)(bu)(bu)式(shi)系統就完全無(wu)法(fa)使用了,這是(shi)不符合實際需要的。
C:一致性
一致(zhi)性指的是(shi)(shi)在時(shi)間T1時(shi)刻(ke)向分布式(shi)集群(qun)中的一個節(jie)點(dian)寫(xie)入(ru)一個數據(ju),在時(shi)刻(ke)T之(zhi)后的時(shi)間,不論在客戶端從(cong)哪個節(jie)點(dian)讀(du)取數據(ju),都必須是(shi)(shi)T時(shi)刻(ke)修改(gai)過后的數據(ju)。
如下圖所(suo)示,t1時刻客戶端向(xiang)G1節點寫(xie)一個數(shu)據V1,如果t2時刻從(cong)(cong)G2節點讀取(qu)數(shu)據是t1時刻寫(xie)入的數(shu)據,就說明系統(tong)一致,若從(cong)(cong)G2節點讀取(qu)的數(shu)據是v0就說明系統(tong)不一致

A:可用(yong)性
可(ke)用性(xing)是(shi)指(zhi)客(ke)戶端任(ren)(ren)何時刻(ke)(ke)向系統(tong)讀取數據,系統(tong)都會返回(hui)一個數據,即使是(shi)不一致(zhi)或者說是(shi)過期的(de)(de)數據,如下圖(tu)所示(shi),t1時刻(ke)(ke)客(ke)戶端向G1節點(dian)寫(xie)入(ru)數據v1,但是(shi)由于分區錯誤,G1的(de)(de)數據沒有同步到(dao)(dao)G2,t2時刻(ke)(ke)客(ke)戶端從G2節點(dian)讀取數據時任(ren)(ren)然可(ke)以得到(dao)(dao)數據v0,只是(shi)獲取的(de)(de)數據并不是(shi)正確(que)的(de)(de)數據。

由于(yu)P是(shi)分布式(shi)系統必須滿足的特性(xing),而當網絡分區錯誤出現(xian)時,會出現(xian)分布式(shi)節(jie)點(dian)中網絡不一致(zhi)的情(qing)況,這時候一致(zhi)性(xing)和可用性(xing)將不能同時滿足
如(ru)下圖所(suo)示為(wei)CP系(xi)統(tong)(tong)和(he)AP系(xi)統(tong)(tong),當G1和(he)G2中的(de)數據不(bu)一致(zhi)時,CP系(xi)統(tong)(tong)中為(wei)了(le)滿足一致(zhi)性(xing),客戶端(duan)從G2將不(bu)能獲(huo)取到任何數據,即G2節點(dian)不(bu)可(ke)用(yong),AP系(xi)統(tong)(tong)中為(wei)了(le)滿足可(ke)用(yong)性(xing),G2節點(dian)會返回v0給(gei)客戶端(duan)

Spanner官方聲稱(cheng)是(shi)一個(ge)(ge)CA系統(tong)(tong),但是(shi)準確(que)來說是(shi)一個(ge)(ge) CP + HA 系統(tong)(tong),可用性是(shi)優(you)于(yu) 5 個(ge)(ge) 9 ,稍(shao)微小于(yu) 6 個(ge)(ge) 9,也就是(shi)說,Spanner 在(zai)系統(tong)(tong)出現了(le)大的(de)(de)(de)故障的(de)(de)(de)情(qing)況下,大概 31s+ 的(de)(de)(de)時(shi)(shi)間就能夠恢復對外(wai)提供服務,這個(ge)(ge)時(shi)(shi)間是(shi)非常(chang)短暫的(de)(de)(de),遠遠比很多外(wai)部的(de)(de)(de)系統(tong)(tong)更加(jia)穩定(ding)。然后鑒于(yu) Google 強大的(de)(de)(de)自建(jian)網絡,P 很少(shao)發生(sheng),所以(yi) Spanner 可以(yi)算是(shi)一個(ge)(ge) CA 系統(tong)(tong)。
TiDB 在設計的(de)時(shi)候(hou)也是一(yi)個 CP + HA 系(xi)統(tong),多數時(shi)候(hou)也是一(yi)個 CA 系(xi)統(tong)。如果出(chu)現了(le) P,也就(jiu)是剛好(hao)對(dui)(dui)外服務的(de) leader 被(bei)隔離了(le),新 leader 大概(gai)需(xu)要 10s+ 以上的(de)時(shi)間才(cai)能(neng)選舉出(chu)來對(dui)(dui)外提供服務。