手寫基於redis實現分佈式限流器-pdlr

一.限流器介紹

    簡單來講,限流器就是控制流量訪問速率的一種機制,在短時間內大量流量訪問時,不至於使服務器崩潰。比如,一分鐘之內,如果限制1000個請求可以訪問,當第1001個請求到達時,請求被拒絕(這時最好對其進行監控)。

二.限流器的實現方式

    目前常用兩種:

    1.使用計數器法。一段時間內,限制請求可以訪問的個數,guava框架裏面有一個ratelimit。

    2.令牌桶算法。系統之間通過令牌來檢驗請求,令牌是等時間間隔生成,消除了流量激增。

   guava 的ratelimit是單機版,在分佈式環境下無法使用,所以我們選用redis做數據存儲對象。

三.分佈式限流器-PDLR

1).簡介

   PDLR是一個居於redis的分佈式限流器,環境使用jdk8,spring-boot,redis。它具有如下功能:

    1.對系統限流控制

    2.支持對路徑的限流控制

    3.支持對方法的限流控制

    4.支持分佈式鎖級別的控制

2).使用說明

    1.添加pom依賴

   <dependency>
       <groupId>com.pdlr.framework</groupId>
       <artifactId>pdlr-core</artifactId>
       <version>1.0</version>
   </dependency>

     2.添加註解

    @EnablePDLRConfig

         注:@EnablePDLRConfig將pdlr框架注入,建議和@SpringBootApplication註解放一起。

     3.添加配置

     在application.yml中添加

    #pdlr:
    #  rate: 15
    #  timeOut: 5000   #5秒鐘內只能有15個請求到達
    #  intercept-path: /api,/test/*

     當然,第3步也可以不做,系統已經默認添加了默認值。rate爲10,timeOut1000 ,intercept-path默認是/api/**路徑。

3).實現原理

     1.繼承了方法攔截器(HandlerInterceptor),實現了before方法,在所有請求方法之前,會對請求速率做判斷,包括更改,使用分佈式鎖等。

      2.繼承了webmvc適配器(WebMvcConfigurerAdapter),通過配置,攔截相應的請求路徑。

      3.使用反射和註解實現值(LimitRate)的設置和讀取.

四.開源框架地址

https://gitee.com/YiHaiFeng/PDistributedLimiRate.git

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