Spring Cloud Gateway不同频率限流(每分钟,每小时,每天)

18 篇文章 2 订阅

场景

在使用SCG限流功能时,默认情况下是按秒限流,即一秒允许多少个请求,现需要根据不同时间频率进行限流,即限制每分钟、每小时或者每天限流。

分析

SCG的限流使用的guava的ratelimiter工具,令牌桶模式,参数包括以下3个:

  • replenishRate: 每次补充令牌数量
  • burstCapacity: 令牌桶最大容量,突发请求数量
  • requestedTokens: 每次请求消耗令牌的数量

使用方案

  • 每秒限制请求1次
    - name: RequestRateLimiter #基于redis漏斗限流
      args:
        key-resolver: "#{@myResolver}"
        redis-rate-limiter:
          replenishRate: 1
          burstCapacity: 1
          requestedTokens: 1
  • 每秒限制请求10次
    - name: RequestRateLimiter #基于redis漏斗限流
      args:
        key-resolver: "#{@myResolver}"
        redis-rate-limiter:
          replenishRate: 10
          burstCapacity: 10
          requestedTokens: 1
  • 每分钟限制请求1次
    - name: RequestRateLimiter #基于redis漏斗限流
      args:
        key-resolver: "#{@myResolver}"
        redis-rate-limiter:
          replenishRate: 1
          burstCapacity: 60
          requestedTokens: 60
  • 每分钟限制请求10次
    - name: RequestRateLimiter #基于redis漏斗限流
      args:
        key-resolver: "#{@myResolver}"
        redis-rate-limiter:
          replenishRate: 1
          burstCapacity: 60
          requestedTokens: 6
  • 每小时限制请求1次
    - name: RequestRateLimiter #基于redis漏斗限流
      args:
        key-resolver: "#{@myResolver}"
        redis-rate-limiter:
          replenishRate: 1
          burstCapacity: 3600
          requestedTokens: 3600
  • 每小时限制请求10次
    - name: RequestRateLimiter #基于redis漏斗限流
      args:
        key-resolver: "#{@myResolver}"
        redis-rate-limiter:
          replenishRate: 1
          burstCapacity: 3600
          requestedTokens: 360

其他频率以此类推,调整三个参数即可。

其他

当触发限流过滤时,在SCG会在redis插入2个key,分别是

  • request_rate_limiter.{key}.tokens:当前令牌数,访问时根据令牌数判断是否有资源访问
  • request_rate_limiter.{key}.timestamp:上一次访问时间,用于访问时计算上一次到这一次可增长的令牌数,并增加到tokens中。
  • TTL:redis中限流key过期时间,规则为burstCapacity/replenishRate*2s, 如1分钟限流key过期时间为60/1*2s=120s
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lizz666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值