天天看點

【筆記】分布式系統的一緻性問題一、分布式系統一緻性概述二、三個重要定理

文章目錄

  • 一、分布式系統一緻性概述
    • 1.分布式系統一緻性的概念與模型
  • 二、三個重要定理
    • 1.FLP定理及意義
    • 2.CAP定理及應用
    • 3.BASE定理
    • 4. ACID

一、分布式系統一緻性概述

1.分布式系統一緻性的概念與模型

  所謂一緻性,是指資料要完整、要同步。在一個中心化的系統中,資料的結果或者狀态總是一緻而同步的,即便這些系統的伺服器不止一台,但哦度屬于同一中心叢集,在内部是可以高效一緻而同步的。而對于分布式系統,首要問題就是如何解決一緻性的問題,即如何在多個獨立的節點之間達成共識,如區塊鍊系統就是分布式的體系。

  一緻性模型:

  (1)強一緻性。當更新操作完成之後,任何多個後續程序或線程的通路都會傳回最新的更新過的值。

  (2)弱一緻性。系統并不保證後續程序或者線程的通路都會傳回最新的更新股的值。

  (3)最終一緻性。是弱一緻性的特定形式,系統保證在沒有後續更新的前提下,系統最終傳回上一次更新操作的值。DNS是一個典型的最終一緻性系統。

  最終一緻性模型的變種:

  (1)因果一緻性。如果A程序在更新之後向B程序通知更新的完成,那麼B的通路操作将會傳回更新的值。如果沒有因果關系的C程序将會遵循最終一緻性的規則。

  (2)讀己所寫一緻性。是因果一緻性的特定形式,一個程序總可以讀到自己更新的資料。

  (3)會話一緻性。是讀己所寫一緻性的特定形式,程序在通路存儲系統同一個會話内,系統保證該程序讀己之所寫。

  (4)單調讀一緻性。如果一個程序已經讀取到一個特定值,那麼該程序不會讀取到該值以前的任何值。

  (5)單調寫一緻性。系統保證對同一個程序的寫操作串行化。

  上述最終一緻性的不同方式可以進行組合。

  分布式系統一緻性問題非常難解決的原因:

  (1)分布式系統本身可能出故障;

  (2)分布式系統之間的通信可能有故障或者有巨大的延遲;

  (3)分布式系統中,有些子系統或環節運作很快,有些則很慢,是以導緻整個系統運作的速度可能大不相同。

  傳統處理一緻性問題的方法有兩段式、令牌環、時間戳等。

  分布式系統一般希望其具備以下能力:

  (1)系統作為一個邏輯整體,不應該傳回錯誤的結果;

  (2)隻要系統裡的大部分機器工作正常,整個系統就能有效運作,這也是分布式系統抵抗單點故障的一個優點;

  (3)對于分布式系統來說,總體效能的大小并不取決于個别節點的抵消或失效,即木桶原理失效,是以其系統的性能是可以橫向擴充的;

  (4)系統中的每個節點可以按照自己的時序獨立工作,沒有統一的時間順序,即分布式系統必須是異步的。

二、三個重要定理

1.FLP定理及意義

  FLP定理:指在可靠網絡中,存在節點失效的最小化異步模型系統中,不存在一個可以解決一緻性問題的确定型算法。

  即不要浪費時間去為異步分布式系統設計在任意場景下都能實作共識的算法,在允許結點失效的情況下,純粹異步系統無法確定一緻性在有限時間内完成。

2.CAP定理及應用

  CAP定理:指在一個分布式系統中,不可能同時滿足一緻性(Consistency)、可用性(Availability)和分區容錯性(Partition-Tolerance)這3個基本需求,隻能同時滿足其中的2個。

  一緻性:分布式系統中的所有資料備份,在同一時刻是同樣的值,并等同于所有結點通路同一份最新的資料副本。

  可用性:在有限的時間内,確定每個請求都可以收到确定其是否成功的響應。

  分區容忍性:實際中通信産生延時,系統如果不能在時限内達成資料一緻性,就意味着發生了分區的情況,必須就目前操作在C點和A點之間做出選擇。

  CAP定理的應用:

  放棄P:如果放棄P後想避免出現分區容錯問題,簡單做法就是将所有的資料都放在一個分布式節點中。

  放棄A:放棄A後一旦出現網絡分區或者其他故障,受影響的服務就需要等待恢複,并在此期間不能對外提供服務。

  放棄C:放棄一緻性不是完全放棄,而是放棄資料的強一緻性,而隻保留資料的最終一緻性。

  設計分布式系統,就是在一緻性和可用性之間尋找一個平衡點。對于大多數應用而言,并不需要強一緻性,是以犧牲一緻性而換取高可用性是目前多數分布式資料庫産品的方向。通常來說,可以通過資料的多份異步複制來實作系統的高可用性和資料的最終一緻性,使用者能感覺到一緻性的時間視窗則取決于資料複制到一緻狀态的時間。

3.BASE定理

  BASE定理的核心思想是:即使無法做到強一緻性,但應用可以采用适合的方式達到最終一緻性。

  BASE定理包含以下三個方面的内容:

  (1)基本可用:是指分布式系統在出現故障的時候,允許損失部分可用性,即保證核心可用。

  (2)軟狀态:指允許系統存在中間狀态,而該中間狀态不會影響系統的整體可用性。

  (3)最終一緻性:是指系統中的所有資料副本經過一定時間後,最終能夠達到一緻的狀态。

4. ACID

  ACID是指資料庫系統 在寫入或更新資料的過程中,為保證事務是正确可靠的,必須具備原子性、一緻性、隔離性和持久性。

  原子性:一個事務中的所有操作,要麼全部完成,要麼全部不完成,不會結束在中間某個環節。

  一緻性:在事務開始之前和事務結束之後,資料庫的完整性沒有被破壞。

  隔離性:資料庫允許多個并發事務同時對其資料進行讀寫和修改,隔離性可以防止多個事務并發執行時由于交叉執行而導緻資料的不一緻。

  持久性:事務處理結束後,對資料的修改是永久性的,即便系統故障也不會丢失。

  BASE定理支援大型分布式系統,并提出通過犧牲強一緻性獲得高可用性。

  

注:事務隔離分為不同級别:讀未送出(read uncommitted)、讀送出(read committed)、可重複讀(repeatable read)、串行化(serializable)。

繼續閱讀