架構設計(三):引入緩存

架構設計(三):引入緩存

作者:Grey

原文地址:

博客園:架構設計(三):引入緩存

CSDN:架構設計(三):引入緩存

緩存是一個臨時存儲區域,如果請求的數據獲取代價比較高或者數據的訪問頻率比較高,則會把響應結果存儲在內存中,以便更快速地提供後續請求。

每次加載一個新的網頁,都要執行一次或多次數據庫調用來獲取數據。反覆調用數據庫會大大影響應用程序的性能。緩存可以緩解這個問題,架構如下

img

在收到一個請求後,網絡服務器首先檢查緩存是否有可用的響應。如果有它有,它就把數據發回給客戶。如果沒有,它就查詢數據庫,將響應存儲在緩存,並將其發回給客戶端。這種緩存策略被稱爲"讀過式緩存"。根據數據的類型、大小和訪問模式,還有其他的緩存策略。與緩存的交互也很簡單,因爲大多數緩存中間件都提供了適用於普通編程語言的 API。

緩存層是一個臨時數據存儲層,比數據庫快得多。有一個獨立的緩存層的好處有如下幾點

  1. 更好的系統性能,減少數據庫工作負載。

  2. 緩存層也可以做獨立的擴展(集羣)。

使用緩存的考慮因素如下

  • 當要訪問的數據經常被讀取但不經常被修改時,可以考慮使用緩存,因爲緩存的數據存儲在易失性內存中,所以緩存服務器並不是持久保存數據的理想選擇。如果緩存服務器重新啓動,內存中的所有數據都會丟失。因此,重要的數據應該保存在持久性數據存儲中。

  • 過期策略。爲緩存設置過期策略是緩存使用的最佳實踐。一旦緩存的數據過期,它就會從緩存中刪除。當沒有過期策略時,緩存的數據將被永久地保存在內存中。建議不要把過期日期定得太短,因爲這將導致系統過於頻繁地從數據庫中重新加載數據;同時,建議不要使過期日期太長,因爲數據會變得陳舊。

  • 緩存一致性。這就涉及到保持數據存儲和緩存的數據同步。因爲對數據存儲和緩存的數據修改操作不在一個事務中。當跨區域擴展時,保持數據存儲和緩存之間的一致性是一個挑戰。

  • 單點故障預防。如果使用單個緩存服務器,這就可能會導致潛在的單點故障,單點故障(SPOF)是一個系統的一部分,如果它發生故障,將使整個系統停止工作,因此,建議在不同的數據中心設置多個緩存服務器以避免SPOF。可以參考架構設計(一):從單服務器模式到負載均衡設計,另一個推薦的方法是按一定的百分比超額配置所需的內存,這可以在內存使用量增加時提供一個緩衝。

  • 驅逐策略。一旦緩存已滿,任何向緩存添加項目的請求都可能導致現有項目被刪除。這就是所謂的緩衝區驅逐。最小最近使用(LRU)是最流行的緩衝區驅逐策略。還有其他的驅逐策略,如最不常使用(LFU)或先進先出(FIFO)。

參考資料

System Design Interview

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章