分散式一致性原理—BASE
定義
BASE是BasicallyAvailable(基本可用)、Soft state(軟狀態)和Eventually consistent(最終一致性)三個短語的簡寫,是由來自eBay的架構師Dan Pritchett提出的。
BASE是對CAP中一致性和可用性權衡的結果,其來源於大規模網際網路系統分散式實踐的總結,是基於CAP定理逐步演化而來的。
BASE的核心思想是:即使無法做到強一致性(Strong consistency),但每個應用都可以根據自身的業務特點,採用適當的方式來使系統達到最終一致性。
BASE三要素
基本可用
基本可用是指分散式系統在出現不可預知故障的時候,允許損失部分可用性,如:
l 響應時間上的損失
如:正常時間0.5秒,故障時1-2秒
l 功能上的損失
如:一電子商務網站,節日促銷時,部分消費者被引導到一個降級的購物頁面。
弱狀態(或軟狀態)
和硬狀態相對,是指允許系統中的資料存在中間狀態,並認為該中間狀態的存在不會影響系統的整體可用性,即允許系統在不同節點的資料副本之間進行資料同步的過程存在延時。
最終一致性
最終一致性強調的是系統中所有的資料副本,在經過一段時間的同步後,最終能夠達到一個一致的狀態。
最終一致性的本質是需要系統保證最終資料能夠達到一致,而不需要實時保證系統資料的強一致性。
在沒有發生故障的情況下,資料達到一致狀態的時間延遲,取決於網路延遲、系統負載和資料複製方案設計等因素。
工程實踐中的最終一致性分類
1. 因果一致性(Causal consistency)
程序A更新某個資料項後會通知程序B,程序B能獲取到程序A更新後的最新值。
2. 讀己之所寫(Read your writes)
程序A更新某個資料項後,它自己總是能訪問到更新過的最新值。
3. 會話一致性(Session consistency)
執行更新操作之後,客戶端能夠在同一個會話中始終讀取到該資料項的最新值。
4. 單調讀一致性(Monotonic read consistency)
如果一個程序從系統中讀取出一個數據項的某個值後,那麼系統對於該程序後續的任何資料訪問都不應該返回更舊的值。
5. 單調寫一致性(Monotonic write consistency)
一個系統需要能夠保證來自同一個程序的寫操作被順序地執行。
總結
BASE理論和傳統事務的ACID特性是相反的,完全不同於ACID的強一致性模型,而是通過犧牲強一致性來獲得可用性,並允許資料在一段時間內是不一致的,但最終達到一致狀態。
在實際的分散式場景中,不同業務單元和元件對資料一致性的要求是不同的,因此在具體的分散式系統架構設計過程中,ACID特性與BASE理論往往又會結合在一起使用。