Guava —— RateLimiter 接口限流

限流==保险丝策略,可借助框架如spring cloud中Hystrix组件实现。今天介绍使用guava RateLimiter 类实现接口限流。

常见限流算法

漏桶算法

     漏桶(Leaky Bucket)算法思路很简单,水(请求)先进入到漏桶里,漏桶以一定的速度出水(接口有响应速率),当水流入速度过大会直接溢出(访问频率超过接口响应速率),然后就拒绝请求,可以看出漏桶算法能强行限制数据的传输速率.

     两个变量,一个是桶的大小即支持流量突发增多时可以存多少的水(burst),另一个是水桶漏洞的大小(rate),伪代码如下:


    double rate; // leak rate in calls/s
    double burst; // bucket size in calls
    long refreshTime; // time for last water refresh
    double water; // water count at refreshTime

    refreshWater() {
        long now = getTimeOfDay();
        //水随着时间流逝,不断流走,最多就流干到0.
        water = max(0, water - (now - refreshTime) * rate);
        refreshTime = now;
    }

    bool permissionGranted() {
        refreshWater();
        if (water < burst) { 
            // 水桶还没满,继续加1
            water++;
            return true;
        } 
        return false;
    }

令牌桶算

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值