架構設計:淺析分佈式系統中的緩存問題

在分佈式系統設計中,爲了提高系統的響應速度,爲了減輕數據庫服務器的訪問壓力,我們經常會對數據進行緩存處理。本文由淺入深,逐步講解緩存的設計,以及設計中遇到的問題。

初級緩存方案

初級緩存方案如下圖所示,之所以如此命名,是因爲大多數的系統中都是這樣使用緩存的,是一個基礎的緩存方案。大致流程如下:
1、業務系統從緩存中查詢數據
2、如果查詢到數據,則直接使用該數據
3、如果沒有查詢到數據,則需要業務系統從數據庫中查詢數據
4、如果查詢到數據,則將數據放入緩存中,同時使用該數據
5、如果沒有查詢到數據,則直接返回空
初級緩存方案

初級緩存方案存在的問題

在訪問量比較小的系統中,初級緩存方案是可以滿足緩存要求的,但是在大型的分佈式系統中,該方案存在問題的,如下:

緩存穿透問題

假設數據庫中有 N 個用戶U = {U1, U2,…Un},緩存穿透問題描述如下:
1、業務系統第一次從緩存中查詢 U1 用戶數據,此時緩存沒有該數據,接着從數據庫查詢,查詢到該數據,並將數據寫入緩存中,業務系統就可以使用該數據。
2、再次查詢 U1 用戶數據時,直接從緩存中獲取。
3、以此類推, {U2,…Un} 的數據查詢邏輯類似於 U1。
4、當業務系統要查詢 Un+1 的用戶數據時,此時緩存中沒有該用戶數據,於是從查詢數據庫,數據庫中也沒有該用戶數據,直接返回空。
5、問題來了,如果業務系統反覆查詢 Un+1 的用戶數據,此時大量的請求會穿透緩存,直接進行數據庫查詢,給數據庫帶來大量的訪問壓力,嚴重時可能會導致數據庫系統

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