BASE理論
BASE理論
BASE是Basically Available(基本可用)、Soft state(軟狀態)和Eventually consistent(最終一致性)三個短語的簡寫,BASE是對CAP中A一致性和P可用性權衡的結果,Redis等眾多系統構建與這個理論之上。其來源於對大規模網際網路系統分散式實踐的結論,是基於CAP定理逐步演化而來的,其核心思想是即使無法做到強一致性(Strong consistency),但每個應用都可以根據自身的業務特點,採用適當的方式來使系統達到最終一致性(Eventual consistency)。ACID傳統資料庫常用的設計理念, ACID和BASE代表了兩種截然相反的設計哲學,分處一致性-可用性分佈圖譜的兩極。
接下來我們著重對BASE中的三要素進行詳細講解。
基本可用
基本可用是指分散式系統在出現不可預知故障的時候,允許損失部分可用性——但請注意,這絕不等價於系統不可用,以下兩個就是“基本可用”的典型例子。
- 響應時間上的損失:正常情況下,一個線上搜尋引擎需要0.5秒內返回給使用者相應的查詢結果,但由於出現異常(比如系統部分機房發生斷電或斷網故障),查詢結果的響應時間增加到了1~2秒。
- 功能上的損失:正常情況下,在一個電子商務網站上進行購物,消費者幾乎能夠順利地完成每一筆訂單,但是在一些節日大促購物高峰的時候,由於消費者的購物行為激增,為了保護購物系統的穩定性,部分消費者可能會被引導到一個降級頁面。
弱狀態
弱狀態也稱為軟狀態,和硬狀態相對,是指允許系統中的資料存在中間狀態,並認為該中間狀態的存在不會影響系統的整體可用性,即允許系統在不同節點的資料副本之間進行資料聽不的過程存在延時。
最終一致性
最終一致性強調的是系統中所有的資料副本,在經過一段時間的同步後,最終能夠達到一個一致的狀態。因此,最終一致性的本質是需要系統保證最終資料能夠達到一致,而不需要實時保證系統資料的強一致性
亞馬遜首席技術官Werner Vogels在於2008年發表的一篇文章中對最終一致性進行了非常詳細的介紹。他認為最終一致性是一種特殊的弱一致性:系統能夠保證在沒有其他新的更新操作的情況下,資料最終一定能夠達到一致的狀態,因此所有客戶端對系統的資料訪問都能夠胡渠道最新的值。同時,在沒有發生故障的前提下,資料達到一致狀態的時間延遲,取決於網路延遲,系統負載和資料複製方案設計等因素。
在實際工程實踐中,最終一致性存在以下五類主要變種。
-
因果一致性:
因果一致性是指,如果程序A在更新完某個資料項後通知了程序B,那麼程序B之後對該資料項的訪問都應該能夠獲取到程序A更新後的最新值,並且如果程序B要對該資料項進行更新操作的話,務必基於程序A更新後的最新值,即不能發生丟失更新情況。與此同時,與程序A無因果關係的程序C的資料訪問則沒有這樣的限制。
-
讀己之所寫:
讀己之所寫是指,程序A更新一個數據項之後,它自己總是能夠訪問到更新過的最新值,而不會看到舊值。也就是說,對於單個數據獲取者而言,其讀取到的資料一定不會比自己上次寫入的值舊。因此,讀己之所寫也可以看作是一種特殊的因果一致性。
-
會話一致性:
會話一致性將對系統資料的訪問過程框定在了一個會話當中:系統能保證在同一個有效的會話中實現“讀己之所寫”的一致性,也就是說,執行更新操作之後,客戶端能夠在同一個會話中始終讀取到該資料項的最新值。
-
單調讀一致性:
單調讀一致性是指如果一個程序從系統中讀取出一個數據項的某個值後,那麼系統對於該程序後續的任何資料訪問都不應該返回更舊的值。
-
單調寫一致性:
單調寫一致性是指,一個系統需要能夠保證來自同一個程序的寫操作被順序地執行。
以上就是最終一致性的五類常見的變種,在時間系統實踐中,可以將其中的若干個變種互相結合起來,以構建一個具有最終一致性的分散式系統。事實上,可以將其中的若干個變種相互結合起來,以構建一個具有最終一致性特性的分散式系統。事實上,最終一致性並不是只有那些大型分散式系統才設計的特性,許多現代的關係型資料庫都採用了最終一致性模型。在現代關係型資料庫中,大多都會採用同步和非同步方式來實現主備資料複製技術。在同步方式中,資料的複製國恥鞥通常是更新事務的一部分,因此在事務完成後,主備資料庫的資料就會達到一致。而在非同步方式中,備庫的更新往往存在延時,這取決於事務日誌在主備資料庫之間傳輸的時間長短,如果傳輸時間過長或者甚至在日誌傳輸過程中出現異常導致無法及時將事務應用到備庫上,那麼狠顯然,從備庫中讀取的的資料將是舊的,因此就出現了不一致的情況。當然,無論是採用多次重試還是認為資料訂正,關係型資料庫還是能搞保證最終資料達到一致——這就是系統提供最終一致性保證的經典案例。
總結
總的來說,BASE理論面向的是大型高可用可擴充套件的分散式系統,和傳統事務的ACID特性使相反的,它完全不同於ACID的強一致性模型,而是提出通過犧牲強一致性來獲得可用性,並允許資料在一段時間內是不一致的,但最終達到一致狀態。但同時,在實際的分散式場景中,不同業務單元和元件對資料一致性的要求是不同的,因此在具體的分散式系統架構設計過程中,ACID特性與BASE理論往往又會結合在一起使用。