教育行業(yè)A股IPO第一股(股票代碼 003032)

全國(guó)咨詢/投訴熱線:400-618-4000

Redis緩存預(yù)熱和緩存雪崩問(wèn)題怎樣解決?

更新時(shí)間:2023年07月25日11時(shí)27分 來(lái)源:傳智教育 瀏覽次數(shù):

緩存預(yù)熱

場(chǎng)景:“宕機(jī)”

服務(wù)器啟動(dòng)后迅速宕機(jī)

問(wèn)題排查:

1.請(qǐng)求數(shù)量較高,大量的請(qǐng)求過(guò)來(lái)之后都需要去從緩存中獲取數(shù)據(jù),但是緩存中又沒(méi)有,此時(shí)從數(shù)據(jù)庫(kù)中查找數(shù)據(jù)然后將數(shù)據(jù)再存入緩存,造成了短期內(nèi)對(duì)redis的高強(qiáng)度操作從而導(dǎo)致問(wèn)題

2.主從之間數(shù)據(jù)吞吐量較大,數(shù)據(jù)同步操作頻度較高

解決方案:

前置準(zhǔn)備工作:

1.日常例行統(tǒng)計(jì)數(shù)據(jù)訪問(wèn)記錄,統(tǒng)計(jì)訪問(wèn)頻度較高的熱點(diǎn)數(shù)據(jù)

2.利用LRU數(shù)據(jù)刪除策略,構(gòu)建數(shù)據(jù)留存隊(duì)列例如:storm與kafka配合

準(zhǔn)備工作:

1.將統(tǒng)計(jì)結(jié)果中的數(shù)據(jù)分類,根據(jù)級(jí)別,redis優(yōu)先加載級(jí)別較高的熱點(diǎn)數(shù)據(jù)

2.利用分布式多服務(wù)器同時(shí)進(jìn)行數(shù)據(jù)讀取,提速數(shù)據(jù)加載過(guò)程

3.熱點(diǎn)數(shù)據(jù)主從同時(shí)預(yù)熱

實(shí)施:

4.使用腳本程序固定觸發(fā)數(shù)據(jù)預(yù)熱過(guò)程

5.如果條件允許,使用了CDN(內(nèi)容分發(fā)網(wǎng)絡(luò)),效果會(huì)更好

總的來(lái)說(shuō):緩存預(yù)熱就是系統(tǒng)啟動(dòng)前,提前將相關(guān)的緩存數(shù)據(jù)直接加載到緩存系統(tǒng)。避免在用戶請(qǐng)求的時(shí)候,先查詢數(shù)據(jù)庫(kù),然后再將數(shù)據(jù)緩存的問(wèn)題!用戶直接查詢事先被預(yù)熱的緩存數(shù)據(jù)!

緩存雪崩

場(chǎng)景:數(shù)據(jù)庫(kù)服務(wù)器崩潰,一連串的場(chǎng)景會(huì)隨之兒來(lái)。

1.系統(tǒng)平穩(wěn)運(yùn)行過(guò)程中,忽然數(shù)據(jù)庫(kù)連接量激增

2.應(yīng)用服務(wù)器無(wú)法及時(shí)處理請(qǐng)求

3.大量408,500錯(cuò)誤頁(yè)面出現(xiàn)

4.客戶反復(fù)刷新頁(yè)面獲取數(shù)據(jù)

5.數(shù)據(jù)庫(kù)崩潰

6.應(yīng)用服務(wù)器崩潰

7.重啟應(yīng)用服務(wù)器無(wú)效

8.Redis服務(wù)器崩潰

9.Redis集群崩潰

10.重啟數(shù)據(jù)庫(kù)后再次被瞬間流量放倒

問(wèn)題排查:

1.在一個(gè)較短的時(shí)間內(nèi),緩存中較多的key集中過(guò)期

2.此周期內(nèi)請(qǐng)求訪問(wèn)過(guò)期的數(shù)據(jù),redis未命中,redis向數(shù)據(jù)庫(kù)獲取數(shù)據(jù)

3.數(shù)據(jù)庫(kù)同時(shí)接收到大量的請(qǐng)求無(wú)法及時(shí)處理

4.Redis大量請(qǐng)求被積壓,開(kāi)始出現(xiàn)超時(shí)現(xiàn)象

5.數(shù)據(jù)庫(kù)流量激增,數(shù)據(jù)庫(kù)崩潰

6.重啟后仍然面對(duì)緩存中無(wú)數(shù)據(jù)可用

7.Redis服務(wù)器資源被嚴(yán)重占用,Redis服務(wù)器崩潰

8.Redis集群呈現(xiàn)崩塌,集群瓦解

9.應(yīng)用服務(wù)器無(wú)法及時(shí)得到數(shù)據(jù)響應(yīng)請(qǐng)求,來(lái)自客戶端的請(qǐng)求數(shù)量越來(lái)越多,應(yīng)用服務(wù)器崩潰

10.應(yīng)用服務(wù)器,redis,數(shù)據(jù)庫(kù)全部重啟,效果不理想

總而言之就兩點(diǎn):短時(shí)間范圍內(nèi),大量key集中過(guò)期

解決方案

思路:

1.更多的頁(yè)面靜態(tài)化處理

2.構(gòu)建多級(jí)緩存架構(gòu):Nginx緩存+redis緩存+ehcache緩存

3.檢測(cè)Mysql嚴(yán)重耗時(shí)業(yè)務(wù)進(jìn)行優(yōu)化:對(duì)數(shù)據(jù)庫(kù)的瓶頸排查:例如超時(shí)查詢、耗時(shí)較高事務(wù)等

4.災(zāi)難預(yù)警機(jī)制:? 監(jiān)控redis服務(wù)器性能指標(biāo),CPU占用、CPU使用率,內(nèi)存容量,查詢平均響應(yīng)時(shí)間和線程數(shù)

5.限流、降級(jí)

短時(shí)間范圍內(nèi)犧牲一些客戶體驗(yàn),限制一部分請(qǐng)求訪問(wèn),降低應(yīng)用服務(wù)器壓力,待業(yè)務(wù)低速運(yùn)轉(zhuǎn)后再逐步放開(kāi)訪問(wèn)

落地實(shí)踐:

1.LRU與LFU切換

2.數(shù)據(jù)有效期策略調(diào)整?:根據(jù)業(yè)務(wù)數(shù)據(jù)有效期進(jìn)行分類錯(cuò)峰,A類90分鐘,B類80分鐘,C類70分鐘過(guò)期時(shí)間使用固定時(shí)間+隨機(jī)值的形式,稀釋集中到期的key的數(shù)量

3.超熱數(shù)據(jù)使用永久key

4.定期維護(hù)(自動(dòng)+人工):對(duì)即將過(guò)期數(shù)據(jù)做訪問(wèn)量分析,確認(rèn)是否延時(shí),配合訪問(wèn)量統(tǒng)計(jì),做熱點(diǎn)數(shù)據(jù)的延時(shí)

5.加鎖:慎用!

總的來(lái)說(shuō):緩存雪崩就是瞬間過(guò)期數(shù)據(jù)量太大,導(dǎo)致對(duì)數(shù)據(jù)庫(kù)服務(wù)器造成壓力。如能夠有效避免過(guò)期時(shí)間集中,可以有效解決雪崩現(xiàn)象的 出現(xiàn)(約40%),配合其他策略一起使用,并監(jiān)控服務(wù)器的運(yùn)行數(shù)據(jù),根據(jù)運(yùn)行記錄做快速調(diào)整。

0 分享到:
和我們?cè)诰€交談!