2017-08-16 64 views
0

我對「一致性」一詞感到困惑。它已被用於許多不同的環境中,即分佈式系統,內存模型和數據庫。 People/Wikipedia在同一頁面中總結了所有不同的一致性模型。但我並不認爲他們習慣於描述同樣的問題。例如,序列/放鬆/弱/嚴格/處理器一致性等在內存模型中是有意義的(由現代架構&現代語言編譯器提供)。另一方面,順序/最終一致性在分佈式系統中有意義(當您嘗試構建複製狀態機時)。像共識算法一樣的Paxos/raft可以幫助您構建SC模型,DynamoDB是EC模型的一個示例。不同環境下的一致性(分佈式系統vs內存模型vs數據庫)

但是,當您構建複製日誌以及談論內存模型中的最終一致性時,談論發佈/弱一致性是沒有意義的。

就傳統的關係數據庫而言,它使我更加困惑。由於在ACID模型中,一致性似乎意味着不同的概念。它只需要在事務之後,數據庫應該處於有效/一致的狀態。但是,ACID的隔離部分聽起來更像一致性模型,特別是順序一致性模型。

我在這裏誤解了什麼嗎?或電腦的人只是喜歡濫用術語和混亂的人...

如果我錯了,請糾正我,即使它只是非常小的細節。我真的很想正確理解這些概念。謝謝你:)

+0

不要混淆Dynamo和DynamoDB,前者是EC模型的示例(請參閱「Dynamo:Amazon的高可用性關鍵值存儲」論文),後者是使用類似名稱的SC解決方案。 – rystsov

+0

@rystsov感謝您指出 –

回答

0

在所有三個階段中,一致性實際上歸結爲內存可見性。

處理器和編譯器只能對內存重新排序,以至於內存模型規定它必須保證內存在程序中定義的點處對全局可見。

在分佈式系統中,每次讀取都應該接收到最近的寫入才能被認爲是一致的。即寫入必須對隨後的讀取可見。

數據庫必須能夠在要執行的操作之前查看所有的內存效果以進行有效的狀態轉換。