分布式理論 一致性

2021-10-08 13:50:13 字數 1480 閱讀 8499

什麼是分布式一致性

分布式資料一致性,指的是資料在多份副本中儲存時,各副本中的資料是一致的。

副本一致性

分布式系統當中,資料往往會有多個副本。如果是一台資料庫處理所有的資料請求,那麼通過acid四原則,基本

可以保證資料的一致性。而多個副本就需要保證資料會有多份拷貝。這就帶來了同步的問題,因為我們幾乎沒有辦

法保證可以同時更新所有機器當中的包括備份所有資料。 網路延遲,即使我在同一時間給所有機器傳送了更新資料

的請求,也不能保證這些請求被響應的時間保持一致存在時間差,就會存在某些機器之間的資料不一致的情況

總得來說,我們無法找到一種能夠滿足分布式系統所有系統屬性的分布式一致性解決方案。因此,如何既保證資料

的一致性,同時又不影響系統執行的效能,是每乙個分布式系統都需要重點考慮和權衡的。於是,一致性級別由此

誕生:一致性分類

讀寫一致性

使用者讀取自己寫入結果的一致性,保證使用者永遠能夠第一時間看到自己更新的內容。

比如我們發一條朋友圈,朋友圈的內容是不是第一時間被朋友看見不重要,但是一定要顯示在自己的列表上.

解決方案:

方案1:一種方案是對於一些特定的內容我們每次都去主庫讀取。 (問題主庫壓力大)

方案2:我們設定乙個更新時間視窗,在剛剛更新的一段時間內,我們預設都從主庫讀取,過了這個視窗之後,我們會挑選最近有過更新的從庫進行讀取

方案3:我們直接記錄使用者更新的時間戳,在請求的時候把這個時間戳帶上,凡是最後更新時間小於這個時間戳的從庫都,不予以響應。

單調讀一致性

本次讀到的資料不能比上次讀到的舊。

由於主從節點更新資料的時間不一致,導致使用者在不停地重新整理的時候,有時候能刷出來,再次重新整理之後會發現資料不見了,再重新整理又可能再刷出來,就好像遇見靈異事件一樣

解決方案:就是根據使用者id計算乙個hash值,再通過hash值對映到機器。同乙個使用者不管怎麼重新整理,都只會被對映到同一臺機器上。這樣就保證了不會讀到其他從庫的內容,帶來使用者體驗不好的影響

因果一致性

指的是:如果節點 a 在更新完某個資料後通知了節點 b,那麼節點 b 之後對該資料的訪問和修改都是基於 a 更新後的值。

於此同時,和節點 a 無因果關係的節點 c 的資料訪問則沒有這樣的限制。

最終一致性

最終一致性是所有分布式一致性模型當中最弱的。

可以認為是沒有任何優化的「最」弱一致性,它的意思是說,我不考慮所有的中間狀態的影響,只保證當沒有新的更新之後,經過一段時間之後,最終系統內所有副本的資料是正確的。

它最大程度上保證了系統的併發能力,也因此,在高併發的場景下,它也是使用最廣的一致性模型。

分布式一致性

分布式一致性是指在分布式環境中對某個副本資料進行更新操作時,必須確保其他副本也會更新,避免不同副本資料不一致。分布式系統乙個重要的問題時解決資料複製,一是為了增加系統的可用性防止單點故障,二是提高系統可用性,通過負載聚恆,使分布在不同位置的資料副本能夠提供服務。理想狀態下,當然希望分布式系統能夠實現...

分布式一致性

分布式系統的乙個重要問題是資料的複製。對資料的複製一般有兩個原因 資料複製的主要難題是保持各個副本的一致性。即在更新乙個副本時,必須確保同時更新其他的副本,否則資料的各個副本將不再相同。一致性模型實質上是程序和資料儲存之間的乙個約定。正常情況下,乙個資料項上執行讀操作時,它期待該操作返回的是該資料在...

分布式一致性方案

首先,先說一下。老外提出了乙個快取更新套路,名為 cache aside pattern 其中就指出 不是的。假設這會有兩個請求,乙個請求a做查詢操作,乙個請求b做更新操作,那麼會有如下情形產生 快取剛好失效 請求a查詢資料庫,得乙個舊值 請求b將新值寫入資料庫 請求b刪除快取 請求a將查到的舊值寫...