一.**** 閾值類型和流控模式
界面配置專業(yè)詞匯概述:
1.****閾值類型 QPS没炒、流控模式 直接
測試代碼service
測試代碼限流代碼(參數(shù)和返回類型必須和@SentinelResource注解的方法一樣慢逾,最后一個參數(shù)為BlockException)
控制層代碼
每秒允許請求數(shù)為 5
請求并進行測試:
測試需要講究快速點擊缕探、緩慢點擊
· 緩慢點擊· JMeter多線程測試快速點擊
·表示1秒內(nèi),查詢5次請求OK维苔; 如果請求在1秒內(nèi)的次數(shù)高于5次宵荒,則進入快速失敗流程,進入熔斷限制函數(shù)中苔悦!
2.****閾值類型 線程數(shù)轩褐、流控模式 直接
Service
Controller
單個請求:
了解 QPS 和線程數(shù)這兩種方式的區(qū)別:
Jmeter10個線程請求測試:
限流了
3.****閾值類型 QPS把介、流控模式 關(guān)聯(lián)
此次的配置采取如下方式:
當關(guān)聯(lián)的資源達到限流條件時,開啟限流 配置請求 /test2 限流QPS蟋座,關(guān)聯(lián) /test1文檔解釋現(xiàn)象:
/test1 與 /test2 有關(guān)聯(lián)關(guān)系拗踢。 若 /test2 達到閾值時,會對 /test1 進行限流向臀!
實用背景:
下單和支付接口進行關(guān)聯(lián)巢墅。 如若支付接口達到閾值,就限定下單接口少產(chǎn)生支付接口飒硅,緩解壓力砂缩!如何進行測試呢?
1三娩、正常請求 /test1庵芭,無關(guān)乎快速還是緩慢,都會是正常返回信息雀监。 2双吆、循環(huán)不斷請求/test2眨唬,觸發(fā)該接口的限流操作。 3好乐、再次請求/test1匾竿,查看請求回執(zhí)狀態(tài)信息。
正常請求/test1:
http://localhost:8500/test1 無論快慢蔚万,都是返回下列信息岭妖!
使用postman、jmeter等工具反璃,迭代請求/test2昵慌,觸發(fā)限流后,再次請求/test1查看回執(zhí)狀態(tài)信息:
運行 postman淮蜈,瀏覽器訪問:http://localhost:8500/test1
現(xiàn)象:
當/test2觸發(fā)了限流斋攀,此時的/test1請求將會受到影響! 當/test2限流結(jié)束梧田,/test1才能繼續(xù)請求得到回執(zhí)淳蔼!
4.****QPS、鏈路
鏈路:當從某個接口過來的資源達到限流條件時裁眯,開啟限流鹉梨。
鏈路流控是針對上級接口!
二.****Sentinel 流控效果
此處的效果測試未状,均采用 閾值類型:QPS俯画、流控模式:直接析桥。
1.****直接
直接失敗司草,拋出異常,不做任何額外處理泡仗,是最簡單的方式埋虹。
2.****Warm Up
從開始閾值,到最大QPS閾值會有一個緩沖階段娩怎, 一開始的閾值是最大QPS閾值的1/3搔课,然后緩慢增長,直到最大閾值截亦,適用于突然增大的流量轉(zhuǎn)化為緩步增長爬泥。 避免突然大流量造成服務(wù)器的宕機!
閾值最初為10崩瓤; 最初的處理請求數(shù)最大為:10/3=3袍啡; 在5s時間內(nèi),由3緩慢升為10却桶。
突然出現(xiàn)大量請求境输,不會直接進行實際處理蔗牡,會將請求預熱后在做處理!
3.****排隊等待
讓請求以均勻的速率通過嗅剖,單機閾值為每秒通過的請求數(shù)辩越,其余的排隊等待; 其次信粮,還可以設(shè)置一個排隊等待的超時時間黔攒,若請求在超時時間內(nèi)還未被處理甜熔,則會被丟棄义黎。
達到的目的: 勻速處理多個請求偷崩,而不是一開始超過閾值的請求直接失數虐取土砂!
觀察發(fā)現(xiàn): 每秒鐘限定處理一個請求數(shù)积担。 但是jmeter每秒鐘發(fā)送2個請求懈万。 設(shè)置了延遲等待 500ms后呀忧,只有少數(shù)請求會進入降級辞友!
三.****Sentinel熔斷降級
· 平均響應(yīng)時間 (DEGRADE_GRADE_RT):當 1s 內(nèi)持續(xù)進入 N 個請求栅哀,對應(yīng)時刻的平均響應(yīng)時間(秒級)均超過閾值(count,以 ms 為單位)称龙,那么在接下的時間窗口(DegradeRule 中的timeWindow留拾,以 s 為單位)之內(nèi),對這個方法的調(diào)用都會自動地熔斷(拋出 DegradeException)鲫尊。注意Sentinel 默認統(tǒng)計的 RT 上限是 4900 ms痴柔,超出此閾值的都會算作 4900 ms,若需要變更此上限可以通過啟動配置項-Dcsp.sentinel.statistic.max.rt=xxx 來配置疫向。
· 異常比例 (DEGRADE_GRADE_EXCEPTION_RATIO):當資源的每秒請求量 >= N(可配置)咳蔚,并且每秒異常總數(shù)占通過量的比值超過閾值(DegradeRule 中的 count)之后搔驼,資源進入降級狀態(tài)谈火,即在接下的時間窗口(DegradeRule 中的 timeWindow,以 s 為單位)之內(nèi)舌涨,對這個方法的調(diào)用都會自動地返回糯耍。異常比率的閾值范圍是 [0.0, 1.0],代表 0% - 100%囊嘉。
· 異常數(shù) (DEGRADE_GRADE_EXCEPTION_COUNT):當資源近 1 分鐘的異常數(shù)目超過閾值之后會進行熔斷温技。注意由于統(tǒng)計時間窗口是分鐘級別的,若 timeWindow 小于 60s扭粱,則結(jié)束熔斷狀態(tài)后仍可能再進入熔斷狀態(tài)舵鳞。
1、RT 平均響應(yīng)時間
1焊刹、如果請求的平均響應(yīng)數(shù)超過閾值(ms)系任,則會進入準降級狀態(tài)恳蹲。 2、如果接下來1s內(nèi)持續(xù)進入5個請求俩滥,他們的RT都持續(xù)超過了這個閾值嘉蕾,那么在接下來的時間窗口(s)內(nèi),就會對這個服務(wù)進行降級霜旧。 3错忱、RT默認最大為4900ms,如果需要更大挂据,可以通過 -Dcsp.sentinel.statistic.max.rt=xxx 進行配置以清。
配置案例: java代碼邏輯為:
請求測試:
1崎逃、正常請求: 不會出現(xiàn)熔斷保護掷倔。 2、異常請求: http://localhost:8500/jiangji?name=1
保護時間過后勒葱,在請求正常流程:
[總結(jié)]
1、配置熔斷保護的接口巴柿,如果不出現(xiàn)超時情況時凛虽,不會觸發(fā)熔斷保護降級。 2广恢、當設(shè)定RT為400ms后凯旋,請求異常流程,1s內(nèi)平均請求響應(yīng)都超時并達到對應(yīng)的數(shù)目(測試顯示5個)钉迷,會觸發(fā)熔斷保護至非,并保護10s(這個時間是時間窗口的配置)。 3篷牌、熔斷保護期間內(nèi)睡蟋,正常請求也會被熔斷踏幻、降級枷颊。 4、10s后该面,熔斷結(jié)束夭苗,會重新對請求響應(yīng)時間進行統(tǒng)計判斷。
2隔缀、異常比例數(shù)
每秒的異程庠欤總數(shù),占通過量的比值超過配置的值之后猾瘸,觸發(fā)熔斷降級界赔。 時間窗口和之前一樣丢习,屬于熔斷保護時間。 占的比值數(shù)范圍為:[0.0,1.0]淮悼;
代碼案例:
暫時未配置時咐低,當請求數(shù)每次達到 a % 2== 0時,就會產(chǎn)生異常:
由于 a % 2 == 0觸發(fā)異常见擦,也就是說異常比例為 1/2。只需要配置的數(shù)小于 1/2即可羹令。
請求測試:
正常緩慢請求時鲤屡,依然和之前一致,出現(xiàn)報錯信息福侈。 當請求異常比例大于等于配置數(shù)時酒来,出現(xiàn)熔斷降級。
3肪凛、異常數(shù)
資源 1分鐘 內(nèi)的異骋凼祝總數(shù)超過限定的閾值,觸發(fā)熔斷降級显拜!
設(shè)定異常數(shù)為3衡奥,表示一分鐘請求的異常出現(xiàn)了3個及以上,觸發(fā)熔斷降級远荠!
[注意]此處有坑矮固!
由于異常數(shù)是按照分鐘統(tǒng)計的個數(shù),時間窗口中的設(shè)置也必須要大于60s譬淳。 不然會出現(xiàn):結(jié)束熔斷保護后仍可能繼續(xù)熔斷保護(不會釋放档址!)
請求測試:
當請求出現(xiàn)異常的次數(shù)達到設(shè)定的值時,立馬出現(xiàn)熔斷降級現(xiàn)象邻梆。四****尼摹、Sentinel熱點規(guī)則
熱點參數(shù)流控規(guī)則。
何為熱點:
熱點即經(jīng)常訪問的數(shù)據(jù)剂娄。
熱點限流的思想是什么蠢涝?
假設(shè)某一時間段內(nèi)的某個用戶頻繁的去訪問,就可以采取熱點規(guī)則方式阅懦,對其進行限流操作和二。
1、初級配置和測試
案例測試:
當不配置任何規(guī)則時耳胎,此時的回執(zhí)信息為:
當請求地址攜帶p1參數(shù)惕它,且每秒鐘的請求數(shù)高于配置的1次時,觸發(fā)降級废登。
請求測試:
1怠缸、不攜帶參數(shù),快速點擊
2钳宪、攜帶參數(shù)揭北,但不攜帶p1,快速點擊
3吏颖、攜帶p1參數(shù)搔体,緩慢點擊
4、攜帶p1參數(shù)半醉,快速點擊
高級配置
針對個別用戶頻繁訪問時疚俱,采取了限流操作(按照參數(shù)接受類型,但不是具體的數(shù)值)缩多。 但是呆奕,針對管理員頻繁的訪問查看或測試數(shù)據(jù)時,此時不應(yīng)限流衬吆。
配置項:
達到的目的梁钾,當p1為520時,限流量放大逊抡!
請求測試:
1姆泻、緩慢請求,p1非特定值4方咆、快速請求,p1為特定值(每秒請求大于3才觸發(fā)限流)
Sentinel系統(tǒng)自適應(yīng)限流
之前的配置操作蟀架,采取的是針對單個請求地址瓣赂、請求別名進行配置的限流操作,sentinel同時也提供了一種很潮流的方式實現(xiàn)配置操作—系統(tǒng)自適應(yīng)限流辜窑。
何為系統(tǒng)自適應(yīng)限流钩述?
Sentinel 系統(tǒng)自適應(yīng)限流從整體維度對應(yīng)用入口流量進行控制,結(jié)合應(yīng)用的 Load穆碎、CPU 使用率、總體平均 RT职恳、入口 QPS和并發(fā)線程數(shù)等幾個維度的監(jiān)控指標所禀,通過自適應(yīng)的流控策略方面,讓系統(tǒng)的入口流量和系統(tǒng)的負載達到一個平衡,讓系統(tǒng)盡可能跑在最大吞吐量的同時保證系統(tǒng)整體的穩(wěn)定性色徘。
文檔中恭金,對系統(tǒng)自適應(yīng)限流有如下幾種配置:閾值類型的含義如下所示:
· Load 自適應(yīng)(****僅支持Linux/Unix-like****) 系統(tǒng)的 load1 作為啟發(fā)指標,進行自適應(yīng)系統(tǒng)保護褂策。當系統(tǒng) load1 超過設(shè)定的啟發(fā)值横腿,且系統(tǒng)當前的并發(fā)線程數(shù)超過估算的系統(tǒng)容量時才會觸發(fā)系統(tǒng)保護(BBR 階段)。系統(tǒng)容量由系統(tǒng)的 maxQps * minRt 估算得出斤寂。設(shè)定參考值一般是 CPU cores * 2.5耿焊。(系統(tǒng)核心數(shù)*2.5)
· CPU usage(****1.5.0+ 版本****) 當系統(tǒng) CPU 使用率超過閾值即觸發(fā)系統(tǒng)保護(取值范圍 0.0-1.0),比較靈敏遍搞。
· 平均 RT 當單臺機器上所有入口流量的平均 RT 達到閾值即觸發(fā)系統(tǒng)保護罗侯,單位是毫秒。
· 并發(fā)線程數(shù) 當單臺機器上所有入口流量的并發(fā)線程數(shù)達到閾值即觸發(fā)系統(tǒng)保護溪猿。
· 入口 QPS 當單臺機器上所有入口流量的 QPS 達到閾值即觸發(fā)系統(tǒng)保護钩杰。
配置案例: 配置入口QPS
只配置 QPS 項,其他流控模式未配置诊县。