分布式系統中的一致性,與數據庫的隔離級別
阿新 • • 發佈:2018-03-26
多個 str 副本 one 基礎上 應用設計 OS 全局 哪裏
一致性,是描述多副本的同步特征(本文我們不討論分布式數據庫中,保持多個分片裏的數據在業務邏輯上一致性的情況,僅討論數據多副本的case)。一般從兩個角度來研究:
從全局數據角度來看:
- 強一致性: 無論誰、無論何時讀,得到的都是最新寫入後的結果
- 線性一致性: 如果把讀寫操作按照嚴格時間戳排序,每個進程的讀寫都遵循該排序的結果
- 順序一致性: 每個進程的讀寫操作順序都一致,但不保證按照時間戳順序
- 因果一致性: 兩個有因果關系(讀寫了同一數據)的進程之間,讀寫順序都一致,不保證按照時間戳順序,而且無關的進程讀寫順序可以不一樣
- 一般一致性: 就是傳統意義上的最終一致性,各副本上的數據最終是同一個值
從某個客戶端角度來看:
- 寫後讀:同一個客戶端,不論在哪裏讀寫,寫入後,讀出來的總是不舊於剛剛的寫入
- 讀後寫:同一個客戶端,不論在哪裏讀寫,讀出後,寫進去的總是在剛才讀出的數的基礎上(可能比讀出的更加新的基礎上)
- 單調讀:同一個客戶端,不論在哪裏讀,每次讀出的都不舊於上次讀出的
- 單調寫:同一個客戶端,不論在哪裏寫,每次寫入的都是在上次寫入基礎上(可能比上次寫入的更加新的基礎上)
- 最終一致:同一個客戶端,不論在哪裏讀寫,做了若幹次讀寫、經過一段時間後,看到一個穩定不變的值
這兩個角度並不是一一對應的關系。比如,全局數據角度的“強一致性”,要比“客戶端角度”的寫後讀更強,因為可能有多個客戶端在並發運行。我們給一個商業應用設計架構的時候,更多是從客戶端視角來看問題的。
隔離級別,是研究事務之間數據的可見關系,討論的是“並行的寫入過程中、或者有的已寫入(提交)而有的尚未真正寫入(未提交)這個過程中”發生的事情;而一致性研究的是大家在都寫入後發生的事情,而忽略寫入過程、將其看做原子操作。隔離級別跟一致性是正交的關系。
分布式系統中的一致性,與數據庫的隔離級別