1婿失、緩存預(yù)熱
(1)問題排查
- 請求數(shù)量較高
- 主從之間數(shù)據(jù)吞吐量較大邀桑,數(shù)據(jù)同步操作頻度較高
(2)解決方案
緩存預(yù)熱就是在系統(tǒng)啟動時,提前將相關(guān)的緩存數(shù)據(jù)加載到 Redis 中,減輕應(yīng)用直連數(shù)據(jù)庫對數(shù)據(jù)庫造成的壓力摧阅。
預(yù)熱過程:
1帅掘、日常運營中委煤,統(tǒng)計分析出熱點數(shù)據(jù);
2修档、構(gòu)建數(shù)據(jù)留存隊列碧绞;
3、將統(tǒng)計結(jié)果中的數(shù)據(jù)吱窝,預(yù)先加載到 Redis 中進(jìn)行預(yù)熱讥邻;
4、提速數(shù)據(jù)加速過程院峡;
5兴使、使用腳本固化預(yù)熱過程;
2照激、緩存雪崩
緩存雪崩就是瞬間過期數(shù)據(jù)量過大发魄,導(dǎo)致對數(shù)據(jù)庫造成壓力
(1)場景:
1、在較短的時間內(nèi)俩垃,大量的 Key 同時過期欠母;
2欢策、此時大量的請求訪問過期數(shù)據(jù),Redis 未命中赏淌,Redis 向數(shù)據(jù)庫進(jìn)行請求查詢踩寇;
3、數(shù)據(jù)庫接收到大量的 Redis 請求六水,無法及時處理俺孙,造成 Redis 請求積壓,Redis 開始出現(xiàn)超時問題掷贾;
4睛榄、數(shù)據(jù)庫連接激增,導(dǎo)致數(shù)據(jù)庫崩潰想帅;
5场靴、Redis 服務(wù)器資源被嚴(yán)重占用,導(dǎo)致 redis 服務(wù)器崩潰港准;
6旨剥、此時客戶端請求持續(xù)增加,應(yīng)用服務(wù)器崩潰浅缸;
7轨帜、應(yīng)用服務(wù)器,Redis衩椒,數(shù)據(jù)庫全部重啟蚌父,重啟之后緩存中沒有數(shù)據(jù),面臨再次崩潰的局面
(2)解決方案
- 緩存策略切換:LRU 與 LFU 切換毛萌;
- 數(shù)據(jù)有效期策略調(diào)整:
- 根據(jù)業(yè)務(wù)數(shù)據(jù)有效期進(jìn)行業(yè)務(wù)錯峰苟弛;
- 過期數(shù)據(jù)使用隨機數(shù)過期,避免過期 Key 集中釋放阁将;
- 超熱 數(shù)據(jù)使用永久KEY膏秫;
- 適當(dāng)?shù)倪M(jìn)行數(shù)據(jù)加鎖
- 更多的頁面靜態(tài)化處理;
- 構(gòu)建多級緩存結(jié)構(gòu)冀痕,比如 Nginx 緩存荔睹,Redis 緩存狸演,應(yīng)用緩存等言蛇;
- 對數(shù)據(jù)庫查詢進(jìn)行優(yōu)化;
- 構(gòu)建災(zāi)難預(yù)警進(jìn)制:監(jiān)控 Redis 服務(wù)CPU宵距,內(nèi)存腊尚,查詢響應(yīng)時間,線程數(shù)等
- 業(yè)務(wù)限流满哪、降級:短時間內(nèi)犧牲一些用戶體驗婿斥,限制一部分用戶的請求劝篷,降低請求壓力,待數(shù)據(jù)民宿、性能恢復(fù)之后逐步放開業(yè)務(wù)娇妓;
3、緩存擊穿
緩存擊穿就是單個超熱數(shù)據(jù)過期的瞬間活鹰,Redis 無法命中哈恰,大量的請求放行給了數(shù)據(jù)庫,同一時間大量的數(shù)據(jù)庫請求志群,造成數(shù)據(jù)崩潰
(1)場景
Redis 中的某個超熱 Key 過期了着绷,該Key 無法命中,放行給了數(shù)據(jù)庫查詢锌云,造成數(shù)據(jù)庫壓力激增荠医;
(2)解決方案:
- 預(yù)先設(shè)定:預(yù)先分析,對超熱的 Key 進(jìn)行延長過期時間的處理桑涎;
- 實時監(jiān)控:實時監(jiān)控業(yè)務(wù)流量彬向,對大流量業(yè)務(wù)進(jìn)行臨時調(diào)整;如延長數(shù)據(jù)過期時間等
- 二級緩存:設(shè)置不同失效時間的數(shù)據(jù)石洗,保證數(shù)據(jù)不被同時淘汰幢泼;
- 加鎖:添加分布式鎖,防止被擊穿讲衫;
4缕棵、緩存穿透
Redis 中緩存命中率降低,Redis 服務(wù)正常涉兽,類似惡意繞開緩存招驴。
(1)現(xiàn)象
1、在系統(tǒng)平穩(wěn)運行的過程枷畏,應(yīng)用服務(wù)器流量增大别厘;
2、Redis 服務(wù)中心的緩存命中率隨著時間逐步降低拥诡;但 Redis 內(nèi)存穩(wěn)定触趴,CPU占用激增;
3渴肉、數(shù)據(jù)庫服務(wù)器壓力激增冗懦,導(dǎo)致數(shù)據(jù)庫服務(wù)崩潰;
(2)場景
1仇祭、獲取的數(shù)據(jù)在數(shù)據(jù)庫中不存在披蕉,數(shù)據(jù)庫查不到,無法進(jìn)行緩存,每次請求都是直連數(shù)據(jù)庫没讲;
2眯娱、出現(xiàn)類似黑客攻擊場景,非正常的業(yè)務(wù)訪問爬凑;
(3)解決方案
- 白名單策略
- 提前預(yù)熱各種分類數(shù)據(jù)對應(yīng)的 bitmaps,id作為 bitmaps的 offset,相當(dāng)于設(shè)置了數(shù)據(jù)白名單徙缴。當(dāng)加載正常數(shù)據(jù)時,放行,加載異常數(shù)據(jù)時直接攔截(效率偏低)
- 使用布隆過濾器(有關(guān)布隆過濾器的命中問題對當(dāng)前狀況可以忽略;
- 實施監(jiān)控實時監(jiān)控
- redist命中率(業(yè)務(wù)正常范國時,通常會有一個波動值)與null數(shù)據(jù)的占比
- 非活動時段波動:通常檢測3-5倍,超過5倍納入重點排查對象
- 活動時段波動:通常檢測10-50倍,超過50倍納入重點排查對象
- Key 加密
- 問題出現(xiàn)后,臨時啟動防災(zāi)業(yè)務(wù)key,對key進(jìn)行業(yè)務(wù)層傳輸加密服務(wù),設(shè)定校驗程序,過來的key校驗
- 例如每天隨機分配60個加密串,挑選2到3個,混淆到頁面數(shù)據(jù)中,發(fā)現(xiàn)訪問key不滿足規(guī)則,駁回數(shù)據(jù)訪問嘁信;