一致性模型是關於分散式系統中提供多少一致性的一組規定。在先前的貼文中,有關於 PACELC 理論中 Latency 和 Consistency 之間權衡的信息,以及根據這個權衡會提供多少一致性。
上一篇文章中討論的Replicache也是分散式系統的一種。據說 Replicache 遵循因果一致性。
來源
一致性,讓您始終以時間順序讀取值。寫入值後發生的任何讀取都將始終讀取該值。為了滿足這一點,需要兩個條件。有一個所有節點共享的全域時鐘,必須與其同步,並且必須立即執行寫入。
w(x)a:將值a寫入x,r(x)a:從x讀取值a
當節點 1 在時間 t 發生 w(x)a,且在 t delta(0.00000000000000001s)之後節點 2 出現 r(x) 時,節點 2 必須讀取值 a。
必須存在一個全域時鐘來串列化操作,以便操作不會在同一個 t 時間執行,並且寫入必須立即執行,以便必須在 t delta 時間讀取寫入的值。
但這實際上是不可能的。因此,嚴格一致性作為一種理論而存在。
如果在下列情況下遵守嚴格一致性
正確答案如下。
順序一致性的核心關鍵字是「全域排序」。所有寫入/讀取操作的行為必須像有一個統一的序列一樣。另外,每個進程(客戶端)執行的操作必須依照該順序執行。
下面的範例中,p3和p4可以讀取什麼值?
以下與嚴格一致性相同,因此也滿足順序一致性。
您可以在下方找到全域排序,因此順序一致性是正確的。
全域排序:w(x)a, r(x)a, w(x)b, r(x)b
但是,在下面的例子中,a 寫在 b 之前,但讀取的時間晚一些。在這種情況下,不滿足順序一致性。
因果關係是指因果關係。 「發生在 (→)」 理解這是一種關係很重要。
A → B 在下列情況下成立。
因果一致性是一種規則,其中因果關係在所有節點中都可見。
下面的案例是因果一致性。
這裡可以找到的唯一「發生之前」關係是 w(x)a → r(x)a 和 w(x)b → r(x)b,所有行程都滿足這些關係。 P3先讀b就可以了。這是因為兩次寫入運算是獨立的,所以w(x)a→w(x)b不存在因果關係。
以下內容並未建立因果一致性。原因是w(x)a→w(x)c存在因果關係,且P3中c先於a讀取。
最終 這是一條(最終)變得一致的規則。在某個時刻,當沒有寫入操作並且網路穩定時,所有節點最終將看到相同的值。這是一個非常有限的約定。
據說複製遵循因果一致性。這是一個稍微強一點的因果一致性,我們稍後再了解。
以上是一致性模型和複製緩存的詳細內容。更多資訊請關注PHP中文網其他相關文章!