前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >限流算法简介及Guava RateLimiter令牌桶限流介绍

限流算法简介及Guava RateLimiter令牌桶限流介绍

作者头像
夹胡碰
发布2020-08-28 10:01:17
1.2K0
发布2020-08-28 10:01:17
举报
文章被收录于专栏:程序猿~

参考

  1. 常用4种限流算法介绍及比较
  2. 超详细的Guava RateLimiter限流原理解析

限流算法简介

1.计数器(固定窗口)算法

计数器算法是使用计数器在周期内累加访问次数,当达到设定的限流值时,触发限流策略。下一个周期开始时,进行清零,重新计数。 对于秒级以上的时间周期来说,会存在一个非常严重的问题,那就是临界问题

2. 滑动窗口算法

滑动窗口算法是将时间周期分为N个小周期,分别记录每个小周期内访问次数,并且根据时间滑动删除过期的小周期。 当滑动窗口的格子划分的越多,那么滑动窗口的滚动就越平滑,限流的统计就会越精确,此算法可以很好的解决固定窗口算法的临界问题。

3. 漏桶算法

漏桶是按照常量固定速率流出请求,当流入的请求数累积到漏桶容量时,则新流入的请求被拒绝 漏桶限制的是常量流出速率

4. 令牌桶算法

令牌桶是按照固定速率往桶中添加令牌,请求是否被处理需要看桶中令牌是否足够,当令牌数减为零时则拒绝新的请求; 令牌桶限制的是平均流入速率,允许突发请求,只要有令牌就可以处理

Guava RateLimiter Demo

1.平滑突发限流
代码语言:javascript
复制
public void testSmoothBursty() {
    RateLimiter r = RateLimiter.create(5);
    while (true) {
      System.out.println("get 1 tokens: " + r.acquire() + "s");
    }
    /**
     * output: 基本上都是0.2s执行一次,符合一秒发放5个令牌的设定。
     * get 1 tokens: 0.0s 
     * get 1 tokens: 0.182014s
     * get 1 tokens: 0.188464s
     * get 1 tokens: 0.198072s
     * get 1 tokens: 0.196048s
     * get 1 tokens: 0.197538s
     * get 1 tokens: 0.196049s
     */
}
2.平滑预热限流
代码语言:javascript
复制
public void testSmoothwarmingUp() {
    RateLimiter r = RateLimiter.create(2, 3, TimeUnit.SECONDS);
    while (true)
    {
      System.out.println("get 1 tokens: " + r.acquire(1) + "s");
      System.out.println("get 1 tokens: " + r.acquire(1) + "s");
      System.out.println("get 1 tokens: " + r.acquire(1) + "s");
      System.out.println("get 1 tokens: " + r.acquire(1) + "s");
      System.out.println("end");
      /**
       * output:
       * get 1 tokens: 0.0s
       * get 1 tokens: 1.329289s
       * get 1 tokens: 0.994375s
       * get 1 tokens: 0.662888s  上边三次获取的时间相加正好为3秒
       * end
       * get 1 tokens: 0.49764s  正常速率0.5秒一个令牌
       * get 1 tokens: 0.497828s
       * get 1 tokens: 0.49449s
       * get 1 tokens: 0.497522s
       */
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 参考
  • 限流算法简介
    • 1.计数器(固定窗口)算法
      • 2. 滑动窗口算法
        • 3. 漏桶算法
          • 4. 令牌桶算法
          • Guava RateLimiter Demo
            • 1.平滑突发限流
              • 2.平滑预热限流
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档