限流与熔断的算法实现对比

举报
yd_273762305 发表于 2026/11/12 11:44:59 2026/11/12
【摘要】 对比固定窗口、滑动窗口、令牌桶、漏桶等限流算法,以及熔断器的三种状态机实现与参数调优思路。

背景

流量治理是服务稳定性的底座。限流控制"进多少",熔断控制"断了谁",两者常被混用,但解决的问题完全不同。

限流算法对比

固定窗口计数

实现最简单:每分钟计数,超阈值拒绝。缺点是窗口边界突变——第 59 秒打满、第 61 秒再打满,实际两秒内通过了两倍配额。

滑动窗口

把窗口细分成若干小格,按时间滑动统计,解决了边界问题,精度取决于格子粒度。代价是内存开销随粒度线性增长。

令牌桶

以恒定速率生成令牌,请求取令牌才放行,桶内可积累一定令牌以应对突发。既能限平均速率,又能容忍短时突发,是实践中最常用的方案。

漏桶

请求先入桶,以固定速率流出,超出桶容量则拒绝。它强制均匀输出,适合保护下游不被突发压垮,但不允许突发。

选择思路:需要容忍突发用令牌桶,需要严格平滑用漏桶,实现成本敏感可用滑动窗口。

熔断器状态机

熔断器是有限状态机,三个状态:

关闭:正常放行,同时统计失败率。打开:失败率超阈值后切断调用,直接返回降级结果。半开:打开后经过冷却时间,放行少量试探请求,成功则回到关闭,失败则重新打开。

关键参数

失败率阈值(常见 50%)、最小请求数(样本太少不算熔断)、冷却时长(打开后多久试探)、半开试探数量。参数调得过激会造成抖动,过保守则失去保护意义。

小结

限流是第一道闸,熔断是最后一道保险。限流保护自己不被冲垮,熔断防止自己被慢依赖拖死。两者配合,才能构建有韧性的服务。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。