分散式系統中連貫性coherence和一致性consistency的區別?

banq發表於2020-09-29

連貫性coherence確保可以按順序看到寫入內容(帶有業務語義);一致性consistency確保可以在不同位置按有意義的順序檢視寫入的內容(無關乎上下文或語義)。
分散式演算法CRDT不保證連貫性coherence,而是保證一致性。
當CRDT用於文件編輯時,如果這些編輯是普通的人工編輯,則結果在句子級別上通常可能是連貫的,但在整個文件級別上卻往往不是。
舉一個簡單的例子,如果一個人在整個文件中更改了一個常用術語,而另一個人在編寫新內容時在同樣的地方卻還是使用了舊的術語,那麼即使所有使用者在語義上進行了一致的更改,該文件在語義上也是不連貫的。現在看到的是相同的最終一致的文件。
看這個例子:請看短語:“張三的牆壁上有一隻吉他”。A將其改寫為“張三的牆壁上有一隻吉他,這是他去年夏天釣魚時獲得的獎盃”,而B則單獨修改為“張三很喜歡音樂,把他最喜歡的吉他掛在了牆上”。CRDT忠實地應用了這兩種編輯,並將衝突解決為:“張三很喜歡音樂,把他最喜歡的吉他掛在了牆上,這是他去年夏天釣魚時獲得的獎盃。”
在幾乎任何系統中,語義資料都不能由任何可用的資料模型完全表示。任何自動解決衝突的模型,無論多麼智慧,都可能導致語義上無意義的合併。
CRDT非常非常酷。但是,人們常常認為他們可以代替手動稽核和解決衝突。其實不是。
 

相關文章