CAP定理與BASE理論
這里對(duì)分布式理論中的CAP定理與BASE理論進(jìn)行介紹

CAP定理
基本原理
CAP定理(CAP Theorem),又被稱作布魯爾定理。其指出在一個(gè)分布式系統(tǒng)中,不可能同時(shí)滿足以下三點(diǎn)要求
1. Consistency 一致性
在分布式系統(tǒng)中訪問各節(jié)點(diǎn)副本時(shí),數(shù)據(jù)是一致的。注意這里的一致性是強(qiáng)一致性
2. Availability 可用性
在分布式系統(tǒng)中訪問各節(jié)點(diǎn)時(shí)均可以獲得預(yù)期響應(yīng),即服務(wù)是可用的。但不保證返回的數(shù)據(jù)是最新的
3. Partition Tolerance 分區(qū)容錯(cuò)
在一個(gè)分布式系統(tǒng)中當(dāng)出現(xiàn)網(wǎng)絡(luò)異?;蚬?jié)點(diǎn)所在機(jī)器發(fā)生故障時(shí),不可避免的會(huì)出現(xiàn)網(wǎng)絡(luò)分區(qū)。比如A、B兩個(gè)節(jié)點(diǎn)雖然各自都可以對(duì)外提供服務(wù),但A、B之間的網(wǎng)絡(luò)發(fā)生故障無法通信,即出現(xiàn)了分區(qū)。當(dāng)發(fā)生網(wǎng)絡(luò)分區(qū)后,整個(gè)分布式系統(tǒng)依然需要繼續(xù)工作而不能就此停止,即所謂的分區(qū)容錯(cuò)
至此可以看出對(duì)于一個(gè)分布式系統(tǒng)而言,網(wǎng)絡(luò)環(huán)境十分復(fù)雜,P是不可避免的、必須要保證的。那么當(dāng)發(fā)生網(wǎng)絡(luò)分區(qū)時(shí),是滿足Consistency一致性還是Availability可用性就成了一個(gè)問題
CP模型
當(dāng)出現(xiàn)網(wǎng)絡(luò)分區(qū)時(shí),滿足Consistency一致性。即CP模型,則系統(tǒng)會(huì)拒絕向其中寫入數(shù)據(jù)。因?yàn)橐坏懭?,由于網(wǎng)絡(luò)分區(qū)無法同步即會(huì)出現(xiàn)各節(jié)點(diǎn)數(shù)據(jù)不一致的情況。但從系統(tǒng)各節(jié)點(diǎn)讀取數(shù)據(jù)時(shí),不會(huì)出現(xiàn)不一致的情況。所以對(duì)于CP模型而言,其一致性是通過犧牲可用性來實(shí)現(xiàn)的
AP模型
當(dāng)出現(xiàn)網(wǎng)絡(luò)分區(qū)時(shí),滿足Availability可用性。即AP模型,則系統(tǒng)無論對(duì)于寫數(shù)據(jù)還是讀數(shù)據(jù)都會(huì)進(jìn)行處理,以滿足可用性。同理,由于網(wǎng)絡(luò)分區(qū)無法進(jìn)行數(shù)據(jù)同步,客戶端從不同節(jié)點(diǎn)進(jìn)行數(shù)據(jù)訪問時(shí),可能會(huì)出現(xiàn)結(jié)果不一致的情形。即可用性是通過犧牲一致性來實(shí)現(xiàn)的
Note
值得一提的是,CAP定理不是指分布式系統(tǒng)在任何條件下都必須在可用性、一致性中進(jìn)行二選一。在未發(fā)生網(wǎng)絡(luò)分區(qū)的場(chǎng)景時(shí),可用性和一致性是能夠同時(shí)保證的。CAP定理闡述的是當(dāng)發(fā)生網(wǎng)絡(luò)分區(qū)時(shí),即需要滿足P時(shí),我們需要在C、A之間做出抉擇
BASE理論
Base理論是對(duì)CAP定理中AP模型的進(jìn)一步發(fā)展,因?yàn)閷?shí)際業(yè)務(wù)中很多分布式系統(tǒng)對(duì)于可用性的訴求相比較一致性會(huì)更高。故雖然不能保證CAP定理中的強(qiáng)一致性C,但分布式系統(tǒng)可以通過合適方式、手段來達(dá)到最終一致性
1. Basically Available 基本可用
當(dāng)分布式系統(tǒng)發(fā)生不可預(yù)知的故障時(shí),允許損失部分功能的可用性,保障核心功能的可用性,從而實(shí)現(xiàn)基本可用的目標(biāo)。具體實(shí)現(xiàn)方式包括流量削峰、請(qǐng)求排隊(duì)、服務(wù)降級(jí)、服務(wù)熔斷等
2. Soft State 軟狀態(tài)
其指的是在保障基本可用性與最終一致性的要求下,系統(tǒng)中各節(jié)點(diǎn)的數(shù)據(jù)允許存在短暫的不一致。即所謂的中間過渡狀態(tài)。而這種短暫的不一致不會(huì)影響到服務(wù)的可用性
3. Eventually Consistent 最終一致性
不要求分布式系統(tǒng)的強(qiáng)一致性,即無法實(shí)時(shí)保證系統(tǒng)中各節(jié)點(diǎn)數(shù)據(jù)都是一致的。其允許在時(shí)間上存在有一定的延遲,以實(shí)現(xiàn)系統(tǒng)中各節(jié)點(diǎn)數(shù)據(jù)最終達(dá)到一致的狀態(tài)。當(dāng)然具體地延遲時(shí)限取決于網(wǎng)絡(luò)延時(shí)、系統(tǒng)負(fù)載、數(shù)據(jù)同步方案等諸多因素
參考文獻(xiàn)
數(shù)據(jù)密集型應(yīng)用系統(tǒng)設(shè)計(jì)(DDIA) Martin Kleppmann著
