分布式系统概念 | 分布式理论:CAP、BASE
文章目錄
- CAP定理
- BASE理論
CAP定理
一個分布式系統不可能同時滿足一致性(Consistency)、可用性(Availability)、分區容錯性(Partition Tolerance)這三個基本需求,最多只能滿足其中的兩項,不可能三者兼顧。
- 一致性:在分布式系統中的所有數據副本,在同一時刻是否一致(等同于所有節點訪問同一份最新的數據副本)
- 可用性:分布式系統在面對各種異常時可以提供正常服務的能力(非故障的節點在有限的時間內返回合理的響應)
- 分區容錯性:分布式系統在遇到任何網絡分區故障的時候,仍然需要能對外提供一致性和可用性的服務,除非是整個網絡環境都發生了故障。
如下圖
為什么三者不可兼顧呢?
我們首先就需要了解以下網絡分區的概念。
在分布式系統中,不同的節點分布在不同的子網絡(機房或異地網絡等)中,由于一些特殊的原因導致這些子網絡之間出現網絡不連通的狀況,但各個子網絡的內部網絡是正常的,從而就導致了整個系統的網絡環境被切分成了若干個孤立的區域。
節點被劃分為多個區域后,每個區域內部可以通信,但是區域之間無法通信。
對于一個分布式系統而言,我們的組件必然要被部署到不同的節點上,也必然會出現子網絡。我們無法保證網絡始終可靠,那么網絡分區則是一個必定會產生的異常情況。
當發生網絡分區的時候,如果我們要繼續提供服務,那么分區容錯性也就是我們必然需要面對和解決的問題,因此分區容錯性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理論往往又會結合在一起使用。
總結
以上是生活随笔為你收集整理的分布式系统概念 | 分布式理论:CAP、BASE的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Redis 缓存常见问题:缓存一致性的解
- 下一篇: 什么是Flink?Flink能用来做什么