后端完整解析唯品会 场景
常见的限流算法你知道哪些??
限流控制进入系统的速率,熔断阻止持续调用故障依赖;两者应与超时、重试预算和降级共同设计。
面试后端互联网公司面经互联网中厂唯品会system-design核心题完整解析编辑精选
直接结论
常见限流包括固定窗口、滑动窗口、漏桶和令牌桶。固定窗口简单但边界处可能突发;滑动窗口更平滑但状态成本更高;漏桶强调以稳定速率排出;令牌桶按速率补充令牌并允许受控突发。熔断器不是限流算法:它根据依赖失败或慢调用状态从关闭转为打开,暂时快速失败,经过冷却后半开探测恢复。限流保护容量,熔断隔离故障,通常需要一起使用。
原理与步骤
限流键可以是全局、租户、用户、接口或下游资源,算法必须定义时钟、分布式一致性和超限行为。令牌桶的容量决定最大突发,补充速率决定长期平均;分布式实现要考虑多节点竞争和故障降级。熔断器按调用结果维护状态,打开后不再让常规流量压向故障依赖,半开只放少量探测。超时应先限定单次调用,重试必须有退避、抖动和总预算,否则会放大故障并让熔断指标失真。
工程场景
对外 API 可按租户设置令牌桶,允许短时突发但限制长期速率;服务访问支付网关设置严格截止时间,并按失败率与慢调用率触发熔断,打开时返回可解释的降级响应。网关限流不能替代服务内部对数据库连接、工作队列的容量保护。指标应包含允许、拒绝、排队、超时、熔断状态和半开探测结果,并为高价值请求设计独立配额,避免一个噪声租户耗尽全局资源。
验证与边界
限流阈值不是凭经验写死,应通过容量测试和 SLO 反推,并在实例扩缩时明确全局与单机口径。熔断器不应把业务校验失败都计为依赖故障,也不能替代健康检查。排队会把拒绝转成延迟和内存占用,必须有上限。测试要模拟窗口边界、时钟偏差、Redis 或协调器不可用、依赖慢而非直接报错,以及半开期间恢复和再次失败,确认不会出现同步重试风暴。
答题练习
- 1四类限流算法的突发差异
- 2熔断与限流职责不同
- 3超时重试预算必须协同
常见错误
- 把熔断器当另一种限流器
- 只设置阈值不定义分布式口径
可能追问
- 令牌桶容量如何从 SLO 推导
- 半开状态怎样选择探测流量
来源记录
- 原始来源
- 小林coding
- 来源页面
- 唯品会 Java 面试
- 最近收录
- 2026-07-05
- 官方复核
- Microsoft Learn