【Redis】18.缓存预热、缓存雪崩、缓存击穿、缓存穿透、性能指标监控等企业级解决方案
緩存預(yù)熱
在高請(qǐng)求之前,做好一系列措施,保證大量用戶數(shù)量點(diǎn)擊造成災(zāi)難。
緩存預(yù)熱解決方案
前置準(zhǔn)備工作:
例如:storm與kafka配合
準(zhǔn)備工作:
實(shí)施:
緩存預(yù)熱總結(jié):
緩存預(yù)熱就是系統(tǒng)啟動(dòng)前,提前將相關(guān)的緩存數(shù)據(jù)直接加載到緩存系統(tǒng)。避免在用戶請(qǐng)求的時(shí)候,先查詢數(shù)據(jù)庫(kù),然后再將數(shù)據(jù)緩存的問題!用戶直接查詢事先被預(yù)熱的緩存數(shù)據(jù)!
緩存雪崩
數(shù)據(jù)庫(kù)服務(wù)器崩潰(1)
問題排查
問題分析
- 短時(shí)間范圍內(nèi)
- 大量key集中過期
解決方案(道)
Nginx緩存+redis緩存+ehcache緩存
對(duì)數(shù)據(jù)庫(kù)的瓶頸排查:例如超時(shí)查詢、耗時(shí)較高事務(wù)等
監(jiān)控redis服務(wù)器性能指標(biāo)
1、CPU占用、CPU使用率
2、內(nèi)存容量
3、查詢平均響應(yīng)時(shí)間
4、線程數(shù)
短時(shí)間范圍內(nèi)習(xí)生一些客戶體驗(yàn),限制一部分請(qǐng)求訪問,降低應(yīng)用服務(wù)器壓力,待業(yè)務(wù)低速運(yùn)轉(zhuǎn)后再逐漸放開訪問
解決方案(術(shù))
根據(jù)業(yè)務(wù)數(shù)據(jù)有效期進(jìn)行分類錯(cuò)峰,A類90分鐘,B類80分鐘,C類70分鐘
過期時(shí)間使用固定形式+隨機(jī)值的形式,稀釋集中到期的key的數(shù)量
對(duì)即將過期數(shù)據(jù)做訪問量分析,確認(rèn)是否演示,配合訪問量統(tǒng)計(jì),做熱點(diǎn)數(shù)據(jù)的延時(shí)
總結(jié)
緩存雪崩式瞬間過期數(shù)量太大,導(dǎo)致對(duì)數(shù)據(jù)庫(kù)服務(wù)器造成壓力。如果能有效避免過期時(shí)間集中,可以有效解決雪崩現(xiàn)象的出現(xiàn)(約40%)。配合其他策略一起使用,并監(jiān)控服務(wù)器的運(yùn)行數(shù)據(jù),根據(jù)運(yùn)行巨鹿做快速調(diào)整
緩存擊穿
數(shù)據(jù)庫(kù)服務(wù)器崩潰(2)
問題排查
問題分析
- 單個(gè)key高熱數(shù)據(jù)
- key過期
解決方案(術(shù))
以電商為例,每個(gè)商家根據(jù)店鋪等級(jí),指定若干款主打商品,在購(gòu)物節(jié)期間,加大此類信息key的過期時(shí)常
注意:購(gòu)物節(jié)不僅僅指當(dāng)天,以及后續(xù)若干天,訪問峰值呈現(xiàn)逐漸降低趨勢(shì)
監(jiān)控訪問量,對(duì)自然流量激增的數(shù)據(jù)延長(zhǎng)過期時(shí)間或設(shè)置為永久性key
啟動(dòng)定時(shí)任務(wù),高峰期來臨之前,刷新數(shù)據(jù)有效期,保存不丟失
設(shè)置不同的失效時(shí)間,保障不會(huì)被同時(shí)淘汰就行
分布式鎖,防止被擊穿,但是要注意也是性能瓶頸,慎重!!!!!!!!
總結(jié):
緩存擊穿就是單個(gè)高熱數(shù)據(jù)過期的瞬間,數(shù)據(jù)訪問較大,未命中redis后,發(fā)起了大量對(duì)同一數(shù)據(jù)的數(shù)據(jù)庫(kù)訪問,導(dǎo)致對(duì)數(shù)據(jù)庫(kù)服務(wù)器造成壓力。應(yīng)對(duì)策略應(yīng)該在業(yè)務(wù)數(shù)據(jù)分析與預(yù)防方面進(jìn)行,配合運(yùn)行監(jiān)控測(cè)試與即時(shí)調(diào)整策略,畢竟單個(gè)key的過期監(jiān)控難度較高,配合雪崩處理策略即可
緩存穿透
數(shù)據(jù)庫(kù)服務(wù)器崩潰(3)
問題排查
問題分析
- 獲取的數(shù)據(jù)在數(shù)據(jù)庫(kù)中也不存在,數(shù)據(jù)庫(kù)查詢未得到對(duì)應(yīng)數(shù)據(jù)
- Redis獲取到null數(shù)據(jù)未進(jìn)行持久化,直接返回
- 下次此類數(shù)據(jù)到達(dá)重復(fù)上述過程
- 出現(xiàn)黑客攻擊服務(wù)器
解決方法(術(shù))
對(duì)查詢結(jié)果為null的數(shù)據(jù)進(jìn)行緩存(長(zhǎng)期使用,定期清理),設(shè)定短時(shí)限,例如30-60秒,最高五分鐘
提前預(yù)熱各種分類數(shù)據(jù)id對(duì)應(yīng)的bitmaps,id作為bitmaps的offset,相當(dāng)于設(shè)置了數(shù)據(jù)白名單。當(dāng)加載正常數(shù)據(jù)后放型,加載異常數(shù)據(jù)時(shí)直接攔截(效率偏低)
使用布隆過濾器(有關(guān)布隆過濾器的命中問題對(duì)當(dāng)前狀態(tài)可以忽略)
試試監(jiān)控redis命中率(業(yè)務(wù)正常范圍時(shí),通常回有一個(gè)波動(dòng)值)與null數(shù)據(jù)的占比
非活動(dòng)時(shí)間波動(dòng):通常檢測(cè)3-5倍,超過5倍納入重點(diǎn)排查對(duì)象
活動(dòng)時(shí)間波動(dòng):通常檢測(cè)10-50倍,超過50倍納入重點(diǎn)排查對(duì)象
根據(jù)倍數(shù)不同,啟動(dòng)不同的排查流程。然后使用黑名單進(jìn)行防控(運(yùn)營(yíng))
問題出現(xiàn)后,臨時(shí)啟動(dòng)防災(zāi)業(yè)務(wù)key,對(duì)key進(jìn)行業(yè)務(wù)層傳輸加密服務(wù),設(shè)定校驗(yàn)程序,過來的key校驗(yàn)
例如每天隨機(jī)分配60個(gè)加密串,挑選2-3個(gè),混淆到頁(yè)面數(shù)據(jù)id中,發(fā)現(xiàn)訪問key不滿足規(guī)則,駁回?cái)?shù)據(jù)訪問
總結(jié)
緩存穿透是訪問了不存在的數(shù)據(jù),跳過了合法數(shù)據(jù)的redis數(shù)據(jù)緩存階段,每次訪問數(shù)據(jù)庫(kù),導(dǎo)致對(duì)數(shù)據(jù)庫(kù)服務(wù)器造成壓力。通常此類數(shù)據(jù)的出現(xiàn)量是一個(gè)較低的值,當(dāng)出現(xiàn)此類情況以毒攻毒,并即時(shí)報(bào)警。應(yīng)對(duì)策略應(yīng)該在臨時(shí)預(yù)案防范方面多做文章
無論是黑名單還是白名單,都是對(duì)整體系統(tǒng)的壓力,警報(bào)解除后盡快移除
性能指標(biāo)監(jiān)控
性能指標(biāo)
-
性能指標(biāo):Performance
-
內(nèi)存指標(biāo):Memory
-
基本活動(dòng)指標(biāo):Basic activity
-
持久性指標(biāo):Persistence
-
錯(cuò)誤指標(biāo):Error
監(jiān)控方式
工具
- Cloud Insght Redis
- Prometheus
- Redis-stat
- Redis-faina
- RedisLive
- zabbix
命令 - benchmark
- redis cli
monitor
showlog
benchmark
monitor’
slowlog
總結(jié)
以上是生活随笔為你收集整理的【Redis】18.缓存预热、缓存雪崩、缓存击穿、缓存穿透、性能指标监控等企业级解决方案的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Redis】17.Cluster集群结
- 下一篇: SQL注入原理深度解析