天天看點

分布式必備理論基礎:CAP和BASECAP理論BASE理論總結

大家好,我是老三,今天是沒有刷題的一天,心情愉悅,給大家分享兩個簡單的知識點:分布式理論中的

CAP

BASE

CAP理論

什麼是CAP

CAP原則又稱CAP定理,指的是在一個分布式系統中,

Consistency(一緻性)

Availability(可用性)

Partition tolerance(分區容錯性)

這三個基本需求,最多隻能同時滿足其中的2個。

  • 一緻性 :資料在多個副本之間能夠保持一緻的特性。
  • 可用性:系統提供的服務一直處于可用的狀态,每次請求都能獲得正确的響應。
  • 分區容錯性:分布式系統在遇到任何網絡分區故障的時候,仍然能夠對外提供滿足一緻性和可用性的服務。

什麼是分區?

在分布式系統中,不同的節點分布在不同的子網絡中,由于一些特殊的原因,這些子節點之間出現了網絡不通的狀态,但他們的内部子網絡是正常的。進而導緻了整個系統的環境被切分成了若幹個孤立的區域,這就是分區。

分布式必備理論基礎:CAP和BASECAP理論BASE理論總結

為什麼三者不可得兼

首先,我們得知道,分布式系統,是避免不了分區的,分區容錯性是一定要滿足的,我們看看在滿足分區容錯的基礎上,能不能同時滿足

一緻性

可用性

假如現在有兩個分區

N1

N2

,N1和N2分别有不同的分區存儲D1和D2,以及不同的服務S1和S2。

  • 在滿足

    一緻性

    的時候,N1和N2的資料要求值一樣的,D1=D2。
  • 可用性

    的時候,無論通路N1還是N2,都能擷取及時的響應。
分布式必備理論基礎:CAP和BASECAP理論BASE理論總結

好的,現在有這樣的場景:

  • 使用者通路了N1,修改了D1的資料。
  • 使用者再次通路,請求落在了N2。此時D1和D2的資料不一緻。

接下來:

  • 保證

    一緻性

    :此時D1和D2資料不一緻,要保證一緻性就不能傳回不一緻的資料,

    可用性

    無法保證。
  • 可用性

    :立即響應,可用性得到了保證,但是此時響應的資料和D1不一緻,

    一緻性

是以,可以看出,分區容錯的前提下,

一緻性

可用性

是沖突的。

CAP原則權衡

CAP三者不可同得,那麼必須得做一些權衡。

CA without P❌

如果不要求P(不允許分區),則C(強一緻性)和A(可用性)是可以保證的。但是對于分布式系統,分區是客觀存在的,其實分布式系統理論上是不可選CA的。

CP without A

如果不要求A(可用),相當于每個請求都需要在Server之間強一緻,而P(分區)會導緻同步時間無限延長,如此CP也是可以保證的。很多傳統的資料庫分布式事務都屬于這種模式。

AP wihtout C

要高可用并允許分區,則需放棄一緻性。一旦分區發生,節點之間可能會失去聯系,為了高可用,每個節點隻能用本地資料提供服務,而這樣會導緻全局資料的不一緻性。現在衆多的NoSQL都屬于此類。

CAP原則實際應用

我們應該都接觸過微服務,常見的可以作為注冊中心的元件有:ZooKeeper、Eureka、Nacos…。

  1. ZooKeeper 保證的是 CP。 任何時刻對 ZooKeeper 的讀請求都能得到一緻性的結果,但是, ZooKeeper 不保證每次請求的可用性比如在 Leader 選舉過程中或者半數以上的機器不可用的時候服務就是不可用的。
  2. Eureka 保證的則是 AP。 Eureka 在設計的時候就是優先保證 A (可用性)。在 Eureka 中不存在什麼 Leader 節點,每個節點都是一樣的、平等的。是以 Eureka 不會像 ZooKeeper 那樣出現選舉過程中或者半數以上的機器不可用的時候服務就是不可用的情況。 Eureka 保證即使大部分節點挂掉也不會影響正常提供服務,隻要有一個節點是可用的就行了。隻不過這個節點上的資料可能并不是最新的。
  3. Nacos 不僅支援 CP 也支援 AP。

BASE理論

什麼是BASE理論

BASE 是 Basically Available(基本可用) 、Soft-state(軟狀态) 和 Eventually Consistent(最終一緻性) 三個短語的縮寫。

分布式必備理論基礎:CAP和BASECAP理論BASE理論總結

BASE 理論是對 CAP 中一緻性 C 和可用性 A 權衡的結果,其來源于對大規模網際網路系統分布式實踐的總結,是基于 CAP 定理逐漸演化而來的,它大大降低了我們對系統的要求。

BASE理論的核心思想是:

即使無法做到強一緻性(Strong consistency),但每個應用都可以根據自身的業務特點,采用适當的方式來使系統達到最終一緻性(Eventual consistency)。

BASE理論的三個特性

基本可用

什麼是基本可用呢?

假如系統出現了不可預知故障,允許損失部分可用性,當然也不能完全不可用。

損失的這部分可用性指的是什麼?

  • 響應時間上的損失:正常情況下的搜尋引擎0.5秒即傳回給使用者結果,而基本可用的搜尋引擎可以在2秒作用傳回結果。
  • 功能上的損失:在一個電商網站上,正常情況下,使用者可以順利完成每一筆訂單。但是到了大促期間,為了保護購物系統的穩定性,部分消費者可能會被引導到一個降級頁面。

軟狀态

軟狀态指允許系統中的資料存在中間狀态(CAP 理論中的資料不一緻),并認為該中間狀态的存在不會影響系統的整體可用性,即允許系統在不同節點的資料副本之間進行資料同步的過程存在延時。

最終一緻性

最終一緻性強調的是系統中所有的資料副本,在經過一段時間的同步後,最終能夠達到一個一緻的狀态。是以,最終一緻性的本質是需要系統保證最終資料能夠達到一緻,而不需要實時保證系統資料的強一緻性。

分布式一緻性的 3 種級别:
  1. 強一緻性 :系統寫入了什麼,讀出來的就是什麼。
  2. 弱一緻性 :不一定可以讀取到最新寫入的值,也不保證多少時間之後讀取到的資料是最新的,隻是會盡量保證某個時刻達到資料一緻的狀态。
  3. 最終一緻性 :弱一緻性的更新版,系統會保證在一定時間内達到資料一緻的狀态。
業界比較推崇是最終一緻性級别,但是某些對資料一緻要求十分嚴格的場景比如銀行轉賬還是要保證強一緻性。

最終一緻性怎麼保證呢?

  • 讀時修複 : 在讀取資料時,檢測資料的不一緻,進行修複。比如 Cassandra 的 Read Repair 實作,具體來說,在向 Cassandra 系統查詢資料的時候,如果檢測到不同節點 的副本資料不一緻,系統就自動修複資料。
  • 寫時修複 : 在寫入資料,檢測資料的不一緻時,進行修複。比如 Cassandra 的 Hinted Handoff 實作。具體來說,Cassandra 叢集的節點之間遠端寫資料的時候,如果寫失敗 就将資料緩存下來,然後定時重傳,修複資料的不一緻性。
  • 異步修複 : 這個是最常用的方式,通過定時對賬檢測副本資料的一緻性,并修複。

總結

CAP 是分布式系統設計理論,BASE 是 CAP 理論中 AP 方案的延伸,ACID 是資料庫事務完整性的理論。

CAP理論嚴格來講不是三選二,而是

CP

AP

二選一,因為通常

P

(分區容錯性)是必須得到保證的。

BASE理論面向的是大型高可用、可擴充的分布式系統。與傳統ACID特性相反,不是強一緻性模型,BASE提出通過犧牲強一緻性來獲得可用性,并允許資料一段時間内的不一緻,但是最終需要達到一緻狀态。

簡單的事情重複做,重複的事情認真做,認真的事情有創造性地做。

我是三分惡,一個努力學習中的程式員。

點贊

關注

不迷路,咱們下期見!