天天看點

分布式系統概念 | 分布式理論:CAP、BASECAP定理BASE理論

文章目錄

  • CAP定理
  • BASE理論

CAP定理

一個分布式系統不可能同時滿足一緻性(Consistency)、可用性(Availability)、分區容錯性(Partition Tolerance)這三個基本需求,最多隻能滿足其中的兩項,不可能三者兼顧。

  • 一緻性:在分布式系統中的所有資料副本,在同一時刻是否一緻(等同于所有節點通路同一份最新的資料副本)
  • 可用性:分布式系統在面對各種異常時可以提供正常服務的能力(非故障的節點在有限的時間内傳回合理的響應)
  • 分區容錯性:分布式系統在遇到任何網絡分區故障的時候,仍然需要能對外提供一緻性和可用性的服務,除非是整個網絡環境都發生了故障。

如下圖

分布式系統概念 | 分布式理論:CAP、BASECAP定理BASE理論
為什麼三者不可兼顧呢?

我們首先就需要了解以下網絡分區的概念。

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

分布式系統概念 | 分布式理論:CAP、BASECAP定理BASE理論

節點被劃分為多個區域後,每個區域内部可以通信,但是區域之間無法通信。

對于一個分布式系統而言,我們的元件必然要被部署到不同的節點上,也必然會出現子網絡。我們無法保證網絡始終可靠,那麼網絡分區則是一個必定會産生的異常情況。

當發生網絡分區的時候,如果我們要繼續提供服務,那麼分區容錯性也就是我們必然需要面對和解決的問題,是以分區容錯性P是必定要滿足的。

那麼一緻性C和可用性A可以兼顧嗎?

答案必定是否定的,為什麼呢?倘若分布式系統中出現了網絡分區的情況,此時某一個節點在進行寫操作,為了保證一緻性,那麼就必須要禁止其他節點的讀寫操作以防止資料沖突,而此時就導緻其他的節點無法正常工作,即與可用性發生沖突。而如果讓其他節點都正常進行讀寫操作的話,那就無法保證資料的一緻,影響了資料的一緻性,是以,我們隻能滿足可用性A和一緻性C二者其一

用一句話總結就是,CAP 理論中分區容錯性 P 是一定要滿足的,在此基礎上,隻能滿足可用性A或者一緻性C。 是以在上面我給出的圖中,CA是不可能的選項,在實際場景中,我們會根據具體的需求來選擇CP和AP。

BASE理論

BASE理論是基本可用(Basically Available) 、軟狀态(Soft-state)和最終一緻性(Eventually Consistent) 三個短語的縮寫。其是對CAP中的一緻性和可用性進行一個權衡的結果。

  • 基本可用(Basically Available):基本可用是指分布式系統在出現不可預知故障的時候,允許損失部分可用性(響應時間上的損失、系統功能上的損失)。但是,這絕不等價于系統不可用。
  • 軟狀态(Soft-state):允許系統中的資料存在中間狀态(CAP理論中的資料不一緻),并認為該中間狀态的存在不會影響系統的整體可用性,即允許系統在不同節點的資料副本之間進行資料同步的過程存在延時。
  • 最終一緻性(Eventually Consistent):最終一緻性強調的是系統中所有的資料副本,在經過一段時間的同步後,最終能夠達到一個一緻的狀态。是以,最終一緻性的本質是需要系統保證最終資料能夠達到一緻,而不需要實時保證系統資料的強一緻性。

BASE理論的核心思想就是我們無法做到強一緻,但每個應用都可以根據自身的業務特點,采用适當的方式來使系統達到最終一緻性。

什麼意思呢?其實就是要犧牲資料的一緻性(不保證強一緻性,隻保證最終一緻性)來滿足系統的高可用性,系統中一部分資料不可用或者不一緻時,仍需要保持系統整體“主要可用”。

總的來說,BASE理論面向的是大型高可用可擴充的分布式系統,和傳統事務的ACID特性使相反的,它完全不同于ACID的強一緻性模型,而是提出通過犧牲強一緻性來獲得可用性,并允許資料在一段時間内是不一緻的,但最終達到一緻狀态。但同時,在實際的分布式場景中,不同業務單元群組件對資料一緻性的要求是不同的,是以在具體的分布式系統架構設計過程中,ACID特性與BASE理論往往又會結合在一起使用。

繼續閱讀