- 相關(guān)推薦
系統(tǒng)架構(gòu)師知識(shí):什么是CAP
CAP、BASE理論是當(dāng)前在互聯(lián)網(wǎng)領(lǐng)域非常流行的NoSQL的理論基礎(chǔ)。那么什么是CAP呢?我們一起來(lái)了解一下!
1、什么是CAP
著名的CAP理論是由Brewer提出的,所謂CAP,即一致性(Consistency)、可用性(Availability)和分區(qū)容錯(cuò)性(Partition Tolerance)。
(1)、Consistency(一致性):更新操作成功并返回客戶端完成后,分布式的所有節(jié)點(diǎn)在同一時(shí)間的數(shù)據(jù)完全一致(All nodes see the same data at the same time)。
這里的一致性,一定要和傳統(tǒng)的RDBMS中的事務(wù)一致性區(qū)分開。
在傳統(tǒng)的RDBMS中,事務(wù)具有ACID4個(gè)屬性,即原子性(Atomicity),一致性(Consistency),隔離性(Isolation)和持久性(Durable)。
ACID是關(guān)系型數(shù)據(jù)庫(kù)的最基本原則,遵循ACID原則強(qiáng)調(diào)一致性,對(duì)成本要求很高,對(duì)性能影響很大。
a、原子性(Atomicity):事務(wù)是一個(gè)原子操作單元,其對(duì)數(shù)據(jù)的修改,要么全都執(zhí)行,要么全都不執(zhí)行。
b、一致性(Consistency):在事務(wù)開始和完成時(shí),數(shù)據(jù)都必須保持一致狀態(tài)。這意味著所有相關(guān)的數(shù)據(jù)規(guī)則都必須應(yīng)用于事務(wù)的修改,以保持?jǐn)?shù)據(jù)的完整性;事務(wù)結(jié)束時(shí),所有的內(nèi)部數(shù)據(jù)結(jié)構(gòu)(如B樹索引或雙向鏈表)也都必須是正確的。
c、隔離性(Isolation):數(shù)據(jù)庫(kù)系統(tǒng)提供一定的隔離機(jī)制,保證事務(wù)在不受外部并發(fā)操作影響的“獨(dú)立”環(huán)境執(zhí)行。這意味著事務(wù)處理過(guò)程中的中間狀態(tài)對(duì)外部是不可見的,反之亦然。
d、持久性(Durability):事務(wù)完成之后,它對(duì)于數(shù)據(jù)的修改是永久性的,即使出現(xiàn)系統(tǒng)故障也能夠保持。
MIT的Gilbert和Lynch在證明CAP的過(guò)程中改變了Consistency的概念,也就是將Consistency轉(zhuǎn)化為Atomic。Gilbert認(rèn)為這里所說(shuō)的Consistency其實(shí)就是數(shù)據(jù)庫(kù)系統(tǒng)中提到的ACID的另一種表述:一個(gè)用戶請(qǐng)求要么成功、要么失敗,不能處于中間狀態(tài)(Atomic);一旦一個(gè)事務(wù)完成,將來(lái)的所有事務(wù)都必須基于這個(gè)完成后的狀態(tài)(Consistent);未完成的事務(wù)不會(huì)互相影響(Isolated);一旦一個(gè)事務(wù)完成,就是持久的(Durable)。
(2)、Availability(可用性):讀和寫操作都能成功(Reads and writes always succeed)。
可用性是說(shuō)服務(wù)能一直保證是可用的狀態(tài),當(dāng)用戶發(fā)出一個(gè)請(qǐng)求,服務(wù)能在有限時(shí)間內(nèi)返回結(jié)果,所有的請(qǐng)求都能“成功”拿到對(duì)應(yīng)的響應(yīng)。
(3)、Partition Tolerance(分區(qū)容錯(cuò)性):在出現(xiàn)網(wǎng)絡(luò)故障導(dǎo)致分布式節(jié)點(diǎn)間不能通信時(shí),系統(tǒng)能否繼續(xù)服務(wù)(The system continues to operate despite arbitrary message loss or failure of part of the system)。
直觀感受就是系統(tǒng)中節(jié)點(diǎn)crash或者網(wǎng)絡(luò)分片都不應(yīng)該導(dǎo)致一個(gè)分布式系統(tǒng)停止服務(wù)。
2、如何證明CAP?
CAP的證明很簡(jiǎn)單:
假設(shè)兩個(gè)節(jié)點(diǎn)集{G1, G2},由于網(wǎng)絡(luò)分片導(dǎo)致G1和G2之間所有的通訊都斷開了。
如果在G1中寫,在G2中讀剛寫的數(shù)據(jù), G2中返回的值不可能是剛剛在G1中的寫值。
對(duì)于分布式數(shù)據(jù)系統(tǒng)而言,分區(qū)容錯(cuò)性(Partition Tolerance)是基本要求,否則就不稱其為分布式系統(tǒng)。
由于可用性(Availability)的要求,G2一定要返回這次讀請(qǐng)求,因?yàn)榉謪^(qū)容錯(cuò)性(Partition Tolerance)的存在,導(dǎo)致一致性(Consistency)一定是不可滿足的。
CAP理論告訴我們,一個(gè)分布式系統(tǒng)不可能同時(shí)滿足一致性,可用性和分區(qū)容錯(cuò)性這三個(gè)需求,三個(gè)要素中最多只能同時(shí)滿足兩點(diǎn)。
顯然,任何橫向擴(kuò)展策略都要依賴于數(shù)據(jù)分區(qū),軟件架構(gòu)通常必須在一致性(Consistency)與可用性(Availability)之間做出選擇。
3、CAP的延伸BASE
BASE是Basically Available、Soft state、Eventually consistent三個(gè)詞組的簡(jiǎn)寫,是對(duì)CAP中C 和A的延伸。
(1)Basically Available:基本可用,即數(shù)據(jù)一致性能夠基本滿足二八定律,即至少保證80%一致性,剩下20%就不要過(guò)于糾結(jié)。
(2)Soft-state:軟狀態(tài)/柔性事務(wù),即狀態(tài)可以有一段時(shí)間的不同步。
在不過(guò)分追求數(shù)據(jù)一致性(強(qiáng)一致性)前提下可考慮軟狀態(tài)策略,例如把數(shù)據(jù)(State)緩存在客戶端一段時(shí)間,在一段時(shí)間過(guò)后,如果客戶端沒有再次刷新狀態(tài)的請(qǐng)求的話,就清除此緩存(Soft),這個(gè)狀態(tài)就會(huì)消失。
(3)Eventual consistency:最終一致性,即在某一段短時(shí)間內(nèi)允許數(shù)據(jù)不一致,但經(jīng)過(guò)一段較長(zhǎng)時(shí)間(這里的一段時(shí)間多數(shù)是業(yè)務(wù)能夠容忍的延遲),等所有節(jié)點(diǎn)上數(shù)據(jù)的拷貝都整合在一起的時(shí)候,數(shù)據(jù)會(huì)最終達(dá)到完全一致。我用自己的經(jīng)驗(yàn)和親身實(shí)踐證明,最終一致性貫穿著互聯(lián)網(wǎng)尤其是電子商務(wù)類型的主要應(yīng)用的生命周期。
BASE來(lái)自于互聯(lián)網(wǎng)的電子商務(wù)領(lǐng)域的實(shí)踐,它是基于CAP理論逐步演化而來(lái),核心思想是即便不能達(dá)到強(qiáng)一致性(Strong Consistency),但可以根據(jù)應(yīng)用特點(diǎn)采用適當(dāng)?shù)姆绞絹?lái)達(dá)到最終一致性(Eventual consistency)的效果。BASE是反ACID的,它完全不同于ACID模型,犧牲強(qiáng)一致性,獲得基本可用性和柔性可靠性并要求達(dá)到最終一致性。
【系統(tǒng)架構(gòu)師知識(shí):什么是CAP】相關(guān)文章:
什么是系統(tǒng)架構(gòu)師-如何成為系統(tǒng)架構(gòu)師08-10
2017系統(tǒng)架構(gòu)師知識(shí)整理08-28
系統(tǒng)架構(gòu)師的知識(shí)和職責(zé)10-27
系統(tǒng)架構(gòu)師知識(shí):高可用系統(tǒng)設(shè)計(jì)09-19
系統(tǒng)架構(gòu)師知識(shí):負(fù)載均衡08-18