2008 年 eBay 的架構師 Dan Pritchett 在發表給 ACM 的文章 BASE: An Acid Alternative 中第一次明確提出BASE理論。網絡
BASE 不是 base (基礎) 的意思 架構
BASE是 Basically Available(基本可用)、Soft state(軟狀態)和 Eventually consistent(最終一致性)三個短語的簡寫。分佈式
BASE是對CAP 理論中強一致性和可用性權衡的結果,其來源於對大規模互聯網系統分佈式實踐的總結,是基於CAP定理逐步演化而來的,其核心思想是即便沒法作到強一致性(Strong consistency),每一個應用均可以根據自身的業務特色,採用適當的方式來使系統達到最終一致性(Eventual consistency)。post
BASE 中的 BA,基本可用。網站
基本可用是指分佈式系統在出現不可預知故障的時候,容許損失部分可用性 (響應時間、功能上的可用性).搜索引擎
注意,容許損失部分可用性 不等價於 系統不可用 cdn
響應時間上的損失:正常狀況下的搜索引擎 0.5 秒便可返回結果,而基本可用狀況下的搜索引擎 1 秒才返回結果。blog
功能上的損失:在一個電商網站上,正常狀況下,用戶能夠順利完成每一筆訂單,可是到了大促期間,爲了保護購物系統的穩定性,部分消費者可能會被引導到一個降級頁面。索引
BASE 中的 S,軟狀態。進程
軟狀態指的是,容許系統中的數據存在中間狀態,且該狀態不影響系統的總體可用性,即容許系統在多個不一樣節點的數據副本存在數據延時,前提是這個延時不影響可用性。
硬狀態, 要求多個節點的數據副本都是一致的
BASE 中的 E,最終一致性。
上面說軟狀態,而後不可能一直是軟狀態,必須有個時間期限。在期限事後,應當保證全部副本保持數據一致性。
亞馬遜首席技術官Werner Vogels在於2008年發表的一篇經典文章Eventually Consistent-Revisited中,對最終一致性進行了很是詳細的介紹。
他認爲最終一致性是一種特殊的弱一致性:
系統可以保證在沒有其餘新的更新操做的狀況下,數據最終必定可以達到一致的狀態 ,所以全部客戶端對系統的數據訪問都可以獲取到最新的值。同時,在沒有發生故障 的前提下,數據達到一致狀態的時間延遲,取決於網絡延遲、系統負載和數據複製方 案等因素。
最終一致性強調的是系統中全部的數據副本,在通過一段時間的同步後,最終可以達到一致的狀態。
有弱一致性,就有強一致性。
強一致性要求,在更新的同時,全部節點查詢到的都必須是最新的數據。
實際工做中,最終一致性分爲 5 種
若是節點A在更新完某個數據後通知了節點B,那麼節點B的訪問修改操做都是基於A更新後的值,同時,和節點A沒有因果關係的C的數據訪問則沒有這樣的限制
因果一致性的特定形式,一個節點A總能夠讀到本身更新的數據
訪問存儲系統同一個有效的會話,系統應保證該進程讀己之所寫
一個節點從系統中讀取一個特定值以後,那麼該節點從系統中不會讀取到該值之前的任何值
一個系統要可以保證來自同一個節點的寫操做被順序執行(保證寫操做串行化)