伺服器減壓,你不得不知的快取使用技巧-VeCloud

雲V小編發表於2020-10-26

為什麼使用快取

一般情況下,在訪問量達到一定規模後,資料庫的讀寫會成為一個瓶頸,我們會採用一些手段來對資料庫減壓,讓它可以正常的工作。可以考慮的手段包括讀寫分離、新增快取伺服器等,讀寫分離是為了儘量將對資料庫的讀寫動作分開,減少互相之間的影響;新增快取是為了讀庫的時候,減少直接讀取資料庫的動作,將查詢的結果存放在快取中,使用者的請求被隔絕在資料庫以外,從而減少資料庫的壓力。

伺服器減壓,你不得不知的快取使用技巧-VeCloud

這是一個理想狀況下快取工作的方式,但僅僅是理想

快取穿透

所謂快取穿透,是說使用者請求在快取系統中查詢結果時候失效,接下來去後端儲存系統中查詢資料,這個時候,如果資料不存在,而且這個訪問也比較大的情況下,大量的訪問會直接命中資料庫,這時候負責儲存的伺服器就悲劇了(如果左圖),所以我們就需要做一些努力,使得當資料不存在,往快取中寫入一個標誌抑或將空的查詢結果存入快取,減少這種無用的請求頻繁命中資料庫的情況(如右圖)

也可以將確認為空或者空的查詢結果儲存到單獨的快取區域中。

快取雪崩

這是另外一個問題,當系統使用的快取發生意外(網路失敗、當機、服務掛掉、快取集體丟失等等)之後,快取集體失效,導致短時間內請求都到達資料庫(資料儲存層),使得資料庫壓力山大進而crash掉。

為了預防這種情況,我們採用一下幾種方式:

1、我們採用多例項的方式來保證快取的高可用性,儘量避免當個別例項出現問題之後,引起全域性快取的問題。這類方案很多,比如memcache的一致性hash,redis的cluster機制,來避免單點的故障,這類資料可以搜尋一下關於redis或者memcache的高可用方案。

2、降級機制。這個方法在很多高可用設計中可能也有描述,簡單一點說就是我們將使用者與使用者之間,資源與資源之間進行隔離,當某一部分資料產生問題之後或者對某一部分的請求到達一個閥值之後,根據預設的機制,對請求只返回熱點資料,保證客戶端不會產生天窗或者說一直無法響應的問題。

3、加鎖。對於到達的請求,我們用鎖的機制,來儘量使它們排隊處理從而減少對資料庫產生併發。可以參考的鎖方案有兩種,一種是使用全域性鎖或者字串鎖等方案,是一個請求進行操作的時候,其他的請求處於等待狀態,當這個請求處理完畢之後進行下一步的業務處理,但是這樣的話如果一個請求掛掉,會對後面排隊的請求產生影響,而且請求的處理可能不會短時間處理完畢,會導致請求阻塞的時間過長等問題,第二種方案就是在進行操作的時候,其他請求進來的時候判斷是否有鎖存在,如果存在直接跳過處理,返回熱點資料。

需要說的是降級機制未必要放到圖中這個位置,也可以放在快取之前或其他的位置,它的主要目的是當出現問題時候隔離掉出現問題的資源不影響客戶端的內容或者使一部分使用者的請求無法到達真正的業務邏輯從而減少業務處理的壓力。

以上就是伺服器減壓,你不得不知的快取使用技巧的介紹。

如果你還有其他問題,歡迎進行諮詢探討,希望VeCloud的專業的解決方案,可以解決你目前遇到的問題。



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69984549/viewspace-2729711/,如需轉載,請註明出處,否則將追究法律責任。

相關文章