更新時間:2019-09-24 09:48:13 來源:動力節點 瀏覽2629次
大部分時候,一個系統的能力是有限的,一些對外提供的接口需要做限流控制,不然在請求突增的時候,會導致系統直接崩潰;所以當流量請求超過規定的數值,我們就要對請求進行引流或拒絕。
說到限流,那就要提到限流算法,常用的有【漏桶算法】和【令牌桶算法】兩種限流算法。
漏桶算法
漏桶算法,顧名思義,漏桶可以儲水,只有一個固定大小的出口;漏桶算法中,可以把一個隊列看做是漏斗,如果隊列(漏桶)滿了,那么數據包(水)就被被丟棄。漏桶算法可以控制數量的輸出速度,平滑突發流量,最終實現“提供穩定的輸出”。
令牌桶算法
如果把漏斗算法是看做是限制出水的速度,那么令牌通算法就是在進水的時候就做了限制。
令牌通算法的原理,是以一個恒定的速度往桶里放入請求,如果請求需要被處理,則需要先獲得一個令牌,當桶里沒有令牌可取的時候,則拒絕繼續放入請求。
Guava包中的RateLimiter,是令牌桶算法的解決方案之一,Google出品,用起來非常的簡單,推薦看看源碼。
動態使用漏桶算法和令牌桶算法
我們曾經有個項目用到了令牌桶算法,就是使用的Guava包中的RateLimiter,但是我們增加了一些改進:
令牌桶中令牌的數量,初始設置一個較低的值,比如10,表示每秒最多發送10次請求。
監控對方應用的資源使用情況。
當對方應用CPU/內存等數值,處在一個較低的值時,動態增加令牌數量。(監控程序調用系統的一個接口,修改令牌的數量為當前的兩倍,即10個變成20個)
當對方應用CPU/內存等數值,處在一個較高的值時,動態降低令牌的數量。
以上就是動力節點java培訓機構小編介紹的“Java算法學習教程-帶你了解限流算法”的內容,希望對大家有幫助,更多java最新資訊請繼續關注動力節點java培訓機構官網,每天會有精彩內容分享與你。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習