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