天天看點

漫談事務與分布式事務(4)- 最終一緻性

在上一篇文章裡忽略了一點。

CAP 定理有一個缺陷,這個缺陷可以幫助我們“部分”擺脫 分布式困境。

總的來說,CAP 定理本身是完備的,但它并沒有描述一個分布式系統何時産生分區,以及分區會持續多長時間。理論其實隻限制:在分區發生的 時間内,系統隻能在一緻性(C)和可用性(A)之間二選一。

是以,分布式系統完全可以在沒有出現分區時保證 C 和 A,而在出現分區後,放棄一些 A 或者 C 然後通過人工操作消除分區,讓系統恢複到分區前的狀況。

這樣說太複雜了。用 說人話 的方式就是:

    ※ 當沒有故障時,系統正常處理請求并且傳回一緻的結果。

    ※ 出現故障後,首先把所有請求切換到正常機器,故障機器下線。

    ※ 接着人工恢複故障機器上的資料,保證資料一緻性。

    ※ 最後讓機器重新上線,恢複系統正常容量。

基本上(請忽略一些細節),這就是主備同步的資料庫叢集在故障恢複時的做法。

這裡的思路是,既然 CAP 特性在一個時間點不可能同時滿足,那我們可以在這個時間點暫時放棄 A 或者 C,然後在另一個時間點再設法恢複。隻要恢複的速度足夠快,使用者就能夠忍受暫時的不一緻或者不可用。

漫談事務與分布式事務(4)- 最終一緻性

“Twitter 隻是暫時不可用,最終會恢複可用。”

沿着這個思路,業界産生了一些理論,其中最著名的是 BASE。

BASE, 最終一緻性

這個理論由 Basically Available, Soft state, Eventual consistency 組成。核心的概念是 Eventual consistency ——最終一緻性。它局部的放棄了 CAP 理論中的“完全”一緻性,提供了更好的可用性和分區容忍度。

    Basically Available

    基本可用, 或者說部分可用。由于分布式系統的節點故障是常見的,業務必須接受這種不可用,并且做出選擇:是通路另一個節點忍受資料的臨時不一緻,還是等待節點恢複并忍受業務上的部分不可用。

    Soft state

    把所有節點的資料 (資料 = 狀态) 都看作是緩存(Cache)。适當的調整業務,使業務可以忍受資料的臨時不一緻,并保證這種不一緻是無害的,可以被最終使用者了解。

    Eventual consistency

    放棄在任何時刻、從任何節點都能讀到完全一緻的資料。允許資料的臨時不一緻,并通過異步複制、重試和合并消除資料的臨時不一緻。

注意 在分布式系統中,寫入和讀取可能發生在不同的節點上。最終一緻帶來的問題是,業務在寫入後立即讀取,很可能讀不到剛剛寫入的資料。是以需要一個附加限制:

    RYW (Read-Your-Writes) consistency

    RYW consistency 是弱化的因果一緻性(Causal consistency),它保證業務在會話中一定能讀到上一次寫入的資料。會話可以看作是同一個連接配接,或者是同一個 HTTP Session。例如:使用者剛剛建立了一個訂單,在送出後他可以立刻檢視這個訂單,這就是 RYW 一緻性。

ACID 與 BASE

漫談事務與分布式事務(4)- 最終一緻性

BASE 這個縮寫有些拼湊的痕迹。那是因為作者認為它的含義與 ACID 恰好相反。

在英文詞典裡,ACID 代表 酸(Acid),而 BASE 代表 堿(Base)。就像這兩個單詞在化學中的含義一樣 —— ACID 與 BASE 位于 CAP 理論的兩端,代表了分布式系統的兩種選擇。

傳統資料庫用 ACID 保護業務資料的一緻性。它明确的要求:事務必須保證資料從上一個一緻性狀态進入下一個一緻性狀态,事務的結束和資料的一緻性之間沒有時差。

從 CAP 定理我們可以知道:正是 ACID 要求的這種“強”一緻性,使得事務系統隻能選擇 C-A 或者 C-P。第一個選擇實際上是單機的傳統資料庫,第二個選擇是後面将要介紹的強一緻性的資料複制叢集。

而 BASE 代表了另一種選擇:放棄一緻性 來保證分布式系統的高可用。與 ACID 的做法相反:業務需要接受和處理資料的不一緻,并且保證這些不一緻不會破壞業務限制 —— 這需要設計者對可能産生的資料不一緻和業務限制非常了解,并且帶來了更高的複雜度。

選擇 高可用 的價值在于:很多場景下系統不可用就意味着對外停止服務,對使用者的影響和商業風險遠遠比“系統仍然可用但是要過一會才能看到資料”來得嚴重。在一些場景下,使用者或許根本不在乎過一會才能看到資料,例如 銀行跨行轉賬。但是,如果銀行告訴使用者無法進行跨行轉賬,那麼就會有很多使用者質疑或投訴銀行的服務了。

上面的 CAP 拼圖裡還剩下一個區域。前面讨論過的 ACID 理論占據了 C-A 區域,代表根本無法容忍分區的傳統單機資料庫。本文介紹的 BASE 理論位于 A-P 區域,代表部分放棄一緻性、追求高可用的現代業務系統。

是以在這幅拼圖裡還剩下 C-P:能夠在分布式環境下 保證資料一緻性 的理論。

下一篇準備介紹這一部分理論。敬請期待。