漏洞算法实现漏斗限流

本文介绍了漏斗算法的思想,通过比喻说明其工作原理。当灌水速率大于漏水速率,漏斗会保持满状态,反之则可以持续灌水。在实际应用中,漏斗算法用于限流,例如Redis的redis-cell模块就使用此算法实现原子限流操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

漏洞算法实现漏斗限流

漏斗算法思想

漏斗的容量是有限的,如果将漏嘴堵住,然后一直往里面灌水,它就会变满,直至再也装不进去。如果将漏嘴放开,水就会往下流,流走一部分之后,就又可以继续往里面灌水。如果漏嘴流水的速率大于灌水的速率,那么漏斗永远都装不满。如果漏嘴流水速率小于灌水的速率,那么一旦漏斗满了,灌水就需要暂停并等待漏斗腾空。所以,漏斗的剩余空间就代表着当前行为可以持续进行的数量,漏嘴的流水速率代表着系统允许该行为的最大频率。

public class FunnelRateLimiter {
   

  static class Funnel {
   
    int capacity;//容量
    float leakingRate;//漏斗流水速度
    int leftQuota;//漏斗剩余空间
    long leakingTs;//上一次漏水时间

    public Funnel(int capacity, float leakingRate) {
   
      this.capacity = capacity;
      this.leakingRate = leakingRate;
      this.leftQuota = capacity;
      this.leakingTs = System.currentTimeMillis
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值