日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

05_CAP与BASE原理

發(fā)布時間:2023/12/14 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 05_CAP与BASE原理 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

05_CAP與BASE原理

  • 一. CAP原理
    • 1.1 一致性
    • 1.2 可用性
    • 1.3 分區(qū)容忍性
    • 1.4 CAP的各種組合
  • 二. BASE理論

一. CAP原理

1.1 一致性

C,#就是Consistency。

客戶端向分布式系統(tǒng)請求處理數(shù)據(jù),分布式系統(tǒng)響應SUCCESS后,客戶端查詢數(shù)據(jù)時,能查看到最新的數(shù)據(jù)。

  • 什么是一致性?
    當客戶端接收到SUCCESS后,再次請求分布式系統(tǒng),能獲取到最新的,被修改的數(shù)據(jù)信息,這就是一致性。

  • 什么是不一致?
    A:假如客戶端明明接受到了SUCCESS,由于服務A-節(jié)點1沒有把數(shù)據(jù)及時的同步到服務A-節(jié)點2,導致客戶端查詢數(shù)據(jù)時,從節(jié)點2上查到的是舊數(shù)據(jù),這就是數(shù)據(jù)的不一致。

  • 什么是強一致性?
    A:客戶端向分布式系統(tǒng)發(fā)起請求后,除了要保證當前節(jié)點處理數(shù)據(jù)成功之外,還需要把本次數(shù)據(jù)操作同步到別的節(jié)點上,其它節(jié)點全部操作完畢且都執(zhí)行成功后,分布式系統(tǒng)才能向客戶端返回SUCCESS。接著,客戶端再次向分布式系統(tǒng)請求查詢數(shù)據(jù)時,無論這個請求落到哪個節(jié)點上,返回的都是最新的、被修改后的數(shù)據(jù)。

  • 什么是弱一致性?
    A:分布式系統(tǒng)接收到數(shù)據(jù)操作的請求后,雖然能保證當前節(jié)點處理數(shù)據(jù)成功,但是其它的節(jié)點就無法保證了,可能數(shù)據(jù)已經(jīng)同步到了其它節(jié)點,也可能沒有同步過來。對于客戶端來說,它再次發(fā)起數(shù)據(jù)查詢請求時,有可能查到的是最新的數(shù)據(jù),也有可能查到的是舊數(shù)據(jù)。

  • 什么是最終一致性呢?
    A:可能在一段時間內(nèi),分布式系統(tǒng)內(nèi)各個節(jié)點的數(shù)據(jù)有細微的差別,但是呢,過了這段時間之后,各個節(jié)點的數(shù)據(jù)能夠保證完全一致。還記得Redis主從同步的原理中,Redis Master接收到寫請求后,在把本地數(shù)據(jù)修改成功后,就會返回SUCCESS,倘若此時用戶立刻向slave節(jié)點發(fā)起查詢請求,有可能查到的是舊數(shù)據(jù)。但是Redis Master會搞一個線程,異步的把本次寫命令發(fā)送到其他的slave上,保證在過了一段時間之后,Redis的Master與所有的slave數(shù)據(jù)完全一致。

1.2 可用性

A,就是Availability。

  • 什么是可用?
    客戶端向分布式系統(tǒng)發(fā)起請求,系統(tǒng)能在合理的時間范圍內(nèi),執(zhí)行成功,并能返回執(zhí)行結(jié)果,這就是系統(tǒng)的可用。

  • 什么是不可用?
    客戶端向分布式系統(tǒng)發(fā)起請求,系統(tǒng)直接報錯,返回執(zhí)行異常,或者要等很久,才能返回執(zhí)行結(jié)果,超過了客戶端預設的請求響應超時時間,這就是系統(tǒng)的不可用。

可用性有很多等級,比如99%,99.9%,99.99%,99.999%等等,意思就是說,在99%的時間內(nèi),系統(tǒng)能在合理的時間范圍內(nèi),正常執(zhí)行請求,并返回執(zhí)行結(jié)果。

1.3 分區(qū)容忍性

P,就是Partition Tolerance。

可以把"分區(qū)"粗暴的理解成"網(wǎng)絡分區(qū)",意思就是說,因為網(wǎng)絡的原因,你的分布式系統(tǒng)中,各個節(jié)點直接無法通信了,此時,如果分布式系統(tǒng)的各個節(jié)點能夠各自為戰(zhàn),繼續(xù)對外提供服務,那么我們就說,這個分布式系統(tǒng)具有分區(qū)容忍性。

我們很容易聯(lián)想到Redis的腦裂,腦裂后,Redis集群會出現(xiàn)多個分區(qū),每個分區(qū)都會有Redis的Master,雖然在執(zhí)行了一段時間后,各個分區(qū)的數(shù)據(jù)不一致了,但是每個分區(qū)都能對外提供服務啊,所以Redis的腦裂是擁有分區(qū)容忍性的。

如果不具備分區(qū)容忍性,那么只要發(fā)生了網(wǎng)絡分區(qū),整個分布式系統(tǒng)就完全無法對外提供服務了。

1.4 CAP的各種組合

首先要說明的是,一個分布式系統(tǒng),不可能同時兼?zhèn)湟恢滦浴⒖捎眯浴⒎謪^(qū)容忍性,要么是CP(一致性和分區(qū)容忍性)、要么是AP(可用性和分區(qū)容忍性)。

  • 為什么一定要保證P,也就是分區(qū)容忍性?
    需要強調(diào)的是,CAP原理是針對分布式系統(tǒng)的,既然是分布式,那么系統(tǒng)內(nèi)的各個服務肯定會部署在不同的服務器上,接著相互之間進行通信。想想看,如果你想滿足CA,從根本上保證分區(qū)容錯性,那么你的系統(tǒng)就是一個單塊系統(tǒng),部署在一臺服務器上,這就不是分布式系統(tǒng)了。所以,一個分布式系統(tǒng),必須滿足分區(qū)容忍性。

  • 為什么保證了CP后,不能保證A?
    假設現(xiàn)在網(wǎng)絡出現(xiàn)了故障,出現(xiàn)了大面積的網(wǎng)絡分區(qū),由于我們的分布式系統(tǒng)擁有P,所以對外仍然能夠提供服務。但是節(jié)點之間無法正常通信,導致無法同步數(shù)據(jù),此時必然會導致各個節(jié)點的數(shù)據(jù)不一致。既然數(shù)據(jù)已經(jīng)不一致了,我們該怎樣保證一致性呢?這里的思想很有意思,那就是當我們發(fā)現(xiàn)某個數(shù)據(jù)在不同的節(jié)點不一致,偏偏此時要請求操作這個數(shù)據(jù)時,分布式系統(tǒng)會向客戶端返回系統(tǒng)異常,不讓客戶端看到不一致的數(shù)據(jù)。只不過,這個時候就犧牲了A,也就是可用性了。

  • 為什么保證了AP后,不能保證C呢?
    還是假設網(wǎng)絡出現(xiàn)故障,不同的節(jié)點數(shù)據(jù)處于不一致的狀態(tài)。為了保證A,也就是可用性,系統(tǒng)必須能正常返回結(jié)果。可能對于某條數(shù)據(jù)來說,一會兒查不到,一會兒查的到,有時候查到的是舊數(shù)據(jù),有時候查到的是新數(shù)據(jù)。雖然數(shù)據(jù)不能保證一致性,但最起碼系統(tǒng)接收到請求后,能正常返回響應結(jié)果,而不是報錯。

  • 保證CP的典型案例
    一些經(jīng)典的分布式存儲,比如zk、mongodb、hbase等,都是遵循CP,也就是說,保證每次請求的數(shù)據(jù)100%一致,但有些時候確實是因為網(wǎng)絡原因,導致各個節(jié)點的數(shù)據(jù)不一致,此時就只能犧牲A了。

  • 保證AP的典型案例
    比如12306訂票系統(tǒng)、電商系統(tǒng)。有時候,你看到的庫存數(shù)量是錯的,但是沒關系,我們只要在最后提交訂單時,系統(tǒng)再做一次校驗不就OK了,重要的是,我們的系統(tǒng)一直都能對外提供服務,用戶不會看到系統(tǒng)報錯。

二. BASE理論

我們已經(jīng)知道,CAP不可能完全同時實現(xiàn),但是每一個特性都對分布式系統(tǒng)很重要啊,能不能想處一個折中的方案,大致的實現(xiàn)CAP的所有特性呢?

BASE理論就是這樣的一套方案,它基本實現(xiàn)了CAP理論的所有特性,但不要求100%完美的實現(xiàn)。

Basicly Available、Soft State、Eventual Consistency。基本可用、軟狀態(tài)、最終一致性。

為了保證系統(tǒng)基本可用,雖然節(jié)點之間數(shù)據(jù)不一致,但是當接收到請求后,分布式系統(tǒng)還是要返回數(shù)據(jù),作為客戶端而言,它通過發(fā)起多次請求,看到的返回值可能會有不一致。各個節(jié)點的數(shù)據(jù)處于等待同步、或者正在同步的過程中的狀態(tài),這就是所謂的"軟狀態(tài)"。

分布式系統(tǒng)制定許多的策略來保證一致性,比如在網(wǎng)絡出現(xiàn)問題后,系統(tǒng)可以把所有的流量全部轉(zhuǎn)發(fā)到一個節(jié)點上,這樣一來,每次操作和獲取的數(shù)據(jù)就是一致的,并且不會出現(xiàn)找不到數(shù)據(jù)的現(xiàn)象。但是這種做法的問題十分明顯,那就是單點瓶頸,單個系統(tǒng)扛不住這么大的流量。所以分布式系統(tǒng)可能還會做降級,返回偽造數(shù)據(jù),或者臟數(shù)據(jù)。但是無論怎樣,系統(tǒng)一定會正常返回結(jié)果。

最終一致性的意思是,出現(xiàn)網(wǎng)絡故障后,雖然在短時間內(nèi)的確會出現(xiàn)數(shù)據(jù)不一致的現(xiàn)象,但是沒關系,等到過了一段時間網(wǎng)絡恢復了,各個節(jié)點之間又會恢復數(shù)據(jù)通信,最終還是能保證各節(jié)點的數(shù)據(jù)一致。

總結(jié)

以上是生活随笔為你收集整理的05_CAP与BASE原理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。