天天看點

對分布式系統中各種一緻性的了解

1. 四種一緻性

  • Linearizability:跟時間相關,嚴格按照時間順序
  • Sequential:跟時間無關,但要求所有操作在所有程序上被看到的順序必須一緻相同
  • Casual:跟時間無關,但要求有因果關系的操作在所有程序上被看到的順序必須一緻
  • PRAM:跟時間無關,但要求同一個程序中的多個寫操作在所有程序上被看到的順序必須一緻,而不同程序上的寫操作可以不一緻。其忽略了讀操作所帶來的因果關系的要求

2. Linearizability和Sequential比較

對分布式系統中各種一緻性的了解
  1. 圖a是滿足Sequential Consistency(順序一緻性),但是不滿足Linearizability Consistency(線性一緻性)。原因在于,從全局時鐘的觀點來看,P2程序對變量X的讀操作在P1程序對變量X的寫操作之後,然而讀出來的卻是舊的資料。但是這個圖卻是滿足Sequential Consistency(順序一緻性)的,因為兩個程序P1,P2的一緻性并沒有沖突。從這兩個程序的角度來看,順序應該是這樣的:Write(y,2) , Read(x,0) , Write(x,4), Read(y,2),每個程序内部的讀寫順序都是合理的,但是顯然這個順序與全局時鐘下看到的順序并不一樣。
  2. 圖b滿足Linearizability Consistency(線性一緻性),因為每個讀操作都讀到了該變量的最新寫的結果,同時兩個程序看到的操作順序與全局時鐘的順序一樣,都是Write(y,2) , Read(x,4) , Write(x,4), Read(y,2)。
  3. 圖c不滿足Sequential Consistency(順序一緻性),當然也就不滿足Linearizability Consistency(線性一緻性)。因為從程序P1的角度看,它對變量Y的讀操作傳回了結果0。那麼就是說,P1程序的對變量Y的讀操作在P2程序對變量Y的寫操作之前,這意味着它認為的順序是這樣的:write(x,4) , Read(y,0) , Write(y,2), Read(x,0),顯然這個順序又是不能被滿足的,因為最後一個對變量x的讀操作讀出來也是舊的資料。是以這個順序是有沖突的,不滿足順序一緻性。
  4. 兩者的詳細
    對分布式系統中各種一緻性的了解

3. Casual、Sequential和PRAM比較

對分布式系統中各種一緻性的了解
  1. 圖a滿足 Sequential Consistency(順序一緻性),是以也滿足Casual Consistency(因果一緻性),因為從這個系統中的四個程序的角度看,它們都有相同的順序也有相同的因果關系。
  2. 圖b滿足Casual Consistency(因果一緻性)但是不滿足 Sequential Consistency(順序一緻性)。首先P1和P2的寫是沒有因果關系的,從P3看來,Read(x,7) 表示P2的 Write(x,7)一定在P3的Read(x,7)之前, P3的Read(x,2)表示P1的Write(x,2)一定在P3的Read(x,2)之前,又因為P3中Read(x,7) 在Read(x,2)之前(本地因果順序),是以,從P3角度看P1和P2的執行順序應該是:Write(x,7)、Write(x,2)、Write(x,4)。同樣的分析方法,可以得出從P4角度看P1和P2的執行順序應該是:Write(x,2)、Write(x,4)、Write(x,7)。由于P3和P4看到的執行順序不一緻,是以這不滿足Sequential Consistency(順序一緻性)要求。
  3. 圖c展示了比Casual Consistency(因果一緻性)更弱的一種一緻性模型: PRAM(Pipelined Random Access Memory)管道式存儲器,是Lipton和Sandberg于1988年在學術報告”PRAM: A scalable shared memory”中提出。如前所述, Sequential Consistency(順序一緻性)要求所有程序看到的程式執行順序必須一緻,而Casual Consistency(因果一緻性)降低了一緻性要求,它要求有因果關系的操作在所有程序上看到必須一緻,而PRAM Consistency進一步降低一緻性要求。先看PRAM定義:“…Writes done by a single process are received by all other processes in the order in which they were issued, but writes from different processes may be seen in a different order by different processes.” 意即在PRAM中,不同程序可以看到不同的執行順序,但在某一程序上的多個寫操作,在所有程序上看到的順序必須一緻,而不同程序上的寫操作在不同程序上看起來其執行順序則可以不一緻。圖c展示的例子而言,從P4角度看,無法對P1和P2中的操作進行排序,進而得到P4中的視圖,是以肯定不滿足Casual Consistency。但如果不考慮P2中讀操作帶來的因果關系,P4依次看到了P2中的Write(x,7)和P1中的Write(x,2)和Write(x,4),其滿足PRAM的要求

4. 參考文獻

[1]Linearizability versus Serializability

[2]分布式系統一緻性

[3]Consistency Models

繼續閱讀