伺服器減壓,你不得不知的快取使用技巧-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
- 你不得不知的Event LoopOOP
- efcore技巧貼-也許有你不知道的使用技巧
- 用好kafka,你不得不知的那些工具Kafka
- 關於React Hooks,你不得不知的事ReactHook
- 你不知道的 HTTPS 壓測HTTP
- 新手必看!macOS進階不得不知的實用小技巧Mac
- 都在使用的快取,騰訊大牛告訴你他們是如何使用快取的快取
- 學習 Java,你不得不知的泛型知識Java泛型
- 新年新技巧:你可能不知道的Python技巧Python
- 你不知道的前端SDK開發技巧前端
- 你可能不知道的字串分割技巧字串
- 不知道這4種快取模式,敢說懂快取嗎?快取模式
- 秀髮去無蹤之你不得不知道的DartDart
- HTML中你不得不知道的標籤及屬性HTML
- 你也許不知道的Vuejs – 使用ES6快樂的玩耍VueJS
- 使用nginx快取伺服器上的靜態檔案Nginx快取伺服器
- 你或許不知道Vue的這些小技巧Vue
- Vue你可能不知道的7個技巧Vue
- Python中你所不知道的“隱藏技巧”!Python
- 你不知道的 LeetCode 技巧(第二篇)LeetCode
- 你不知道的那些郵件營銷技巧
- 作為前端,你不得不知道的搜尋引擎優化前端優化
- 你不得不知道的 python 超級文獻搜尋工具Python
- 你不得不知道的MyBatis基礎知識之<resultMap>(4)MyBatis
- 提高工作效率!你不得不知的電腦快捷鍵!
- Python 速度比 Java 快,你不得不承認!PythonJava
- Welcome to YARP - 5.壓縮、快取快取
- 7個你可能不知道的蘋果Mac使用技巧 非常有用蘋果Mac
- Redis快取使用技巧和設計方案,有必要看看Redis快取
- 使用 ETag 和 Last-Modified 報頭減輕伺服器壓力(轉)AST伺服器
- 關於手機裡的IP地址,你不得不知道的“祕密”
- Vue你不得不知道的非同步更新機制和nextTick原理Vue非同步
- Vue.js 你不知道的一些小技巧Vue.js
- 你所不知道的 Chrome 控制檯除錯技巧Chrome除錯
- 10 個你可能不知道的 Android Studio 技巧Android
- 你可能不知道的 transition 技巧與細節