1. 程式人生 > >分布式系統中的一致性,與數據庫的隔離級別

分布式系統中的一致性,與數據庫的隔離級別

多個 str 副本 one 基礎上 應用設計 OS 全局 哪裏

一致性,是描述多副本的同步特征(本文我們不討論分布式數據庫中,保持多個分片裏的數據在業務邏輯上一致性的情況,僅討論數據多副本的case)。一般從兩個角度來研究:

從全局數據角度來看:

    1. 強一致性: 無論誰、無論何時讀,得到的都是最新寫入後的結果
    2. 線性一致性: 如果把讀寫操作按照嚴格時間戳排序,每個進程的讀寫都遵循該排序的結果
    3. 順序一致性: 每個進程的讀寫操作順序都一致,但不保證按照時間戳順序
    4. 因果一致性: 兩個有因果關系(讀寫了同一數據)的進程之間,讀寫順序都一致,不保證按照時間戳順序,而且無關的進程讀寫順序可以不一樣
    5. 一般一致性: 就是傳統意義上的最終一致性,各副本上的數據最終是同一個值

從某個客戶端角度來看:

    1. 寫後讀:同一個客戶端,不論在哪裏讀寫,寫入後,讀出來的總是不舊於剛剛的寫入
    2. 讀後寫:同一個客戶端,不論在哪裏讀寫,讀出後,寫進去的總是在剛才讀出的數的基礎上(可能比讀出的更加新的基礎上)
    3. 單調讀:同一個客戶端,不論在哪裏讀,每次讀出的都不舊於上次讀出的
    4. 單調寫:同一個客戶端,不論在哪裏寫,每次寫入的都是在上次寫入基礎上(可能比上次寫入的更加新的基礎上)
    5. 最終一致:同一個客戶端,不論在哪裏讀寫,做了若幹次讀寫、經過一段時間後,看到一個穩定不變的值

這兩個角度並不是一一對應的關系。比如,全局數據角度的“強一致性”,要比“客戶端角度”的寫後讀更強,因為可能有多個客戶端在並發運行。我們給一個商業應用設計架構的時候,更多是從客戶端視角來看問題的。

隔離級別,是研究事務之間數據的可見關系,討論的是“並行的寫入過程中、或者有的已寫入(提交)而有的尚未真正寫入(未提交)這個過程中”發生的事情;而一致性研究的是大家在都寫入後發生的事情,而忽略寫入過程、將其看做原子操作。隔離級別跟一致性是正交的關系。

分布式系統中的一致性,與數據庫的隔離級別