四种【限流】算法介绍

使用场景

  1. 控制成本:限制用户调用总次数。
  2. 保护服务:用户在短时间内疯狂使用,导致服务器资源被占满,其他用户无法使用。

思考限流阈值多大合适?参考正常用户的使用,比如限制单个用户在每秒只能使用1次。

单机限流实现

  • Guava RateLimiter

多机限流实现

  • Redisson

固定窗口限流

单个时间段作为一个窗口,每个窗口会限制请求的次数。如果请求的次数大于阈值后,则拒绝请求。

在这里插入图片描述

缺点:

临界问题:如果在上一个窗口的末尾发送了许多的请求,并且在当前窗口的开始也发送了许多的请求,则有可能当前系统的请求数超过阈值。

滑动窗口限流

将单个时间段又划分成多个小的周期,比如:1s 可以分成 5 个 0.2s 的小周期。每经过 0.2s 则向右滑动窗口。解决了固定窗口的临界问题。

在这里插入图片描述

缺点:

实现相对复杂,而且滑动单位不好选取。

漏桶算法

类似于漏斗注水滴水。以任意速率注入水,以固定速率滴水。如果超出了当前的容量则拒绝。

在这里插入图片描述

缺点:

只能按固定速率一个一个处理请求。

令牌桶

按固定速率生成令牌,并将其加入到桶中。如果桶已满,生成的令牌将被丢弃。

当一个请求到达时,检查桶中是否有足够的令牌。如果有,则从桶中移除相应数量的令牌,允许请求通过;否则,拒绝请求或将其排队等待。

在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值