游戲推薦業(yè)務(wù)中基于 sentinel 的動(dòng)態(tài)限流實(shí)踐

作者:來(lái)自 vivo 互聯(lián)網(wǎng)服務(wù)器團(tuán)隊(duì)- Gao Meng

本文介紹了一種基于 sentinel 進(jìn)行二次開發(fā)的動(dòng)態(tài)限流解決方案,包括什么是動(dòng)態(tài)限流往堡、為什么需要引入動(dòng)態(tài)限流、以及動(dòng)態(tài)限流的實(shí)現(xiàn)原理卿操。

一扳肛、背景

1.1 當(dāng)前的限流方案

隨著互聯(lián)網(wǎng)的發(fā)展及業(yè)務(wù)的增長(zhǎng),系統(tǒng)的流量和請(qǐng)求量越來(lái)越大统求,針對(duì)高并發(fā)系統(tǒng)检碗,如果不對(duì)請(qǐng)求量進(jìn)行限制,在流量突增時(shí)可能會(huì)導(dǎo)致系統(tǒng)崩潰或者服務(wù)不可用码邻,影響用戶體驗(yàn)折剃。因此,系統(tǒng)需要引入限流來(lái)控制請(qǐng)求的流量像屋,保證系統(tǒng)的可用性和穩(wěn)定性怕犁。當(dāng)前推薦業(yè)務(wù)使用公司vsentinel 限流工具,主要使用 QPS 限流熱點(diǎn)參數(shù)限流己莺。

QPS 限流:對(duì)某個(gè)資源(通常為接口或方法奏甫,也可以自定義資源)的 QPS /并發(fā)數(shù)進(jìn)行限流;熱點(diǎn)參數(shù)限流:對(duì)某些具體的參數(shù)值進(jìn)行限流凌受,避免因?yàn)闊狳c(diǎn)參數(shù)的過(guò)度訪問(wèn)導(dǎo)致服務(wù)宕機(jī)阵子。

1.2 存在的問(wèn)題

無(wú)論是 QPS 限流還是熱點(diǎn)參數(shù)限流,都是對(duì)資源/參數(shù)的定量限流胜蛉,即對(duì)某個(gè)資源/參數(shù)設(shè)置固定閾值挠进,超過(guò)閾值則進(jìn)行限流色乾。

回到業(yè)務(wù),游戲推薦系統(tǒng)作為游戲分發(fā)的平臺(tái)领突,向公司內(nèi)所有主要流量入口(包括游戲中心暖璧、應(yīng)用商店、瀏覽器等)分發(fā)游戲攘须、小游戲漆撞、內(nèi)容和評(píng)論,具有大流量于宙、高負(fù)載的業(yè)務(wù)特點(diǎn)浮驳。同時(shí),游戲推薦系統(tǒng)對(duì)接的場(chǎng)景多(600+)捞魁,單個(gè)性化接口有100+場(chǎng)景調(diào)用(場(chǎng)景可以理解為接口請(qǐng)求的一個(gè)基本請(qǐng)求參數(shù))至会。當(dāng)前的限流方案存在以下幾個(gè)問(wèn)題:

  1. 參數(shù)級(jí)別的限流,600+場(chǎng)景谱俭,無(wú)法做到每個(gè)場(chǎng)景精細(xì)化限流奉件;

  2. 接口級(jí)別的限流,不會(huì)區(qū)分具體的場(chǎng)景昆著,無(wú)法保證核心場(chǎng)景的可用性县貌;

  3. 如果場(chǎng)景流量有變更,需要及時(shí)調(diào)整限流閾值凑懂,不易維護(hù)煤痕;

  4. 場(chǎng)景的流量會(huì)實(shí)時(shí)變化,無(wú)法做到根據(jù)流量變化的動(dòng)態(tài)限流接谨。

鑒于以上限流問(wèn)題摆碉,推薦系統(tǒng)需要一個(gè)能夠根據(jù)參數(shù)流量變化而動(dòng)態(tài)調(diào)整限流閾值精細(xì)化限流方案。

二脓豪、動(dòng)態(tài)限流介紹

從配置方式上來(lái)看巷帝,動(dòng)態(tài)限流和 QPS 限流、熱點(diǎn)參數(shù)限流最大的不同之處在于扫夜,動(dòng)態(tài)限流不是通過(guò)配置固定閾值進(jìn)行限流楞泼,而是配置每個(gè)參數(shù)的優(yōu)先級(jí),根據(jù)參數(shù)的優(yōu)先級(jí)動(dòng)態(tài)調(diào)整限流閾值笤闯。

圖片1.png

動(dòng)態(tài)限流將資源和參數(shù)進(jìn)行綁定现拒,首先配置資源(一般是接口/方法)總的限流閾值,進(jìn)而配置資源下具體參數(shù)的優(yōu)先級(jí)望侈,根據(jù)參數(shù)配置的優(yōu)先級(jí)和實(shí)時(shí)流量,決定當(dāng)前請(qǐng)求pass or block勋桶。

下圖示例中脱衙,資源總的限流閾值為150侥猬,參數(shù)A、B捐韩、C退唠、D的 QPS 均為100,且配置的參數(shù)優(yōu)先級(jí) A>B>C>D荤胁。

  • 參數(shù)A優(yōu)先級(jí)最高瞧预,且 QPS(A) = 100 < 限流閾值150,所以A的流量全部通過(guò)仅政;

  • 參數(shù)B優(yōu)先級(jí)僅次于參數(shù)A垢油,且 QPS(A) = 100 < 限流閾值150、QPS(A) + QPS(B)= 200 > 限流閾值150圆丹,所以參數(shù)B部分流量通過(guò)滩愁,pass : 50,block:50辫封;

  • 參數(shù)C和其它參數(shù)的優(yōu)先級(jí)低于參數(shù)B硝枉,且 QPS(A) + QPS(B)= 200 > 限流閾值150,所以參數(shù)C和其它參數(shù)均被限流倦微。

圖片2.png

如果此時(shí)參數(shù)值A(chǔ)的 QPS 變?yōu)?00妻味,B、C的 QPS 仍為100欣福,通過(guò)動(dòng)態(tài)限流實(shí)現(xiàn):A請(qǐng)求部分通過(guò)责球,B請(qǐng)求全部攔截,C請(qǐng)求全部攔截劣欢;根據(jù)各參數(shù)值流量的變化棕诵,動(dòng)態(tài)適配各參數(shù)值通過(guò)/攔截的流量,從而實(shí)現(xiàn)根據(jù)參數(shù)值動(dòng)態(tài)限流的效果凿将。

總結(jié):動(dòng)態(tài)限流本質(zhì)上是參數(shù)優(yōu)先級(jí)限流校套,支持對(duì)參數(shù)值配置優(yōu)先級(jí),根據(jù)參數(shù)值的優(yōu)先級(jí)進(jìn)行動(dòng)態(tài)流控牧抵。當(dāng)流量超過(guò)閾值后笛匙,優(yōu)先保證高優(yōu)先級(jí)參數(shù)通過(guò),攔截優(yōu)先級(jí)低的參數(shù)請(qǐng)求犀变。

三妹孙、sentinel 介紹

由于動(dòng)態(tài)限流是基于 sentinel 進(jìn)行二次開發(fā),且動(dòng)態(tài)限流的實(shí)現(xiàn)算法是基于 sentinel QPS 限流的優(yōu)化获枝,這里首先介紹下 sentinel 實(shí)現(xiàn)原理和 sentinel QPS 限流的滑動(dòng)窗口計(jì)數(shù)器限流算法蠢正。

3.1 sentinel 原理介紹

sentinel 是阿里開源的一款面向分布式、多語(yǔ)言異構(gòu)化服務(wù)架構(gòu)的流量治理組件省店。主要以流量為切入點(diǎn)嚣崭,從流量路由笨触、流量控制、流量整形雹舀、熔斷降級(jí)芦劣、系統(tǒng)自適應(yīng)過(guò)載保護(hù)、熱點(diǎn)流量防護(hù)等多個(gè)維度來(lái)幫助開發(fā)者保障微服務(wù)的穩(wěn)定性说榆。(官網(wǎng)描述)

sentinel 主要通過(guò)責(zé)任鏈模式實(shí)現(xiàn)不同模式的限流功能虚吟,責(zé)任鏈由一系列 ProcessorSlot 對(duì)象組成,每個(gè) ProcessorSlot 對(duì)象負(fù)責(zé)不同的功能签财。

ProcessorSlot 對(duì)象可以分為兩類:一類是輔助完成資源指標(biāo)數(shù)據(jù)統(tǒng)計(jì)的 slot串慰,一類是實(shí)現(xiàn)限流降級(jí)功能的 slot。

輔助資源指標(biāo)數(shù)據(jù)統(tǒng)計(jì)的 ProcessorSlot:

  • NodeSelectorSlot:負(fù)責(zé)收集資源路徑荠卷,并將調(diào)用路徑樹狀存儲(chǔ)模庐,用于后續(xù)根據(jù)調(diào)用路徑來(lái)限流降級(jí);

  • ClusterBuilderSlot:負(fù)責(zé)存儲(chǔ)資源的統(tǒng)計(jì)信息以及調(diào)用者信息油宜,例如該資源的 RT掂碱、QPS、線程數(shù)等等慎冤,作為多維度限流疼燥、降級(jí)的依據(jù);

  • StatisticSlot:負(fù)責(zé)實(shí)現(xiàn)指標(biāo)數(shù)據(jù)統(tǒng)計(jì)蚁堤,從多個(gè)維度(入口流量醉者、調(diào)用者、資源)統(tǒng)計(jì)響應(yīng)時(shí)間披诗、并發(fā)線程數(shù)撬即、處理失敗數(shù)量、處理成功數(shù)量等指標(biāo)信息呈队。

實(shí)現(xiàn)限流降級(jí)功能的 slot:

  • ParamFlowSlot:用于根據(jù)請(qǐng)求參數(shù)進(jìn)行限流(熱點(diǎn)參數(shù)限流)剥槐,例如根據(jù)某個(gè)參數(shù)的 QPS 進(jìn)行限流,或者根據(jù)某個(gè)參數(shù)的值進(jìn)行限流宪摧;

  • SystemSlot:用于根據(jù)系統(tǒng)負(fù)載情況進(jìn)行限流粒竖,例如 CPU 使用率、內(nèi)存使用率等几于。

  • AuthoritySlot:用于根據(jù)調(diào)用者身份進(jìn)行限流蕊苗,例如根據(jù)調(diào)用者的 IP 地址、Token 等信息進(jìn)行限流沿彭。

  • FlowSlot:用于根據(jù) QPS 進(jìn)行限流朽砰,例如每秒最多只能處理多少請(qǐng)求。

  • DegradeSlot:用于實(shí)現(xiàn)熔斷降級(jí)功能,例如當(dāng)某個(gè)資源出現(xiàn)異常時(shí)锅移,可以將其熔斷并降級(jí)處理熔掺。

圖片3.png

除了上述原生 ProcessorSlot,sentinel 還支持 SPI 插件功能非剃,通過(guò)實(shí)現(xiàn) ProcessorSlot 接口自定義 slot,從而能實(shí)現(xiàn)個(gè)性化功能拓展推沸。動(dòng)態(tài)限流正是基于 sentinel SPI 插件方式實(shí)現(xiàn)备绽。

3.2 滑動(dòng)窗口計(jì)數(shù)器算法

sentinel 的 QPS 限流采用滑動(dòng)窗口計(jì)數(shù)器算法,下面我們簡(jiǎn)單介紹下這個(gè)算法原理鬓催。

首先介紹一下計(jì)數(shù)器算法肺素。

3.2.1 計(jì)數(shù)器

計(jì)數(shù)器算法:維護(hù)一個(gè)固定單位時(shí)間的計(jì)數(shù)器來(lái)統(tǒng)計(jì)請(qǐng)求數(shù),在計(jì)數(shù)小于限流閾值時(shí)通過(guò)請(qǐng)求宇驾,計(jì)數(shù)到達(dá)限流閾值后攔截請(qǐng)求倍靡,直到下一個(gè)單位時(shí)間再重新計(jì)數(shù)。假設(shè)資源限制 1 秒內(nèi)的訪問(wèn)次數(shù)不能超過(guò) 100 次课舍。

  • 維護(hù)一個(gè)計(jì)數(shù)器塌西,每次有新的請(qǐng)求過(guò)來(lái),計(jì)數(shù)器加 1筝尾;

  • 收到新請(qǐng)求后捡需,如果計(jì)數(shù)器的值小于限流值,并且與上一次請(qǐng)求的時(shí)間間隔還在 1秒內(nèi)筹淫,允許請(qǐng)求通過(guò)站辉,否則拒絕請(qǐng)求;如果超出了時(shí)間間隔损姜,要將計(jì)數(shù)器清零饰剥。

圖片4.png

計(jì)數(shù)器算法存在一個(gè)問(wèn)題:窗口切換時(shí)可能會(huì)出現(xiàn)流量突刺(最高2倍)。極端情況下摧阅,假設(shè)每秒限流100汰蓉,在第1s和第2s分別通100個(gè)請(qǐng)求,且第1s的請(qǐng)求集中在后半段逸尖,第2s的請(qǐng)求集中在前半段古沥,那么其實(shí)在500ms到1500ms這個(gè)1s的時(shí)間段,通過(guò)了200個(gè)請(qǐng)求娇跟。

圖片5.png

為了解決這個(gè)問(wèn)題岩齿,引入了基于滑動(dòng)窗口的計(jì)數(shù)器算法。

3.2.2 滑動(dòng)窗口計(jì)數(shù)器

滑動(dòng)窗口計(jì)數(shù)器算法是計(jì)數(shù)器算法的改進(jìn)苞俘,解決了固定窗口的流量突刺問(wèn)題盹沈。算法原理:

  • 將時(shí)間劃分為細(xì)粒度的區(qū)間,每個(gè)區(qū)間維持一個(gè)計(jì)數(shù)器,每進(jìn)入一個(gè)請(qǐng)求則將計(jì)數(shù)器加1乞封;

  • 多個(gè)區(qū)間組成一個(gè)時(shí)間窗口做裙,每到一個(gè)區(qū)間時(shí)間后,則拋棄最老的一個(gè)區(qū)間肃晚,納入新區(qū)間锚贱;

  • 若當(dāng)前窗口的區(qū)間計(jì)數(shù)器總和超過(guò)設(shè)定的限制數(shù)量,則本窗口內(nèi)的后續(xù)請(qǐng)求都被丟棄关串。

圖片6.png

滑動(dòng)窗口本質(zhì)上是固定窗口更細(xì)粒度的限流拧廊,將單位時(shí)間劃分多個(gè)窗口,劃分的窗口越多晋修,數(shù)據(jù)越精確吧碾。

四、基于 sentinel 的動(dòng)態(tài)限流方案

動(dòng)態(tài)限流是基于 sentinel 的二次開發(fā)墓卦,具體實(shí)現(xiàn)流程和 sentinel 的 QPS 限流類似倦春,可以歸納為三步:數(shù)據(jù)統(tǒng)計(jì)、規(guī)則管理落剪、流量校驗(yàn)睁本。

  • 數(shù)據(jù)統(tǒng)計(jì):統(tǒng)計(jì)資源(接口/方法/參數(shù))的流量;

  • 規(guī)則管理:管理限流規(guī)則著榴,維護(hù)資源的限流閾值及參數(shù)值優(yōu)先級(jí)添履;

  • 流量校驗(yàn):對(duì)比統(tǒng)計(jì)到的流量和對(duì)應(yīng)的限流規(guī)則,決定當(dāng)前請(qǐng)求 pass or block脑又。

4.1 數(shù)據(jù)統(tǒng)計(jì)

動(dòng)態(tài)限流的數(shù)據(jù)統(tǒng)計(jì)同 sentinel 流量控制模塊一樣暮胧,使用滑動(dòng)窗口計(jì)數(shù)器算法統(tǒng)計(jì)當(dāng)前的流量。

具體來(lái)講问麸,sentinel 流量控制中的數(shù)據(jù)統(tǒng)計(jì)往衷,是將1s的時(shí)間窗細(xì)分為多個(gè)窗口,按窗口維度統(tǒng)計(jì)資源信息严卖,包括請(qǐng)求總數(shù)席舍、成功總數(shù)、異诚剩總數(shù)来颤、總耗時(shí)、最小耗時(shí)稠肘、最大耗時(shí)等福铅。

動(dòng)態(tài)限流的數(shù)據(jù)統(tǒng)計(jì),同樣是將1s的時(shí)間窗細(xì)分為多個(gè)窗口项阴,不同的是窗口的統(tǒng)計(jì)維度是各個(gè)參數(shù)值通過(guò)的總流量滑黔。

具體實(shí)現(xiàn)上,每個(gè)資源有唯一的 bucket,bucket 內(nèi)維護(hù)一個(gè)固定數(shù)量的滑動(dòng)窗口略荡,窗口中的 value 是一個(gè) hash 結(jié)構(gòu)庵佣,hash key 為限流參數(shù)的參數(shù)值,value 為參數(shù)值在當(dāng)前時(shí)間窗口的請(qǐng)求量汛兜。

圖片7.png

參數(shù)值流量統(tǒng)計(jì)流程:

  1. 系統(tǒng)收到請(qǐng)求后巴粪,首先找到當(dāng)前資源的 bucket;

  2. 再根據(jù)當(dāng)前時(shí)間戳對(duì) bucket 內(nèi)的窗口數(shù)量取余序无,定位到當(dāng)前時(shí)間窗验毡;

  3. 當(dāng)前時(shí)間窗內(nèi)參數(shù)值的請(qǐng)求量+1。

4.2 規(guī)則管理

規(guī)則管理模塊:配置和管理限流規(guī)則帝嗡。

限流規(guī)則通過(guò)zk實(shí)現(xiàn)從后臺(tái)到端上的同步。后臺(tái)配置好限流規(guī)則后璃氢,將限流規(guī)則同步到zk哟玷;客戶端監(jiān)聽zk消息變更,同步最新的限流規(guī)則一也。

圖片8.png

4.3 流量校驗(yàn)

4.3.1 參數(shù)臨界點(diǎn)

對(duì)于動(dòng)態(tài)限流而言巢寡,參數(shù)的限流閾值不是固定的,只有參數(shù)優(yōu)先級(jí)的概念椰苟,所以校驗(yàn)的第一步是要找到限流閾值優(yōu)先級(jí)的臨界點(diǎn)抑月。

圖片9.png

如果參數(shù)優(yōu)先級(jí)臨界點(diǎn)已知,只需要判斷流量參數(shù)的優(yōu)先級(jí)大小舆蝴。如果請(qǐng)求的優(yōu)先級(jí)高于閾值參數(shù)的優(yōu)先級(jí)谦絮,pass;反之洁仗,如果請(qǐng)求的優(yōu)先級(jí)低于閾值參數(shù)的優(yōu)先級(jí)层皱,block;優(yōu)先級(jí)相等赠潦,按接口閾值限流叫胖。

那么如何確認(rèn)當(dāng)前限流的優(yōu)先級(jí)呢?

4.3.2 細(xì)分窗口

當(dāng)前限流閾值配置一般為秒級(jí)別的限流她奥,細(xì)分滑動(dòng)窗口瓮增,就是將1s的窗口劃分為N個(gè)更小的時(shí)間窗,只要N足夠大哩俭,就可以將前N-1個(gè)窗口已經(jīng)統(tǒng)計(jì)到的參數(shù)流量近似當(dāng)做這一秒的流量绷跑,進(jìn)而就可以計(jì)算出臨界參數(shù)的優(yōu)先級(jí)。具體來(lái)講携茂,每一個(gè)窗口中都記錄了參數(shù)的請(qǐng)求數(shù)量你踩,所以只要將前N-1個(gè)窗口的流量累加,就可以得到各個(gè)參數(shù)在當(dāng)前這1s內(nèi)的總請(qǐng)求量;之后按照參數(shù)的優(yōu)先級(jí)從高到低带膜,依次累加流量并與閾值比較吩谦,如果累加到某個(gè)參數(shù)時(shí)大于限流閾值,則這個(gè)參數(shù)對(duì)應(yīng)的優(yōu)先級(jí)即為限流閾值優(yōu)先級(jí)的臨界點(diǎn)膝藕。

圖片10.png

上面分析都是基于最理想情況:將1s的窗口無(wú)限細(xì)分式廷。考慮到滑動(dòng)窗口粒度越小芭挽,統(tǒng)計(jì)數(shù)據(jù)計(jì)算的越準(zhǔn)確滑废,但同時(shí)占用的資源也越多,計(jì)算越復(fù)雜袜爪,時(shí)延也越高蠕趁,所以在實(shí)際應(yīng)用中,1s的窗口不可能無(wú)限細(xì)分辛馆,是否有更好的優(yōu)化方案呢俺陋?

4.3.3 動(dòng)態(tài)預(yù)測(cè)

上面是將1s的窗口劃分為N個(gè)更小的時(shí)間窗,將前N-1個(gè)窗口近似看成1s昙篙,利用前N-1個(gè)窗口的統(tǒng)計(jì)數(shù)據(jù)腊状,來(lái)判斷當(dāng)前窗口是否需要限流。

N-1→ N → 1s苔可,N越大誤差越小缴挖,反之N越小誤差就越大,為了彌補(bǔ)N大小引起的計(jì)算誤差焚辅,將統(tǒng)計(jì)窗口朝前挪一個(gè)映屋,即用最近1s已有的統(tǒng)計(jì)數(shù)據(jù),來(lái)判斷當(dāng)前窗口是否需要限流法焰。

換一種說(shuō)法:用最近1s已有的統(tǒng)計(jì)數(shù)據(jù)計(jì)算臨界點(diǎn)參數(shù)秧荆,預(yù)測(cè)當(dāng)前窗口的請(qǐng)求是否需要限流。如果當(dāng)前請(qǐng)求參數(shù)的優(yōu)先級(jí)高于臨界點(diǎn)參數(shù)埃仪,pass乙濒;低于臨界點(diǎn)參數(shù),block卵蛉;等于臨界點(diǎn)參數(shù)颁股,部分通過(guò)。

圖片11.png

綜上:動(dòng)態(tài)限流采用細(xì)分窗口+動(dòng)態(tài)預(yù)測(cè)的方法計(jì)算當(dāng)前限流參數(shù)的優(yōu)先級(jí)閾值傻丝。

舉例說(shuō)明:對(duì)方法 method(String param) 配置動(dòng)態(tài)限流甘有,限流閾值為120,配置 param 具體參數(shù)值的優(yōu)先級(jí)為A→ 1, B→ 2, C→ 3(按重要程度劃分 A > B > C)葡缰;假設(shè)窗口大小為100ms亏掀,即1s細(xì)分為10個(gè)滑動(dòng)窗口忱反。每次開始新窗口流量計(jì)數(shù)時(shí),先統(tǒng)計(jì)前10個(gè)窗口中各參數(shù)的請(qǐng)求量滤愕,繼而按照優(yōu)先級(jí)從高到低進(jìn)行累加温算,確認(rèn)優(yōu)先級(jí)閾值;比如統(tǒng)計(jì)到前10個(gè)窗口中參數(shù)A, B, C的請(qǐng)求量均為100间影,因?yàn)锳的流量100 < 閾值120注竿,A + B的流量200 > 閾值120,所以此時(shí)臨界參數(shù)為B魂贬;窗口接收到新請(qǐng)求后巩割,比較請(qǐng)求參數(shù)和臨界參數(shù)的優(yōu)先級(jí),比如參數(shù)A的請(qǐng)求付燥,因?yàn)锳的優(yōu)先級(jí)高于B, pass宣谈;參數(shù)B的臨界參數(shù)請(qǐng)求,允許部分流量通過(guò)键科;參數(shù)C的優(yōu)先級(jí)低于臨界參數(shù)蒲祈,block。

4.3.4 double check

經(jīng)過(guò)上面的分析可知萝嘁,通過(guò)滑動(dòng)窗口+動(dòng)態(tài)預(yù)測(cè)的方案就可以找到臨界點(diǎn)參數(shù),進(jìn)而根據(jù)參數(shù)優(yōu)先級(jí)決定當(dāng)前請(qǐng)求 pass or block扬卷。但是在實(shí)際時(shí)間窗和統(tǒng)計(jì)時(shí)間窗之間牙言,有一個(gè)時(shí)間 gap,在這個(gè)時(shí)間窗內(nèi)的流量計(jì)算有一定的滯后性怪得,比如上面的例子咱枉,在新窗口中A的請(qǐng)求全部 pass,如果此時(shí)A的流量突刺到1000徒恋,那么總體通過(guò)的流量就會(huì)超過(guò)閾值蚕断,如下圖所示。

圖片12.png

由上圖可知入挣,在流量突增的一個(gè)時(shí)間窗內(nèi)亿乳,當(dāng)前方案通過(guò)的流量會(huì)有突刺,為了解決流量突增帶來(lái)的突刺問(wèn)題径筏,使用 double check 進(jìn)行校驗(yàn)葛假;check1 為細(xì)分窗口+動(dòng)態(tài)預(yù)測(cè)方案,通過(guò) check1 的流量可能會(huì)有突刺滋恬;增加 check2 對(duì)資源進(jìn)行限流聊训,保證被保護(hù)資源通過(guò)的總流量不超過(guò)閾值。

圖片13.png

double check 流量在應(yīng)對(duì)流量突增時(shí)的流量情況:

圖片14.png

4.4 整體架構(gòu)

復(fù)用 sentinel 責(zé)任鏈+ SPI 架構(gòu)恢氯,使用獨(dú)立 SDK 打包方式嵌入動(dòng)態(tài)限流模板带斑,不影響原 sentinel 處理流程鼓寺,按需引入。

圖片15.png

4.5 實(shí)現(xiàn)效果

動(dòng)態(tài)限流配置生效后勋磕,可通過(guò)監(jiān)控查看各配置參數(shù)通過(guò)/拒絕的請(qǐng)求量妈候,實(shí)現(xiàn)限流功能的可視化。

圖片16.png

如上圖所示朋凉,配置某個(gè)資源的單機(jī)限流閾值為50州丹,這一秒內(nèi)的總請(qǐng)求量為74,通過(guò)50個(gè)請(qǐng)求杂彭,拒絕14個(gè)請(qǐng)求(其中配置限流的參數(shù) xx.scene.priority1墓毒、xx.scene.priority2、xx.scene.priority3 在這一秒通過(guò)的請(qǐng)求數(shù)量分別為2個(gè)亲怠、16個(gè)所计、2個(gè);其它參數(shù)通過(guò)30個(gè)請(qǐng)求团秽,拒絕14個(gè)請(qǐng)求)主胧。

解釋:在這一秒內(nèi),配置的三個(gè)參數(shù)總請(qǐng)求量為20(2+16+2)习勤,小于閾值50踪栋,全部通過(guò);其它參數(shù)總流量為44图毕,這一秒的總請(qǐng)求量為64(20+44)夷都,大于限流閾值50,所以其它參數(shù)共通過(guò)30個(gè)請(qǐng)求予颤,拒絕14個(gè)請(qǐng)求囤官。

五、總結(jié)

本文介紹了一種基于 sentinel 進(jìn)行二次開發(fā)的動(dòng)態(tài)限流解決方案蛤虐,提供更細(xì)粒度党饮、能夠根據(jù)流量動(dòng)態(tài)調(diào)整限流閾值的參數(shù)級(jí)限流方法,是對(duì) sentinel 限流功能的補(bǔ)充和拓展驳庭。

  • 對(duì)比 sentinel 的 QPS 限流刑顺,動(dòng)態(tài)限流方案提供了更細(xì)粒度的參數(shù)級(jí)別的限流;

  • 對(duì)比 sentinel 的熱點(diǎn)參數(shù)限流嚷掠,熱點(diǎn)參數(shù)限流是對(duì)參數(shù)的定量限流捏检,適用于參數(shù)大流量場(chǎng)景,比如對(duì)某個(gè)頻繁請(qǐng)求的參數(shù)(id/商品)進(jìn)行限流不皆;動(dòng)態(tài)限流根據(jù)配置的參數(shù)優(yōu)先級(jí)(重要程度)進(jìn)行限流贯城,限流的閾值參數(shù)會(huì)根據(jù)資源的流量動(dòng)態(tài)調(diào)整,pass 高優(yōu)參數(shù)霹娄,block 低優(yōu)參數(shù)能犯,限流重點(diǎn)是“保核心”鲫骗。

綜上,動(dòng)態(tài)限流是對(duì) sentinel 限流功能的補(bǔ)充踩晶,用戶可以結(jié)合具體場(chǎng)景配置不同的限流方案执泰。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市渡蜻,隨后出現(xiàn)的幾起案子术吝,更是在濱河造成了極大的恐慌,老刑警劉巖茸苇,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件排苍,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡学密,警方通過(guò)查閱死者的電腦和手機(jī)淘衙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)腻暮,“玉大人彤守,你說(shuō)我怎么就攤上這事】蘧福” “怎么了具垫?”我有些...
    開封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)试幽。 經(jīng)常有香客問(wèn)我做修,道長(zhǎng),這世上最難降的妖魔是什么抡草? 我笑而不...
    開封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮蔗坯,結(jié)果婚禮上康震,老公的妹妹穿的比我還像新娘。我一直安慰自己宾濒,他們只是感情好腿短,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著绘梦,像睡著了一般橘忱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上卸奉,一...
    開封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天钝诚,我揣著相機(jī)與錄音,去河邊找鬼榄棵。 笑死凝颇,一個(gè)胖子當(dāng)著我的面吹牛潘拱,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播拧略,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼芦岂,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了垫蛆?” 一聲冷哼從身側(cè)響起禽最,我...
    開封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎袱饭,沒(méi)想到半個(gè)月后川无,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡宁赤,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年舀透,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片决左。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡愕够,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出佛猛,到底是詐尸還是另有隱情惑芭,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布继找,位于F島的核電站遂跟,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏婴渡。R本人自食惡果不足惜幻锁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望边臼。 院中可真熱鬧哄尔,春花似錦、人聲如沸柠并。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)臼予。三九已至鸣戴,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間粘拾,已是汗流浹背窄锅。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留缰雇,地道東北人酬滤。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓签餐,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親盯串。 傳聞我的和親對(duì)象是個(gè)殘疾皇子氯檐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容