四种限流算法

1、计数器算法

计数器算法又叫固定窗口算法,是限流算法中比较简单的一种,它是使用计数器在一定周期内对访问次数进行累加,当次数达到阈值时,触发限流策略,在进入下一周期时,就会清空访问次数,并重新计数

//AtomicLong 类支持线程安全的自增自减操作
    private AtomicLong atomicLong=new AtomicLong(1);
    @GetMapping("/consumer/doRestEcho1")
    public  String doRestEcho01() throws InterruptedException {
        //consumerService.doGetResource();
        //获取自增对象的值,然后再加1
        long num=atomicLong.getAndIncrement();

 当然这个算法也有弊端:临界问题

假设1min内服务器的负载能力为100,因此一个周期的访问量限制在100,然而在第一个周期的最后5秒和下一个周期的开始5秒时间段内,分别涌入100的访问量,虽然没有超过每个周期的限制量,但是整体上10秒内已达到200的访问量,已远远超过服务器的负载能力,由此可见,计数器算法方式限流对于周期比较长的限流,存在很大的弊端。

2、滑动窗口算法

 滑动窗口算法是将各个时间周期进行划分,分成几个小周期,然后对小周期内的访问次数进行记录,当划过一个小周期就会被删除过期的周期。当时间周期划分的越多小周期,那么滑动窗口的滚动就越平滑,限流的统计就会越精确。

此算法很好的解决计数器算法的临界问题。

3、漏斗算法

由名字不难看出,这个算法是将到达的访问请求放入一个漏斗中,以固定的速率进行放行,当漏斗中的访问请求达到阈值时,并直接进行丢弃,触发限流策略

4、令牌桶算法

令牌桶算法是程序以时间周期/限流值的速度向令牌桶中增加令牌,直到令牌桶满,请求到达时向令牌桶请求令牌,如获取到令牌则通过请求,否则触发限流策略

 

  • Sentinel 默认的限流算法是  滑动窗口算法

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值