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