分布式系統(tǒng)通過副本控制協(xié)議,使得從系統(tǒng)外部讀取系統(tǒng)內部各個副本的數(shù)據(jù)在一定的約束條件下相同,稱之為副本一致性(consistency)。副本一致性是針對分布式系統(tǒng)而言的,不是針對某一個副本而言。
強一致性(strong consistency):任何時刻任何用戶或節(jié)點都可以讀到最近一次成功更新的副本數(shù)據(jù)。強一致性是程度最高的一致性要求,也是實踐中最難以實現(xiàn)的一致性。
單調一致性(monotonic consistency):任何時刻,任何用戶一旦讀到某個數(shù)據(jù)在某次更新后的值,這個用戶不會再讀到比這個值更舊的值。單調一致性是弱于強一致性卻非常實用的一種一致性級別。因為通常來說,用戶只關心從己方視角觀察到的一致性,而不會關注其他用戶的一致性情況。
會話一致性(session consistency):任何用戶在某一次會話內一旦讀到某個數(shù)據(jù)在某次更新后的值,這個用戶在這次會話過程中不會再讀到比這個值更舊的值。會話一致性通過引入會話的概念,在單調一致性的基礎上進一步放松約束,會話一致性只保證單個用戶單次會話內數(shù)據(jù)的單調修改,對于不同用戶間的一致性和同一用戶不同會話間的一致性沒有保障。實踐中有許多機制正好對應會話的概念,例如php 中的session 概念。
最終一致性(eventual consistency):最終一致性要求一旦更新成功,各個副本上的數(shù)據(jù)最終將達 到完全一致的狀態(tài),但達到完全一致狀態(tài)所需要的時間不能保障。對于最終一致性系統(tǒng)而言,一個用戶只要始終讀取某一個副本的數(shù)據(jù),則可以實現(xiàn)類似單調一致性的效果,但一旦用戶更換讀取的副本,則無法保障任何一致性。
弱一致性(week consistency):一旦某個更新成功,用戶無法在一個確定時間內讀到這次更新的值,且即使在某個副本上讀到了新的值,也不能保證在其他副本上可以讀到新的值。弱一致性系統(tǒng)一般很難在實際中使用,使用弱一致性系統(tǒng)需要應用方做更多的工作從而使得系統(tǒng)可用。