限流算法

业务中的限流场景

  • 正常业务需求
  • 突发流量
  • 业务流量

限流算法

漏桶算法

维护一个"漏桶"的队列, 当队列满了之后, 不能往里面塞请求, 直接拒绝; 而处理完一个请求之后, 会从漏桶队列里释放一个位置

令牌桶

令牌桶也是个桶, 但与漏桶算法不同, 令牌桶存的是令牌, 而不是任务, 一个线程以一定速率往桶中装填令牌, 其他线程想要处理请求的时候 就去令牌桶中拿令牌, 拿到即可以执行请求

计数限流器

比较简陋的, 现在不常用的限流算法. 每分钟刷新计数(比如刷新到100), 每次请求打过来 将计数减1, 如果计数为0, 则直接拒绝该请求
这种算法会出现不均匀的情况

限流服务形式

; 代理限流 容器限流 全链路内存熔断+弹性漏斗
图示
优点 独立组件, 易变更 资源隔离 精准控制资源
适用 高并发, 轻量请求 类MR类长周期任务 混合场景: 高并发, 混合查询
不足 无法准确预估资源消耗; 内存矛盾难以解决 资源申请分配消耗高; 资源利用率不充分 实现相对复杂