分散式系統 - BASE理論
BASE理論是Basically Available(基本可用),Soft State(軟狀態)和Eventually Consistent(最終一致性)三個短語的縮寫,由eBay架構師Dan Pritchett提出來的。
BASE是對CAP中一致性和可用性權衡的結果,其來源於對大規模網際網路分散式系統實踐的總結,是基於CAP定律逐步演化而來。其核心思想是即使無法做到強一致性,但每個應用都可以根據自身業務特點,才用適當的方式來使系統打到最終一致。
BASE理論的內容
基本可用(Basically Available)
所謂基本可用就是在出現不可預知的故障時,系統主體功能依然可用。一個比較典型的例子就是在電商促銷時,為保護購物系統,部分消費有可能會被導到一個降級頁面。
軟狀態(Soft State)
所謂軟狀態是指允許系統中的資料存在中間狀態,並認為這種狀態不影響系統的整體可用性。典型的例子如在分散式檔案系統中,資料的寫入往往是先寫入一份,再非同步生成多個副本(同步生成副本不屬於這種情況)。
最終一致性(Eventually Consistent)
上面提到了軟狀態,但是系統不可以一直處於軟狀態,必須有一個期限。在期限過後,應當保證所有副本資料是的一致的,從而達到資料的最終一致性。而在實際工程實踐中,最終一致性分為5種:
因果一致性(Causal consistency)
如果節點A在更新完某個資料後通知了節點B,那麼節點B之後對該資料的訪問和修改都是基於A更新後的值。於此同時,和節點A無因果關係的節點C的資料訪問則沒有這樣的限制。
讀己之所寫(Read your writes)
節點A更新一個數據後,它自身總是能訪問到自身更新過的最新值,而不會看到舊值。其實也算一種因果一致性。
會話一致性(Session consistency)
會話一致性將對系統資料的訪問過程框定在了一個會話當中:系統能保證在同一個有效的會話中實現 “讀己之所寫” 的一致性,也就是說,執行更新操作之後,客戶端能夠在同一個會話中始終讀取到該資料項的最新值。
單調讀一致性(Monotonic read consistency)
單調讀一致性指的是:如果一個節點從系統中讀取出一個數據項的某個值後,那麼系統對於該節點後續的任何資料訪問都不應該返回更舊的值。
單調寫一致性(Monotonic write consistency)
單調寫一致性指的是:一個系統要能夠保證來自同一個節點的寫操作被順序的執行。
在實際的實踐中,這5種系統往往會結合使用,以構建一個具有最終一致性的分散式系統。事實上,最終一致性並不是只有那些大型分散式系統才涉及的特性,許多現代的關係型資料庫都採用了最終一致性模型。在現代關係型資料庫中,大多都會採用同步和非同步方式來實現主備資料複製技術。在同步方式中,資料的複製過程通常是更新事務的一部分,因此在事務完成後,主備資料庫的資料就會達到一致。而在非同步方式中,備庫的更新往往會存在延時,這取決於事務日誌在主備資料庫之間傳輸的時間長短,如果傳輸時間過長或者甚至在日誌傳輸過程中出現異常導致無法及時將事務應用到備庫上,那麼很顯然,從備庫中讀取的資料將是舊的,因此就出現了資料不一致的情況。當然,無論是採用多次重試還是人為資料訂正,關係型資料庫還是能夠保證最終資料達到一致。