限流算法

一、什麼是限流:

    限制流量請求的頻率(每秒處理多少個請求)。一般來說,當請求流量超過系統的瓶頸,則丟棄掉多餘的請求流量,保證系統的可用性。

二、解決的問題:

    高併發情況下,保證系統的可用性,不會被擊垮。

三、目前主流的兩種限流算法:

    1、漏桶限流算法;

    2、令牌桶限流算法。

四、漏桶限流算法:

        

    不論流量流入的情況如何,流量流出按照一定的頻率。如果流入過大的流量,超過桶的大小,則丟棄掉多餘的流量。

        優點:保證的流量流入頻率,原理簡單。

        缺點:無法應對突發的大流量。因爲流出的是固定頻率,其他流量只是放在桶中,並沒有流出。

五、令牌桶限流算法:

        

    令牌桶算法是按照恆定速率往桶中放入令牌,每當一個請求進入的時候需要消耗一個或多個令牌。當令牌數爲0的時候,請求會被阻塞或者拋棄。當生產速度高於消費速度,桶滿了就不會再增加令牌了。

    優點:保證的流量流入頻率,同時可以應對突然的大流量(比如當桶中的令牌比較多的時候,就可以同時給很多請求發出令牌,從而保證突然大流量的處理)。相對漏桶算法更高級。

    缺點:算法相對複雜。

六、總結:

        漏桶保證流量流出的頻率。後續服務只需要支持最大請求量:漏桶流出頻率。

        令牌桶只是保證令牌的產生頻率。後續服務只需要支持最大請求量:桶最大值的流出頻率。

            (1)當令牌消費速度遠遠高於產生速度時(桶中令牌基本處於空的狀態),漏桶算法效果基本一樣,保證流量流出的頻率;

            (2)當令牌消費速度小於產生速度時(桶中令牌會變多直至填滿),這時就可以應對突發的大流量請求,但是後續的服務要能支撐起桶大小請求量的極端請求情況。


七、使用場景:

         漏桶算法、令牌桶算法,其實無所謂哪個更好,要看適用的場景。

        當需要處理突然的大流量的時候,令牌桶算法更適用;

        當只需要保證系統的單位時間流量、或者更注重系統的穩定性的時候,漏桶算法更適用。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章