伺服器減壓,你不得不知的快取使用技巧-VeCloud
為什麼使用快取
一般情況下,在訪問量達到一定規模後,資料庫的讀寫會成為一個瓶頸,我們會採用一些手段來對資料庫減壓,讓它可以正常的工作。可以考慮的手段包括讀寫分離、新增快取伺服器等,讀寫分離是為了儘量將對資料庫的讀寫動作分開,減少互相之間的影響;新增快取是為了讀庫的時候,減少直接讀取資料庫的動作,將查詢的結果存放在快取中,使用者的請求被隔絕在資料庫以外,從而減少資料庫的壓力。
這是一個理想狀況下快取工作的方式,但僅僅是理想
快取穿透
所謂快取穿透,是說使用者請求在快取系統中查詢結果時候失效,接下來去後端儲存系統中查詢資料,這個時候,如果資料不存在,而且這個訪問也比較大的情況下,大量的訪問會直接命中資料庫,這時候負責儲存的伺服器就悲劇了(如果左圖),所以我們就需要做一些努力,使得當資料不存在,往快取中寫入一個標誌抑或將空的查詢結果存入快取,減少這種無用的請求頻繁命中資料庫的情況(如右圖)
也可以將確認為空或者空的查詢結果儲存到單獨的快取區域中。
快取雪崩
這是另外一個問題,當系統使用的快取發生意外(網路失敗、當機、服務掛掉、快取集體丟失等等)之後,快取集體失效,導致短時間內請求都到達資料庫(資料儲存層),使得資料庫壓力山大進而crash掉。
為了預防這種情況,我們採用一下幾種方式:
1、我們採用多例項的方式來保證快取的高可用性,儘量避免當個別例項出現問題之後,引起全域性快取的問題。這類方案很多,比如memcache的一致性hash,redis的cluster機制,來避免單點的故障,這類資料可以搜尋一下關於redis或者memcache的高可用方案。
2、降級機制。這個方法在很多高可用設計中可能也有描述,簡單一點說就是我們將使用者與使用者之間,資源與資源之間進行隔離,當某一部分資料產生問題之後或者對某一部分的請求到達一個閥值之後,根據預設的機制,對請求只返回熱點資料,保證客戶端不會產生天窗或者說一直無法響應的問題。
3、加鎖。對於到達的請求,我們用鎖的機制,來儘量使它們排隊處理從而減少對資料庫產生併發。可以參考的鎖方案有兩種,一種是使用全域性鎖或者字串鎖等方案,是一個請求進行操作的時候,其他的請求處於等待狀態,當這個請求處理完畢之後進行下一步的業務處理,但是這樣的話如果一個請求掛掉,會對後面排隊的請求產生影響,而且請求的處理可能不會短時間處理完畢,會導致請求阻塞的時間過長等問題,第二種方案就是在進行操作的時候,其他請求進來的時候判斷是否有鎖存在,如果存在直接跳過處理,返回熱點資料。
需要說的是降級機制未必要放到圖中這個位置,也可以放在快取之前或其他的位置,它的主要目的是當出現問題時候隔離掉出現問題的資源不影響客戶端的內容或者使一部分使用者的請求無法到達真正的業務邏輯從而減少業務處理的壓力。
以上就是伺服器減壓,你不得不知的快取使用技巧的介紹。
如果你還有其他問題,歡迎進行諮詢探討,希望VeCloud的專業的解決方案,可以解決你目前遇到的問題。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69984549/viewspace-2729711/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 你不知道的 PHP 快取技巧PHP快取
- Google開發者大會:你不得不知的Tensorflow小技巧Go
- PL/SQL Developer 不得不知的技巧SQLDeveloper
- 你不知道的Retrofit快取庫RxCache快取
- 你不得不知的Event LoopOOP
- 用好kafka,你不得不知的那些工具Kafka
- 關於React Hooks,你不得不知的事ReactHook
- 新手必看!macOS進階不得不知的實用小技巧Mac
- 你不得不知道的 MySQL 優化原理MySql優化
- 都在使用的快取,騰訊大牛告訴你他們是如何使用快取的快取
- 你不知道的 HTTPS 壓測HTTP
- Django使用redis快取伺服器DjangoRedis快取伺服器
- 你所不知道的10個“Chrome開發者工具”使用技巧Chrome
- 學習 Java,你不得不知的泛型知識Java泛型
- 你所不知的SEO高階策略技巧
- 關於javascript你不得不知道歷史JavaScript
- 你不知道的前端SDK開發技巧前端
- 你可能不知道的字串分割技巧字串
- 你不可不知的 HTML 優化技巧HTML優化
- 你不可不知的HTML優化技巧HTML優化
- 不知道這4種快取模式,敢說懂快取嗎?快取模式
- 使用Django-cachalot來快取你的queryDjango快取
- 伺服器快取伺服器快取
- 秀髮去無蹤之你不得不知道的DartDart
- HTML中你不得不知道的標籤及屬性HTML
- 關於微服務架構,你不得不知道的事微服務架構
- 新年新技巧:你可能不知道的Python技巧Python
- Vue你可能不知道的7個技巧Vue
- 你不知道的那些郵件營銷技巧
- 你或許不知道Vue的這些小技巧Vue
- AndroidStudio你不知道的除錯技巧Android除錯
- 7個你可能不知道的蘋果Mac使用技巧 非常有用蘋果Mac
- 減輕伺服器負載的建議和技巧伺服器負載
- 你不得不知道的MyBatis基礎知識之<resultMap>(4)MyBatis
- 提高工作效率!你不得不知的電腦快捷鍵!
- 作為前端,你不得不知道的搜尋引擎優化前端優化
- 我不知道你知不知道我知道的偽元素小技巧
- 使用nginx快取伺服器上的靜態檔案Nginx快取伺服器