手写基于redis实现分布式限流器-pdlr

5 篇文章 0 订阅
4 篇文章 0 订阅

一.限流器介绍

    简单来讲,限流器就是控制流量访问速率的一种机制,在短时间内大量流量访问时,不至于使服务器崩溃。比如,一分钟之内,如果限制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

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值