用途:为 API 实现限流与节流,防止认证端点被暴力破解与撞库、阻止自动化脚本滥用与资源耗尽、为不同 API 消费层级(免费、高级、企业)设置公平配额、在应用层抵御拒绝服务攻击,并满足要求 API 滥用防护的合规需求。资料明确提示:限流不应作为唯一防御手段,需与认证、授权和 WAF 规则结合。
主要能力:支持令牌桶、滑动窗口、固定窗口三种算法;可按用户、按 IP、按端点配置限额;支持分层配额(免费 60 次/分、高级 300 次/分、企业 1000 次/分等示例配置);对认证端点设置更严格限制(如登录 5 次/分/IP);对资源密集型端点单独限制(搜索、导出、批量导入);通过 Redis 与 Lua 脚本实现分布式限流,保证多实例间计数准确;返回 X-RateLimit-Limit、X-RateLimit-Remaining、X-RateLimit-Reset 响应头,超限时返回 429 与 Retry-After。
使用方式:前置条件包括 Redis 6.0+(或单实例内存方案)、API 框架(Express.js、FastAPI、Spring Boot、Django REST Framework)、监控系统(Prometheus、CloudWatch、Datadog)、对正常流量与峰值的了解、负载测试工具(k6、Gatling、Locust)。工作流为:设计限流策略、实现滑动窗口限流器、实现令牌桶限流器、按用户套餐分层限流、为微服务做分布式限流。
适用场景:公开 API 的分层配额管理、认证端点防护、资源密集型端点保护、微服务架构下的集中限流。
限制与注意:避免仅用内存限流导致跨实例绕过;认证端点需单独限流;固定窗口在边界可能产生突发;成功响应也应带限流头;不可未经验证直接信任 X-Forwarded-For。具体部署细节与完整代码以原文为准。