简单理解CAP-BASE
1、CAP
CAP是分布式系統(tǒng)的指導(dǎo)理論,是NoSQL數(shù)據(jù)庫(kù)的理論基石。CAP其實(shí)就是對(duì)分布式系統(tǒng)的特性總結(jié),即一致性(Consistency)、可用性(Availability)、分區(qū)容錯(cuò)性(Partition tolerance)。
先說(shuō)一下分區(qū)容錯(cuò)性,就是CAP中的P,這一項(xiàng)其實(shí)是必選項(xiàng),CAP主要用在分布式系統(tǒng)中,所謂分布式就表示有多個(gè)服務(wù)器或節(jié)點(diǎn),比如數(shù)據(jù)庫(kù)的主從配置。如果不要P,那只是個(gè)單機(jī)服務(wù),就不需要CAP來(lái)指導(dǎo)了。
再說(shuō)一下數(shù)據(jù)一致性,就是CAP中C,這一項(xiàng)表示分布式系統(tǒng)中的每個(gè)服務(wù)或節(jié)點(diǎn)對(duì)外提供的數(shù)據(jù)必須得一致,比如數(shù)據(jù)在A數(shù)據(jù)庫(kù)被修改了,必須立刻同步至其他(比如B)數(shù)據(jù)庫(kù)服務(wù)器上。客戶端訪問(wèn)B數(shù)據(jù)庫(kù)時(shí)必須是最新的數(shù)據(jù),否則不提供服務(wù)。
最后說(shuō)一下可用性,就是CAP中A,我個(gè)人感覺(jué)這一項(xiàng)應(yīng)該是最重要的原則了,搞分布式系統(tǒng)最主要的目的是實(shí)現(xiàn)高可用,即一臺(tái)服務(wù)器崩了,還有其他節(jié)點(diǎn)繼續(xù)提供服務(wù)。同時(shí)還能實(shí)現(xiàn)數(shù)據(jù)的安全,比如數(shù)據(jù)庫(kù)同步備份等。
總結(jié)一下,其實(shí)同時(shí)實(shí)現(xiàn)數(shù)據(jù)一致性和可用性是互相矛盾的,想實(shí)現(xiàn)可用性,就要放棄數(shù)據(jù)一致性。分區(qū)容錯(cuò)性是必選的,所以留給我們的選項(xiàng)只有CP或AP。
CP,即實(shí)現(xiàn)一致性和分區(qū)容錯(cuò)性,此組合為數(shù)據(jù)強(qiáng)一致性模式,即要求多服務(wù)之間數(shù)據(jù)一定要一致,犧牲了可用性,比如操作A服務(wù)時(shí),就要讓其他服務(wù)不可用,一些對(duì)數(shù)據(jù)要求比較高的場(chǎng)景使用此方式,比如涉及金錢(qián)等。這種模式性能很低。實(shí)現(xiàn)強(qiáng)一致性的方案有2PC(兩階段提交)。
AP,即實(shí)現(xiàn)可用性和分區(qū)容錯(cuò)性,此組合為數(shù)據(jù)最終一致性模式,即要求所有服務(wù)都可用,犧牲了數(shù)據(jù)一致性,比如操作A服務(wù)修改數(shù)據(jù),同時(shí)讀取B服務(wù)查詢時(shí)發(fā)現(xiàn)數(shù)據(jù)還是舊數(shù)據(jù),但過(guò)一會(huì)數(shù)據(jù)就會(huì)一致,互聯(lián)網(wǎng)分布式服務(wù)多數(shù)基于AP,Base模式也是基于AP組合。實(shí)現(xiàn)最終一致性的方案有TCC、消息隊(duì)列、Saga等,其中消息隊(duì)列用的最多。
2、BASE
BASE,即Basically Available(基本可用)、Soft state(軟狀態(tài))和Eventually consistent(最終一致性)。它是對(duì)CAP中一致性和可用性權(quán)衡的結(jié)果,其來(lái)源于對(duì)大規(guī)模互聯(lián)網(wǎng)系統(tǒng)分布式實(shí)踐的結(jié)論。互聯(lián)網(wǎng)中對(duì)可用性要求非常高,但對(duì)一致性要求要少點(diǎn),比如發(fā)一個(gè)消息給用戶,用戶不用立即收到,晚個(gè)一兩秒也OK的。所以可以犧牲CAP中C,BASE理論大部分是對(duì)AP的補(bǔ)充和權(quán)衡。
Basically Available(基本可用),它是要求分布式系統(tǒng)中所有節(jié)點(diǎn)要做到高可用。
Soft State(軟狀態(tài)),它定義數(shù)據(jù)可以有一個(gè)中間狀態(tài),比如服務(wù)A更新數(shù)據(jù),讀取B服務(wù)時(shí),允許存在一定的延遲,客戶端讀取的為中間狀態(tài)。
Eventually Consistent(最終一致性),它允許數(shù)據(jù)存在中間狀態(tài),做不到強(qiáng)一致性,但要做到最終一致性,比如消息列表多刷幾次,總歸能刷出來(lái)。常用實(shí)現(xiàn)數(shù)據(jù)一致性的是用消息隊(duì)列,如下圖:
總結(jié)
以上是生活随笔為你收集整理的简单理解CAP-BASE的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 秋天 | 等疫情过后,我们继续背起相机去
- 下一篇: 开源特训营 - Lesson 4 - 如