后端完整解析唯品会 场景

常见的限流算法你知道哪些??

限流控制进入系统的速率,熔断阻止持续调用故障依赖;两者应与超时、重试预算和降级共同设计。

面试后端互联网公司面经互联网中厂唯品会system-design核心题完整解析编辑精选

直接结论

常见限流包括固定窗口、滑动窗口、漏桶和令牌桶。固定窗口简单但边界处可能突发;滑动窗口更平滑但状态成本更高;漏桶强调以稳定速率排出;令牌桶按速率补充令牌并允许受控突发。熔断器不是限流算法:它根据依赖失败或慢调用状态从关闭转为打开,暂时快速失败,经过冷却后半开探测恢复。限流保护容量,熔断隔离故障,通常需要一起使用。

原理与步骤

限流键可以是全局、租户、用户、接口或下游资源,算法必须定义时钟、分布式一致性和超限行为。令牌桶的容量决定最大突发,补充速率决定长期平均;分布式实现要考虑多节点竞争和故障降级。熔断器按调用结果维护状态,打开后不再让常规流量压向故障依赖,半开只放少量探测。超时应先限定单次调用,重试必须有退避、抖动和总预算,否则会放大故障并让熔断指标失真。

工程场景

对外 API 可按租户设置令牌桶,允许短时突发但限制长期速率;服务访问支付网关设置严格截止时间,并按失败率与慢调用率触发熔断,打开时返回可解释的降级响应。网关限流不能替代服务内部对数据库连接、工作队列的容量保护。指标应包含允许、拒绝、排队、超时、熔断状态和半开探测结果,并为高价值请求设计独立配额,避免一个噪声租户耗尽全局资源。

验证与边界

限流阈值不是凭经验写死,应通过容量测试和 SLO 反推,并在实例扩缩时明确全局与单机口径。熔断器不应把业务校验失败都计为依赖故障,也不能替代健康检查。排队会把拒绝转成延迟和内存占用,必须有上限。测试要模拟窗口边界、时钟偏差、Redis 或协调器不可用、依赖慢而非直接报错,以及半开期间恢复和再次失败,确认不会出现同步重试风暴。

答题练习

  1. 1四类限流算法的突发差异
  2. 2熔断与限流职责不同
  3. 3超时重试预算必须协同

常见错误

  • 把熔断器当另一种限流器
  • 只设置阈值不定义分布式口径

可能追问

  • 令牌桶容量如何从 SLO 推导
  • 半开状态怎样选择探测流量

来源记录

原始来源
小林coding
来源页面
唯品会 Java 面试
最近收录
2026-07-05
官方复核
Microsoft Learn