分布式緩存設計

聞數起舞 發佈 2020-06-06T07:37:51+00:00

Memcache是最流行的緩存,由Google Cloud在其平台即服務中使用。 本文在這裡,我認為它與分布式緩存有關。

緩存就像短期內存一樣。 它通常比原始數據源更快。 您知道從RAM訪問數據總是比從硬碟驅動器訪問數據更快。 緩存意味著將經常訪問的數據保存在內存中(短期內存)。

1.什麼是分布式緩存?

分布式緩存是一種緩存,其數據分布在(a)群集,(b)多個群集或(c)遍布全球的多個數據中心的多個節點上。

為什麼我們需要分布式緩存系統? 由於具有按需擴展規模和高度可用的潛力,因此目前主要用於當今行業。 可伸縮性,高可用性,容錯對於當今在線運行的大規模服務至關重要。 企業無法承受其服務離線的負擔。 考慮一下衛生服務,股市,軍事。 他們沒有下降的餘地。 它們分布在多個節點上,具有相當可觀的冗餘度。 GoogleCloud使用Memcache在其公共雲平台上緩存數據

2.分布式緩存與傳統緩存有何不同?

分布式緩存的設計具有內在的可擴展性,它們的設計方式使其可以在計算,存儲或其他任何操作中即時增強其功能。

但是傳統的緩存託管在幾個實例上,並且有一定的局限性。 難以即時擴展。 與分布式緩存設計相比,它的可用性和容錯性不是很多。

查看上圖(分布式緩存),該圖清楚地顯示了雲計算如何使用分布式系統擴展和保持可用性。

3.分布式緩存的用例

分布式緩存的用例是什麼? ,讓我們來看看一些流行的緩存用例

1.資料庫緩存緩存可以放置在Application Server和資料庫之間。 從緩存而不是主數據存儲區訪問數據的地方,該數據存儲區經常訪問內存中的數據以減少延遲和不必要的負載。 實現緩存時,沒有資料庫瓶頸。

2.用戶會話的存儲用戶會話通常存儲在緩存中,以避免萬一任何實例出現故障而丟失用戶信息。如果任何實例發生故障,則新實例啟動,從緩存中讀取用戶數據並繼續會話,而用戶不會注意到任何問題。

3.內存中數據查找如果您擁有移動/ Web應用程式前端,則可能需要根據用例來緩存一些信息,例如用戶配置文件,一些歷史數據或一些API響應。 緩存將有助於存儲此類數據。

3.分布式緩存的工作方式

讓我們看看分布式緩存在後台如何工作?

底層的分布式緩存是分布式哈希表,它負責將對象值映射到分布在多個節點上的鍵。

只要高速緩存服務處於聯機狀態,哈希表就會連續管理節點的添加,刪除,故障。 分布式哈希表最初用於對等系統。

說到設計,根據LRU(最近最少使用)策略緩存逐出數據。 在後續步驟中將看到驅逐政策。 基本上,它使用雙鍊表來管理數據指針,這是數據結構中最重要的部分。 請閱讀LRU實施以獲取更多詳細信息。

4.緩存失效

確實需要進行一些維護,以使高速緩存與真相源(例如資料庫)保持一致。 如果資料庫中有任何數據被修改,則它們也應在緩存中無效或被修改; 如果不是這樣,則可能導致應用程式行為不一致。可以通過以下方式使緩存無效。

直讀→數據同時寫入高速緩存和相應的資料庫。 此方案可維護高速緩存和主存儲之間的完整數據一致性。 即使採用這種方案,也可以確保在崩潰,電源故障或任何其他系統中斷的情況下,不會丟失任何東西。

→此方案的缺點是較高的延遲,因為每個寫入操作都會執行兩次,然後再將成功返回給客戶端

直寫式→在此策略中,每個信息直接繞過高速緩存直接寫入資料庫。

→如果對最近寫入的數據進行讀取請求會導致"高速緩存未命中",然後必須在後端存儲上發出讀取請求,則該方案的缺點是較高的延遲。

回寫→數據僅寫入高速緩存,並且立即向客戶端確認完成。 在指定的時間間隔後或在某些條件下完成對永久存儲器的寫入。 這導致寫入密集型應用程式的低延遲和高吞吐量。

→但是,由於崩潰或其他不利事件,此速度會帶來數據丟失的風險,因為寫入數據的唯一副本位於緩存中。

5.緩存逐出策略

如果我們的緩存已滿怎麼辦? 因此,緩存逐出算法是一種確定何時緩存已滿時要退出哪個元素的方法。以下是一些最常見的緩存逐出策略:

· 先進先出(FIFO):高速緩存逐出最先訪問的第一個塊,而無需考慮之前被訪問的頻率或次數。

· 後進先出(LIFO):高速緩存逐出最先訪問的塊,而無需考慮之前被訪問的頻率或次數。

· 最近最少使用(LRU):首先丟棄最近最少使用的物品。我更喜歡僅使用LRU。

· 最近使用(MRU):與LRU相比,首先丟棄最近使用的物品。

· 最少使用次數(LFU):計算所需物品的使用頻率。 最不常用的那些將首先被丟棄。

6.一些流行的分布式緩存

行業中流行的分布式緩存是Ehcache,Memcache,Redis,Riak和Hazelcast。

Memcache是最流行的緩存,由Google Cloud在其平台即服務中使用。

此外,Redis是一個開源的內存中分布式系統,它還支持其他數據結構,例如分布式列表,隊列,字符串,集合,排序集合。 除了緩存之外,Redis還經常被視為NoSQL數據存儲。

感謝大夥們!。 本文在這裡,我認為它與分布式緩存有關。 如果您有任何疑問,請在評論中讓我知道。

(本文翻譯自RAJESH KUMAR的文章《Distributed Cache Design : 》,參考:https://medium.com/rtkal/distributed-cache-design-348cbe334df1)

關鍵字: