标准答案
- 单机内存限流延迟低、实现简单,适合单实例或作为本地保护,但多实例下计数不全,扩缩容会改变实际配额。
- 网关适合按 IP、API Key、租户、路径和全局入口做统一粗粒度限流,能在流量进入业务前保护集群。
- 缓存集群适合跨实例共享配额和窗口计数,但会增加网络依赖与热点 Key 风险,故障时要明确是降级放行、拒绝还是使用本地兜底。
- 业务服务最了解用户状态、订单类型、风控等级和资源成本,适合做精细业务配额;数据库、消息和下游也应各自有并发或容量上限。
题目解析
限流不是只为了防攻击。它还用于公平分配资源、保护慢下游、避免队列无限积压。一个请求可能经过多层限制,因此要避免每一层都长时间排队或重复重试。
策略需要配套返回语义、观测和客户端退避。没有区分可重试的 429 与业务拒绝,客户端很容易形成更大的重试风暴。
常见误区
- 只在业务最深层限流,入口流量已经耗尽连接和线程。
- 所有维度共享一个 Key,导致一个大客户或攻击 IP 影响全部用户。