业务中的限流场景
- 正常业务需求
- 突发流量
- 业务流量
限流算法
漏桶算法
维护一个"漏桶"的队列, 当队列满了之后, 不能往里面塞请求, 直接拒绝; 而处理完一个请求之后, 会从漏桶队列里释放一个位置
令牌桶
令牌桶也是个桶, 但与漏桶算法不同, 令牌桶存的是令牌, 而不是任务, 一个线程以一定速率往桶中装填令牌, 其他线程想要处理请求的时候 就去令牌桶中拿令牌, 拿到即可以执行请求
计数限流器
比较简陋的, 现在不常用的限流算法. 每分钟刷新计数(比如刷新到100), 每次请求打过来 将计数减1, 如果计数为0, 则直接拒绝该请求
这种算法会出现不均匀的情况
限流服务形式
; | 代理限流 | 容器限流 | 全链路内存熔断+弹性漏斗 |
---|---|---|---|
图示 | |||
优点 | 独立组件, 易变更 | 资源隔离 | 精准控制资源 |
适用 | 高并发, 轻量请求 | 类MR类长周期任务 | 混合场景: 高并发, 混合查询 |
不足 | 无法准确预估资源消耗; 内存矛盾难以解决 | 资源申请分配消耗高; 资源利用率不充分 | 实现相对复杂 |