序言
在微服務(wù)時(shí)代中,有一個(gè)鳳凰架構(gòu)的概念。鳳凰特點(diǎn)是可重生,那么對于微服務(wù)而言,各部分服務(wù)就相當(dāng)于鳳凰身上的部位,我們在開發(fā)過程中針對于某部分服務(wù)不滿意需要進(jìn)行升級的時(shí)候必須保證升級前后整體服務(wù)的正常運(yùn)轉(zhuǎn)。也就是我們將鳳凰從毛翅膀變?yōu)闉殇撹F翅膀,鳳凰還是活的并且飛行功能一樣。這就類似社交網(wǎng)絡(luò)電源中扎克伯格升級服務(wù)器時(shí)沒通知愛得華多,在愛德華多凍結(jié)賬戶之后扎克伯格生氣的保證Facebook永不宕機(jī)一樣——這就引入了熔斷限流的概念
一、服務(wù)控制相關(guān)概念
1.1)服務(wù)雪崩

左圖比如服務(wù)C假死,進(jìn)程還在就是卡住沒反應(yīng)導(dǎo)致上游都卡死;右圖比如Service D負(fù)載壓到80%反應(yīng)慢導(dǎo)致多條鏈路上服務(wù)都卡死
1.2)服務(wù)限流

1.3)服務(wù)熔斷

保險(xiǎn)絲,在Open狀態(tài)自旋定時(shí)到HalfOpen檢測是否正常
1.4)服務(wù)降級

1.5)熔斷降級的幾種常見方案

二、常見的四種限流算法
2.1)計(jì)數(shù)器算法

第二張圖假設(shè)(0~2秒)(4~6秒)沒有請求,那么2秒進(jìn)入300個(gè)請求也能滿足指定周期內(nèi)不觸發(fā)熔斷器,所以計(jì)數(shù)器算法的指定周期無法解決臨界問題。優(yōu)點(diǎn)是實(shí)現(xiàn)簡單可以應(yīng)對勻速請求
2.2)滑動(dòng)窗口算法

滑動(dòng)窗口可以解決(2~3秒)和(3~4秒)分別進(jìn)入150個(gè)請求的問題,當(dāng)窗口滑動(dòng)到(1~4秒)的時(shí)候,會(huì)對(3~4秒)的150個(gè)請求進(jìn)行拒絕,(3~4秒)被拒絕所以歸零,之后(2~5秒)和(3~6秒)的滑動(dòng)窗口都不會(huì)觸發(fā)限流
2.3)令牌桶限流算法

以時(shí)間為X軸,請求量為Y軸;網(wǎng)絡(luò)流量整形指不會(huì)超過Y軸的某個(gè)點(diǎn);速率限制指不超過斜率的某個(gè)點(diǎn)
Ps:限制發(fā)令牌速度不限制取令牌速度
2.4)漏桶限流算法

平滑網(wǎng)絡(luò)上的突發(fā)流量指突然多出十幾個(gè)水龍頭也不怕,桶滿了就丟
Ps:限制了Consumer的速度,請求打到Consumer始終以恒定速率處理可防止Consumer崩潰
三、Sentinel簡介

官網(wǎng)
3.1)Sentinel概述

3.2)Sentinel的主要特征

綠色為核心庫
3.3)Sentinel的開源生態(tài)

3.4)部署Sentinel Dashboard

用戶優(yōu)先配置在啟動(dòng)之前指定參數(shù)可以改變properties文件中的配置



四、Sentinel實(shí)戰(zhàn)
4.1)使用SphU或SphO進(jìn)行限流

唯一區(qū)別是SphU直接拋異常,而SphO返回ture/false



setStrategy一般都是直接拒絕,關(guān)聯(lián)就是相關(guān)聯(lián)的請求也拒絕,鏈路是同一執(zhí)行鏈的拒絕

基本和Sentinel Board界面一致——WARN_UP是控制斜率,RATE_LIMIT控制Y軸最大值

SphO



有執(zhí)行業(yè)務(wù)方法的,也有執(zhí)行限流的

查看執(zhí)行結(jié)果

Windows日志地址:C:\Users\Administrator\logs\csp

SphU



4.2)使用@SentinelResource進(jìn)行限流





限流規(guī)則依然是QPS。一秒超過20次限流





五、Sentinel集成
5.1)集成SpringCloud
編碼方式



SPI機(jī)制




快速請求
Dashboard方式






請求過的接口才會(huì)Dashboard才會(huì)進(jìn)行管理



自定義URL限流異常

通過實(shí)現(xiàn)UrlBlockHandler接口,來重寫blocked方法

URL資源清洗

將開頭為urlCleaner/全部改為urlCleaner/*



5.2)集成Nacos


grade值為1代表使用QPS







Sentinel流控規(guī)則刷新,閾值也變?yōu)?0