1.緩存穿透
現(xiàn)象:查詢數(shù)據(jù)庫和緩存都沒有的數(shù)據(jù)
解決方式:①緩存空對(duì)象?? 代碼簡單,效果不好
????????????????? ②布隆過濾器?? 代碼負(fù)載似踱,效果好,布隆過濾器可以使用redis的bitmap實(shí)現(xiàn)
2.緩存擊穿
現(xiàn)象:數(shù)據(jù)庫有數(shù)據(jù)隅熙,緩存中沒有(這條數(shù)據(jù)沒人訪問過),或者數(shù)據(jù)剛好失效核芽,熱點(diǎn)數(shù)據(jù)的訪問
解決方式囚戚,加redis分布式鎖,只允許一個(gè)線程去讀數(shù)據(jù)庫轧简,然后將讀到的數(shù)據(jù)緩存到redis
3.緩存雪崩
現(xiàn)象:redis掛了驰坊,或者大部分?jǐn)?shù)據(jù)失效
規(guī)避雪崩:redis搭建高可用集群(cluster),錯(cuò)開數(shù)據(jù)過期時(shí)間
出現(xiàn)雪崩:降級(jí),熔斷哮独,限流拳芙,大部分?jǐn)?shù)據(jù)失效的可以使用redis分布式鎖
降級(jí)->是指在某些高并發(fā)場(chǎng)景下察藐,把某些非核心的業(yè)務(wù)統(tǒng)統(tǒng)往下調(diào)。
熔斷->熔斷機(jī)制是應(yīng)對(duì)雪崩效應(yīng)的一種微服務(wù)鏈路保護(hù)機(jī)制舟扎。在微服務(wù)中分飞,扇出的微服務(wù)不可用或者相應(yīng)時(shí)間過長的話會(huì)對(duì)服務(wù)降級(jí),進(jìn)而熔斷該服務(wù)節(jié)點(diǎn)浆竭,快速返回錯(cuò)誤信息浸须,釋放資源。而當(dāng)檢測(cè)到微服務(wù)響應(yīng)正常后邦泄,則恢復(fù)調(diào)用删窒。
熔斷設(shè)計(jì)
在熔斷的設(shè)計(jì)主要參考了hystrix的做法。其中最重要的是三個(gè)模塊:熔斷請(qǐng)求判斷算法顺囊、熔斷恢復(fù)機(jī)制肌索、熔斷報(bào)警
(1)熔斷請(qǐng)求判斷機(jī)制算法:使用無鎖循環(huán)隊(duì)列計(jì)數(shù),每個(gè)熔斷器默認(rèn)維護(hù)10個(gè)bucket特碳,每1秒一個(gè)bucket诚亚,每個(gè)blucket記錄請(qǐng)求的成功、失敗午乓、超時(shí)站宗、拒絕的狀態(tài),默認(rèn)錯(cuò)誤超過50%且10秒內(nèi)超過20個(gè)請(qǐng)求進(jìn)行中斷攔截益愈。
? ?(2)熔斷恢復(fù):對(duì)于被熔斷的請(qǐng)求梢灭,每隔5s允許部分請(qǐng)求通過,若請(qǐng)求都是健康的(RT<250ms)則對(duì)請(qǐng)求健康恢復(fù)蒸其。
(3)熔斷報(bào)警:對(duì)于熔斷的請(qǐng)求打日志敏释,異常請(qǐng)求超過某些設(shè)定則報(bào)警。
限流->限流指的是降低一定時(shí)間內(nèi)的并發(fā)訪問量? 一般兩種做法?一種是拉長時(shí)間摸袁,一種是降低訪問QPS
限流算法一般分為以下幾種:滑動(dòng)窗口钥顽,漏桶,令牌桶.