更新時(shí)間:2019-09-24 09:48:13 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽3092次
大部分時(shí)候,一個(gè)系統(tǒng)的能力是有限的,一些對(duì)外提供的接口需要做限流控制,不然在請(qǐng)求突增的時(shí)候,會(huì)導(dǎo)致系統(tǒng)直接崩潰;所以當(dāng)流量請(qǐng)求超過(guò)規(guī)定的數(shù)值,我們就要對(duì)請(qǐng)求進(jìn)行引流或拒絕。
說(shuō)到限流,那就要提到限流算法,常用的有【漏桶算法】和【令牌桶算法】?jī)煞N限流算法。
漏桶算法
漏桶算法,顧名思義,漏桶可以?xún)?chǔ)水,只有一個(gè)固定大小的出口;漏桶算法中,可以把一個(gè)隊(duì)列看做是漏斗,如果隊(duì)列(漏桶)滿(mǎn)了,那么數(shù)據(jù)包(水)就被被丟棄。漏桶算法可以控制數(shù)量的輸出速度,平滑突發(fā)流量,最終實(shí)現(xiàn)“提供穩(wěn)定的輸出”。

令牌桶算法
如果把漏斗算法是看做是限制出水的速度,那么令牌通算法就是在進(jìn)水的時(shí)候就做了限制。
令牌通算法的原理,是以一個(gè)恒定的速度往桶里放入請(qǐng)求,如果請(qǐng)求需要被處理,則需要先獲得一個(gè)令牌,當(dāng)桶里沒(méi)有令牌可取的時(shí)候,則拒絕繼續(xù)放入請(qǐng)求。
Guava包中的RateLimiter,是令牌桶算法的解決方案之一,Google出品,用起來(lái)非常的簡(jiǎn)單,推薦看看源碼。

動(dòng)態(tài)使用漏桶算法和令牌桶算法
我們?cè)?jīng)有個(gè)項(xiàng)目用到了令牌桶算法,就是使用的Guava包中的RateLimiter,但是我們?cè)黾恿艘恍└倪M(jìn):
令牌桶中令牌的數(shù)量,初始設(shè)置一個(gè)較低的值,比如10,表示每秒最多發(fā)送10次請(qǐng)求。
監(jiān)控對(duì)方應(yīng)用的資源使用情況。
當(dāng)對(duì)方應(yīng)用CPU/內(nèi)存等數(shù)值,處在一個(gè)較低的值時(shí),動(dòng)態(tài)增加令牌數(shù)量。(監(jiān)控程序調(diào)用系統(tǒng)的一個(gè)接口,修改令牌的數(shù)量為當(dāng)前的兩倍,即10個(gè)變成20個(gè))
當(dāng)對(duì)方應(yīng)用CPU/內(nèi)存等數(shù)值,處在一個(gè)較高的值時(shí),動(dòng)態(tài)降低令牌的數(shù)量。
以上就是動(dòng)力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)小編介紹的“Java算法學(xué)習(xí)教程-帶你了解限流算法”的內(nèi)容,希望對(duì)大家有幫助,更多java最新資訊請(qǐng)繼續(xù)關(guān)注動(dòng)力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)官網(wǎng),每天會(huì)有精彩內(nèi)容分享與你。
相關(guān)閱讀
Java實(shí)驗(yàn)班
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
Java就業(yè)班
有基礎(chǔ) 直達(dá)就業(yè)
Java夜校直播班
業(yè)余時(shí)間 高薪轉(zhuǎn)行
Java在職加薪班
工作1~3年,加薪神器
Java架構(gòu)師班
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)