限流与熔断的算法实现对比
【摘要】 对比固定窗口、滑动窗口、令牌桶、漏桶等限流算法,以及熔断器的三种状态机实现与参数调优思路。
背景
流量治理是服务稳定性的底座。限流控制"进多少",熔断控制"断了谁",两者常被混用,但解决的问题完全不同。
限流算法对比
固定窗口计数
实现最简单:每分钟计数,超阈值拒绝。缺点是窗口边界突变——第 59 秒打满、第 61 秒再打满,实际两秒内通过了两倍配额。
滑动窗口
把窗口细分成若干小格,按时间滑动统计,解决了边界问题,精度取决于格子粒度。代价是内存开销随粒度线性增长。
令牌桶
以恒定速率生成令牌,请求取令牌才放行,桶内可积累一定令牌以应对突发。既能限平均速率,又能容忍短时突发,是实践中最常用的方案。
漏桶
请求先入桶,以固定速率流出,超出桶容量则拒绝。它强制均匀输出,适合保护下游不被突发压垮,但不允许突发。
选择思路:需要容忍突发用令牌桶,需要严格平滑用漏桶,实现成本敏感可用滑动窗口。
熔断器状态机
熔断器是有限状态机,三个状态:
关闭:正常放行,同时统计失败率。打开:失败率超阈值后切断调用,直接返回降级结果。半开:打开后经过冷却时间,放行少量试探请求,成功则回到关闭,失败则重新打开。
关键参数
失败率阈值(常见 50%)、最小请求数(样本太少不算熔断)、冷却时长(打开后多久试探)、半开试探数量。参数调得过激会造成抖动,过保守则失去保护意义。
小结
限流是第一道闸,熔断是最后一道保险。限流保护自己不被冲垮,熔断防止自己被慢依赖拖死。两者配合,才能构建有韧性的服务。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)