限流器(一):guava应用级限流器RateLimiter之SmoothBursty

一、前言

本系列是针对源码实现来讲解的。
本篇是限流器讲解的第一篇,最近在使用限流器,然后研究了下,本系列也是为了记录自己的研究成果,方便以后自己回来复习。
常用的限流器有令牌桶限流器和漏桶限流器,guava实现的限流器RateLimiter算是比较常用的应用级限流器。RateLimiter内部有两个实现:SmoothBursty和SmoothWarmingUp,这一篇先讲解SmoothBursty限流器。
SmoothBursty限流器使用令牌桶算法实现,这个限流器在空闲时候能够存储一定的令牌(默认是1秒钟时间产生的令牌),可以应对空闲一段时间后突然的爆发量请求。
guava的RateLimiter有一个核心的设计思想:当前请求的债务(请求的令牌大于限流器存储的令牌数)由下一个请求来偿还(上个请求亏欠的令牌,下个请求需要等待亏欠令牌生产出来以后才能被授权)

二、令牌桶限流器示意图

令牌桶限流器
限流器随着时间的推移会不断生产令牌,请求到来以后需要请求令牌,得到令牌以后就可以通过并开始业务处理,如果暂时没有可用的令牌则需要等待令牌的生产,待拿到令牌以后才能开始进行业务处理。

三、使用示例

这里看一下guava给出的使用示例。

  • 当我们有一系列的任务需要执行,并且我们期望是每秒执行2个任务:
  final RateLimiter rateLimiter = RateLimiter.create(2.0); // 速率是2令牌/秒
  void submitTasks(List tasks, Executor executor) {
    for (Runnable task : tasks) {
      r
  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值