RateLimiter限流 - 令牌桶

本文介绍了RateLimiter限流算法,重点讲述了Guava中的令牌桶实现。通过创建RateLimiter,讨论了令牌桶的容量、令牌的添加方式以及处理令牌不足时的策略。文章还提及了RateLimiter的两个子类Bursty和WarmingUp,特别是Bursty类中的令牌容量和令牌添加的具体细节。
摘要由CSDN通过智能技术生成

简介

限流算法除了令牌桶还有其他的,但据我所知比较优雅的是令牌桶算法。
令牌桶算法的基本思路是:

假设有一个桶存放令牌,按照固定频率(1/qps)向桶中放入令牌,处理请求时,先从令牌桶中获取令牌,如果获取到直接执行,否则等待,直到获取到所需令牌。

guava 中的 RateLimiter就是基于令牌桶实现的,下面主要描述具体实现,使用的细节不再赘述

细节

这里有几个细节:

  1. 令牌桶是有容量限制的
  2. 如何向桶中放入令牌,或者换句话说,如何计算当前桶中令牌的个数
  3. 如何获取令牌
  4. 如何处理
  5. 当令牌不足时,如何处理当前请求和后续请求

下面说一下RateLimiter对于上面细节的处理

代码中具体类

RateLimiter是一个抽象类,它有两个私有静态子类:
Bursty:突发无预热
WarmingUp:有预热

下面以Bursty来描述具体的细节,WarmingUp后续再研究

令牌桶的容量

  /**
   * The maximum number of stored permits.
   */
  double maxPermits;

这个值表示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值