Java限流之令牌桶算法若贮、漏桶算法

限流在實際使用場景中應(yīng)用十分廣泛,尤其針對并發(fā)場景下的高并發(fā),為了保證系統(tǒng)的可用性谴麦,我們需要采取一些限流措施降級蠢沿,以防止非預(yù)期的請求對系統(tǒng)壓力過大而引起的系統(tǒng)癱瘓。

對于過量的請求一般的措施就是丟掉多余的請求匾效,或者讓請求排隊搏予,再或者引流

下面說下常用的限流方式:

1.計數(shù)器方法

比如在1分鐘內(nèi)限制請求次數(shù)不超過100,那我們定義一個變量counter弧轧,每來一個請求則counter加1雪侥,如果在一分鐘之內(nèi)counter累計超過100,新來的請求則超過限制精绎。然后速缨,超過1s之后,這個counter就重置代乃。這是比較簡單的計數(shù)器法旬牲;

但是這種方法會有一個問題,那就是比如某個人在0:59秒的時候打了100個請求過來搁吓,然后原茅,在1min的時候counter就置零了,他又在1:01的時候打了100個請求過來堕仔,所以說擂橘,在最近的1min之內(nèi)其實是接收到200個請求,這明顯超出了我們的預(yù)期摩骨,所以說這種方法不滿足我們的需求通贞。

聰明的小伙伴一眼就能看出問題所在,其實是我們統(tǒng)計的精度太低了恼五,于是就引出下面的滑動窗口計數(shù)法昌罩;

2.滑動窗口

比如我們把1min劃分成6個小格,則每10s為一個分割單位灾馒,比如在0:35分鐘來了100個請求茎用,則會落在0:30-0:39這個區(qū)間內(nèi),當(dāng)1:01再來100個請求時睬罗,顯然轨功,最近1分鐘內(nèi)的請求次數(shù)超過了100,那么這100個請求則被限制住了傅物,這種是符合我們的預(yù)期夯辖。但是滑動窗口對存儲有比較大的需求,尤其在窗口比較小的情況下不滿足需求董饰。

3.漏桶算法

漏桶算法的思路就是蒿褂,水(請求)先進(jìn)入漏桶里圆米,漏桶以一定的速度出水(接口響應(yīng)時間),當(dāng)水流入速度(接口請求的速度)越來越大時啄栓,漏桶就會溢出娄帖,然后新來的請求就會被拒絕。無論請求量多大昙楚,漏洞的出水速率是不變的近速,所以針對突發(fā)的大流量場景,這種方案是不支持的堪旧。

漏洞算法示意圖

4.令牌桶算法

令牌桶算法是我們?nèi)粘J褂帽容^多的方案削葱,它的基本方案是:系統(tǒng)以恒定速率向桶里放入令牌,淳梦,如果桶滿了則不加析砸。當(dāng)請求來的時候,從桶里拿走一個令牌爆袍,如果桶里沒有令牌則阻塞或者拒絕新的請求首繁。令牌桶的另外一個好處是可以方便的改變速度. 一旦需要提高速率,則按需提高放入桶中的令牌的速率.?

可以參考RateLimiter類來進(jìn)行實際應(yīng)用。


令牌桶算法示意圖
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末陨囊,一起剝皮案震驚了整個濱河市弦疮,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蜘醋,老刑警劉巖胁塞,帶你破解...
    沈念sama閱讀 222,000評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異堂湖,居然都是意外死亡闲先,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評論 3 399
  • 文/潘曉璐 我一進(jìn)店門无蜂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蒙谓,你說我怎么就攤上這事斥季。” “怎么了累驮?”我有些...
    開封第一講書人閱讀 168,561評論 0 360
  • 文/不壞的土叔 我叫張陵酣倾,是天一觀的道長。 經(jīng)常有香客問我谤专,道長躁锡,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,782評論 1 298
  • 正文 為了忘掉前任置侍,我火速辦了婚禮映之,結(jié)果婚禮上拦焚,老公的妹妹穿的比我還像新娘。我一直安慰自己杠输,他們只是感情好赎败,可當(dāng)我...
    茶點故事閱讀 68,798評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蠢甲,像睡著了一般僵刮。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上鹦牛,一...
    開封第一講書人閱讀 52,394評論 1 310
  • 那天搞糕,我揣著相機(jī)與錄音,去河邊找鬼曼追。 笑死寞宫,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的拉鹃。 我是一名探鬼主播辈赋,決...
    沈念sama閱讀 40,952評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼膏燕!你這毒婦竟也來了钥屈?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,852評論 0 276
  • 序言:老撾萬榮一對情侶失蹤坝辫,失蹤者是張志新(化名)和其女友劉穎篷就,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體近忙,經(jīng)...
    沈念sama閱讀 46,409評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡竭业,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,483評論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了及舍。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片未辆。...
    茶點故事閱讀 40,615評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖锯玛,靈堂內(nèi)的尸體忽然破棺而出咐柜,到底是詐尸還是另有隱情,我是刑警寧澤攘残,帶...
    沈念sama閱讀 36,303評論 5 350
  • 正文 年R本政府宣布拙友,位于F島的核電站,受9級特大地震影響歼郭,放射性物質(zhì)發(fā)生泄漏遗契。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,979評論 3 334
  • 文/蒙蒙 一病曾、第九天 我趴在偏房一處隱蔽的房頂上張望牍蜂。 院中可真熱鬧漾根,春花似錦、人聲如沸捷兰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽贡茅。三九已至秘蛇,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間顶考,已是汗流浹背赁还。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留驹沿,地道東北人艘策。 一個月前我還...
    沈念sama閱讀 49,041評論 3 377
  • 正文 我出身青樓,卻偏偏與公主長得像渊季,于是被迫代替她去往敵國和親朋蔫。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,630評論 2 359

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

  • 夜鶯2517閱讀 127,727評論 1 9
  • 我是黑夜里大雨紛飛的人啊 1 “又到一年六月却汉,有人笑有人哭驯妄,有人歡樂有人憂愁,有人驚喜有人失落合砂,有的覺得收獲滿滿有...
    陌忘宇閱讀 8,544評論 28 53
  • 兔子雖然是枚小碩 但學(xué)校的碩士四人寢不夠 就被分到了博士樓里 兩人一間 在學(xué)校的最西邊 靠山 兔子的室友身體不好 ...
    待業(yè)的兔子閱讀 2,610評論 2 9
  • 信任包括信任自己和信任他人 很多時候青扔,很多事情,失敗翩伪、遺憾微猖、錯過,源于不自信缘屹,不信任他人 覺得自己做不成凛剥,別人做不...
    吳氵晃閱讀 6,193評論 4 8