關鍵字
分布式事務
CAP
BASE
[TOC]
在分布式系統中,有兩個重要的理論依據,用來指導系統的建設思路。他們分別是CAP
理論和BASE
理論。其中CAP理論是一個偏向學術的理論,而BASE理論是基于CAP理論提出的一個更偏向工程實踐的理論。
接下來我們講分別解讀一下CAP理論和BASE理論到底說了什么?
一、CAP理論
CAP定理指出,對于一個分布式系統,不可能同時滿足以下三個條件:
- 一致性(Consistency ),就是說訪問系統中任何一個節點,都訪問的是同一份最新的數據。
- 可用性(Availability ),每次訪問系統,都能夠獲得可用的數據,但是數據不保證是最新的。
- 分區容錯性(Partition tolerance),盡管節點之間的網絡丟棄(或延遲)任意數量的消息,系統仍能繼續運行。當網絡被分區時,從分區的一個組件中的節點發送到另一個組件中的節點的所有消息都將丟失。
接下來我們講分別解讀三個問題:
為什么一個系統不能同時滿足CAP?
什么是AP系統和CP系統?
對定理的一些誤解
1.1 CAP理論證明
假設我們的分布式系統內部出現了網絡故障,由于我們需要具備分區容錯性,因此此時系統應該正常工作。
此時client向服務器Server1
發送了寫請求,S1
接收并處理了請求。
如果我們系統要保證一致性,那么我們必須要等到S1
將數據同步到S2
后,才能夠返回給客戶端成功狀態。但是由于網絡故障,S1
無法同步到S2
,因此此時系統就不可用了。
那如果我們要保證系統的可用性,那么就應該直接返回成功,而無需等待S1同步S2。此時如果客戶端再次向S2發送讀請求,那么S2服務器此時只能返回舊的數據。這也就意味著我們無法保證系統的數據一致性。
可見,我們無法構建一個同時滿足CAP的系統,這就是CAP理論的核心。
1.2 AP VS CP
由于在分布式系統中,網絡錯誤是不可避免的,因此總是需要具備分區容錯性P。因此在存在分區容錯性的情況下,我們只能對A和P二選一。
AP
(Availability and Partition tolerance):當可用性高于一致性時,系統將始終處理客戶端請求并嘗試返回最新可用版本的信息,即使由于網絡分區而無法保證它是最新的。
CP
(Consistency and Partition tolerance ):如果選擇一致性而不是可用性,則系統將返回錯誤或超時,如果由于網絡分區或故障而無法更新到其他節點,則該系統將返回錯誤或超時。
在實際中的分布式框架中,我們一般會把如ZK認為是屬于CP系統,對于Eureka這類的認為是AP系統。當然這種簡單的把系統劃分為AP或者CP是具有爭議的,因為目前很多系統都會支持不同的運行模式,同時也會通過一些手段去盡可能的提升A&C。
1.3 對于定理的一些誤解
CAP 定理經常被誤解為必須始終在三個保證中選擇兩個。實際上,只有在網絡分區或發生故障時,才需要在一致性和可用性之間進行選擇。在沒有網絡分區或網絡故障的情況下,可以同時滿足可用性和一致性。
二、BASE理論
BASE理論是EBAY架構師針對現實中大規模分布式系統實踐而提出的一個理論,是對CAP理論的一種擴展和延伸。其核心思想是:
即使做不到強一致性(Strong Consistency ,CAP中的一致性),但是可以通過某些手段來達到最終一致性(Eventually Consistency )。
BASE分別代表著:
- BA(Basically Available )基本可用。指的是在分布式系統出現故障時,允許一部分的能力損失。主要包括兩方面:1)響應時間方面,比如系統中的一些機器宕機,導致整個系統處理能力下降,用戶響應時間變長。2)部分功能損失,例如用戶瀏覽頁面,由于系統負載問題,會降級掉一些非核心功能,保證核心功能可用。
- S (Soft State ) 軟狀態,允許系統存在中間狀態,而不影響系統的可用性。例如分布式存儲中的主從同步延時就是一種軟狀態的體現。MySQL集群的主從異步復制也是一種軟狀態。
- E(Eventually Consistency) 最終一致性。指的是我們系統在經過一定時間后,最終能夠達到整體的一致性,就認為系統是可用的。
目前我們常見的一些高可用的分布式架構,絕大部分是采用了BASE理論的思路。
總結:采用ACID保證 (RDBMS)設計的數據庫系統通常選擇一致性而不是可用性,而采用BASE保證設計的系統則選擇可用性而不是一致性。