分佈式基本理論CAP與BASE
1 CAP理論
CAP理論是分佈式系統中最核心的基礎理論,一個分佈式系統最多隻能同時滿足一致性(Consistency)、可用性(Availablity)、分區容錯性(Partition Tolerance)三項中的兩項。
1.1 CAP的含義
在分佈式系統中,由於系統的拆分,P是固定的,CAP的應用模型只能是CP和AP。
1.1.1 Consistency(一致性)
all nodes see the same data at the same time.
所有節點在同一時刻訪問的數據副本都是一樣的。
要麼讀取到最新數據,要麼讀取失敗,強調的是數據正確。
1.1.2 Availability(可用性)
Reads and writes always succeed.
系統提供的服務必須是一直處於可用狀態,而且對於用戶的每一個請求都能在有限的時間內獲得正常的響應(數據有可能並不是最新的)。
一定返回數據,不返回錯誤,但不保證是最新數據,強調的是不出錯。
1.1.3 Partition Tolerance(分區容錯性)
the system continues to operate despite arbitrary message loss or failure of part of the system.
當部分節點出現消息丟失或網絡分區故障時,仍能夠對外提供滿足一致性和可用性的服務。
系統一直運行,不管內部出現何種數據同步問題,強調的是不掛掉。
1.2 CAP理論的應用
通常在分佈式系統中,爲了保證數據的高可用,通常會設置多個副本,只能在一致性和可用性之間做選擇。業務上對一致性的要求會直接反映在系統設計中,典型的就是CP和AP架構。
-
CP架構:放棄可用性,追求一致性和分區容錯性。
Zookeeper就是採用CP架構,Zookeeper是一個分佈式服務框架,主要解決分佈式集羣中應用系統的協調和一致性問題。核心算法是ZAB算法,所有設計都是爲了一致性。在面對網絡分區時,爲了保持一致性,它將是不可用的。
-
AP架構:放棄一致性,追求可用性和分區容錯性。
Eureka中各個節點都是平等的,幾個節點掛掉並不影響正常節點的工作,剩餘的節點依舊可以提供註冊和查詢服務,只要有一個節點存在,就能保證可用性,只不過數據可能不是最新的。
2 BASE理論
BASE理論由ePay架構師提出,是對CAP理論的延伸,核心思想是無法做到強一致性(Strong Consistency),但應用可以採用合適的方式達到最終一致性(Eventual Consistency)。
BASE指基本可用(Basically Available)、軟狀態(Soft State)、最終一致性(Eventual Consistency)。
2.1 BASE的含義
2.1.1 基本可用(Basically Available)
不再追求CAP中的”任何時候,讀寫都是成功的“,而是系統能夠基本運行,一直提供服務。基本可用強調了分佈式系統出現不可預知故障時,允許損失部分可用性,比如響應時間變長或者服務被降級。
2.1.2 軟狀態(Soft State)
軟狀態對應ACID事務中的原子性,在ACID的事務中,實現的是強一致性。軟狀態允許系統中的數據存在中間狀態,並認爲該狀態不影響系統的整體可用性,即允許系統在多個不同節點的數據副本存在數據延時。
2.1.5 最終一致性(Eventual Consistency)
最終一致性是弱一致性的特例,強調所有副本數據,在經過一段時間同步後,最終都能達到一致的狀態。最終一致的本質是需要系統保證數據最終能夠達到一致,而不需要實時保證系統數據的強一致。
3 CAP與BASE關係
CAP描述了一致性、可用性、分區容錯性之間的制約關係。BASE理論是CAP理論的實際應用,即在分區和副本存在的前提下,放棄強一致性,實現基本可用。大部分分佈式系統都會做這種選擇,如NoSQL系統、微服務架構等。
除了CAP和BASE,還有ACID,它是一種強一致性模型,強調原子性、一致性、隔離性、持久性,主要用於數據庫實現。Base理論面向的是高可用、高擴展的分佈式系統,ACID適合傳統金融等業務,在實際場景中,不同業務對數據一致性要求不一樣,ACID和BASE往往會結合使用。
參考資料
- CAP 定理的含義
- 拉勾專欄: 分佈式技術原理與實戰45講