在sentinel控制臺的簇點鏈路里可以看到我們監(jiān)控的請求,而針對每個請求又有不同的操作谓娃,分別是流控、降級蜒滩、熱點滨达、授權(quán)。
接下來我們了解流控的部分俯艰。
點擊新增流控可以看到如下頁面捡遍。
新增流控就是要配置流控規(guī)則。
那么什么是流控規(guī)則呢竹握?
1.流控規(guī)則
流量控制画株,其原理是監(jiān)控應(yīng)用流量得QPS或并發(fā)線程數(shù)等指標(biāo),當(dāng)達到指定閾值時對流量進行控制,以避免被瞬時的流量高峰沖垮污秆,從而保障應(yīng)怡紅的高可用性劈猪。
官網(wǎng)給出的詳細流控規(guī)則文檔:https://github.com/alibaba/Sentinel/wiki/%E6%B5%81%E9%87%8F%E6%8E%A7%E5%88%B6
下面是我自己整理的一部分:
- 資源名:唯一名稱,默認請求路徑
- 針對來源:Sentinel可以針對調(diào)用者進行限流良拼,填寫微服務(wù)名战得,默認default(不區(qū)分來源)
- 閾值類型/單機閾值
- QPS(每秒鐘請求數(shù)量):當(dāng)調(diào)用該api的QPS達到閾值的時候進行限流。
- 線程數(shù):當(dāng)調(diào)用該api的線程數(shù)達到閾值的時候進行限流
- 是否集群:不需要集群
- 流控模式:
- 直接:api達到限流條件時直接限流
- 關(guān)聯(lián):當(dāng)關(guān)聯(lián)的資源達到閾值時庸推,就限流自己
- 鏈路:只記錄指定鏈路上的額流量(指定資源從入口資源進來的流量常侦,如果達到閾值,就進行限流)
- 流控效果:
- 快速失敱崦健:直接失敗聋亡,拋異常
- Warm Up:根據(jù)codeFactor(冷加載因子,默認3)的值际乘,從閾值/codeFactor坡倔,經(jīng)過預(yù)熱時長,才達到設(shè)置的QPS閾值
- 排隊等待:勻速派對脖含,讓請求以勻速的速度通過罪塔,閾值類型必須設(shè)置為QPS,否則無效
2.QPS直接失敗
接下來我們給A請求新增一個QPS直接失敗的規(guī)則
我們設(shè)置的閾值是1养葵,意思是當(dāng)每秒請求數(shù)大于1的時候就會觸發(fā)流控征堪。
新增好后可以在流控規(guī)則的菜單里看到我們剛剛新增的。
接下來我們測試一下关拒。
慢一點發(fā)送請求的時候是正常的
一直點的時候就會觸發(fā)流控了
這就說明我們QPS的限流配置成功了
3.線程數(shù)直接失敗
我們直接修改剛剛的流控規(guī)則就可以了
接下來我們要稍微修改一下controller里的代碼佃蚜,因為流控判斷的標(biāo)準是線程數(shù),我們要模擬多個線程處理的話最好讓線程睡上兩秒鐘
接下來我們繼續(xù)測試着绊,注意我們這次開兩個窗口來發(fā)送請求谐算,那么一定有一個成功了一個沒成功。
可以看到我們線程數(shù)的規(guī)則也生效了畔柔。
4.關(guān)聯(lián)
由于微服務(wù)系統(tǒng)中各個服務(wù)之間是互相調(diào)用的氯夷,如果A服務(wù)要請求B服務(wù),那么當(dāng)A服務(wù)達到流控閾值的時候靶擦,B服務(wù)也應(yīng)該無法訪問腮考。
比如,一個場景玄捕,需要我們先下單再支付踩蔚,那么如果訂單服務(wù)掛掉了,就不允許請求再發(fā)往支付服務(wù)了枚粘。
我們再編輯一下流控規(guī)則(QPS和線程數(shù)的效果是一樣的馅闽,我就都用QPS來測試了)
接下來我們用postman來循環(huán)發(fā)送請求B。如果規(guī)則生效的話,那么我們的A就訪問不了了福也。
我們設(shè)置循環(huán)20此局骤,每次間隔0.3秒,因為B請求沒有設(shè)置限流規(guī)則暴凑,因此是不會被限流的峦甩。
在循環(huán)的過程中我們來觀察A請求。
我們可以看到A請求失敗了现喳,因為我們設(shè)置了A和B請求的關(guān)聯(lián)規(guī)則
5.預(yù)熱
首先來看官方文檔解釋的預(yù)熱
什么意思呢凯傲?
比如秒殺場景、整點搶購場景嗦篱,原來的系統(tǒng)處于平穩(wěn)狀態(tài)冰单,不會有那么多的流量,而一旦活動開始了灸促,巨大的流量突然涌向系統(tǒng)诫欠,容易導(dǎo)致系統(tǒng)癱瘓,這時候可以使用我們的預(yù)熱機制把流量慢慢的放進來腿宰,慢慢延長閾值呕诉。
公式:閾值初一coldFactory(默認值是3)缘厢,經(jīng)過預(yù)熱時長后才會達到閾值吃度。
那么接下來我再新增一個預(yù)熱的流控規(guī)則
這個規(guī)則的意思是:默認coldFactor為3,即請求QPS從(threshole/3)開始贴硫,經(jīng)過預(yù)熱時長逐漸升至設(shè)定的QPS閾值椿每。
也就是說系統(tǒng)初始化的閾值為10/3約等于3;然后經(jīng)過5s后閾值才慢慢提升至10英遭。
我們只要在瀏覽器訪問該接口一直刷新就可以看到效果了间护。
6.勻速排隊
也就是說讓系統(tǒng)勻速處理請求,而不是忙的時候忙死挖诸,閑的時候閑死汁尺。
接下來我們再編輯一下流控規(guī)則
我們再用postman循環(huán)發(fā)送請求也是可以測出來的。