什么是一致性:
程序和系統(tǒng)間的一個契約洁墙,在遵循某些約束下,對數(shù)據(jù)的操作是可預(yù)測的
強一致性:強一致性可理解為在單個節(jié)點上事件順序和在多個節(jié)點上的事件順序完全一致蜡镶,而弱一致性則沒有這樣的要求
- 線性一致性沟娱,所有節(jié)點上事件發(fā)生的的順序全部一樣嗡官,且和全局時間上時間發(fā)生的順序一致
- 順序一致性恋日,所有節(jié)點上事件發(fā)生的的順序全部一樣,但是可能和全局時間上發(fā)生的順序不一致
弱一致性:對事件發(fā)送的順序只有部分假設(shè)
- 以客戶為中心的一致性模型
- 單調(diào)讀(monotonic-read consistentency):如果一個進程讀取某個數(shù)據(jù)項x的值嘹狞,那么該進程對x執(zhí)行的任何后續(xù)讀操作將總是讀取到底以此讀取的值或更新的值谚鄙,白話講,如果一個進程在T時刻看到x的值刁绒,那么他以后不會再讀取到叫老版本的值
- 單調(diào)寫(monotonic-write consistentency):一個進程對數(shù)據(jù)項x執(zhí)行的寫操作必須在該進程對x執(zhí)行任何后續(xù)寫操作前完成
- 讀寫一致性(read-your-write consistentency):一個進程對x執(zhí)行一次寫操作的結(jié)果總是會被該進程對x執(zhí)行的后續(xù)讀操作看見
- 寫讀一致性:(write-follow-reads consistentency):基于讀取到的最新值來寫
- 因果一致性(causal consistentency):所有進程進程必須以相同的順序看到潛在因果關(guān)系的寫操作闷营。不同機器上可以看到不同順序的寫操作
- 最終一致性:經(jīng)過一段時間數(shù)據(jù)肯定都會趨于一致
一致性由強到弱:
強一致性>線性一致性>因果一致性>最終一致性
系統(tǒng)角度一致性和客戶角度一致性關(guān)系
單調(diào)寫一致性 | 讀寫一致性 | 寫讀一致性 | 單調(diào)讀一致性 | |
---|---|---|---|---|
強一致性 | √ | √ | √ | √ |
線性一致性 | √ | √ | √ | √ |
因果一致性 | √ | × | × | √ |
最終一致性 | × | × | × | × |