常见的限流算法
- 固定时间窗口限流算法
- 滑动时间窗口限流算法
- 令牌桶限流算法
- 漏斗桶限流算法
固定时间窗口限流算法
这个实现原理比较简单: 我们选择一个起始时间点和结束时间点(形成一个时间窗口),给这个时间窗口创建一个计数器,对进入的流量进行累加,当达到我们限制的最大值,触发限流熔断 拒接接口请求
- 优点 :实现简单
- 确定 :流量不平滑 无法应对两个窗口临界值的突发流量
滑动时间窗口限流算法
这个相对与固定时间窗口限流算法在实现上比较复杂,同样的我们有一个起始时间点和一个结束时间点(形成一个滑动时间窗口)比如大小为1s,将这个窗口等分的拆分,比如拆分成10份,每一份配置一个 流量计数器 我们需要保证10份累加的流量不能超过 整体时间窗口限制的最大值,随着时间的平移,移除左边的份额 给新加入的右边份额 空出流量剩余,则可以一直保证 在任意一个时间窗口 都不会超过最大值,流量比较平稳。
- 优点 : 流量控制的比较平滑
- 缺点 : 实现比较复杂
令牌桶限流算法
这里直接贴大佬的讲解
漏斗桶限流算法
这里直接贴大佬的讲解