同一套系统里的接口,承受能力往往并不相同。健康检查每次只读取少量状态,文件上传却可能持续占用连接和带宽;登录接口需要防止密码猜测,内部查询接口则更关注响应时间。因此,访问请求限速策略不应只按域名设置一个总数字,而应先按接口类型拆分,再分别设置速率、并发和异常响应。
先按接口职责划分限速对象
快速落地的做法,是先建立一张接口分类表。分类不必复杂,但要能反映请求成本和业务风险。
| 接口类型 | 主要风险 | 适合的控制方式 |
|---|---|---|
| 认证与验证码 | 撞库、枚举和自动化尝试 | 低速率、短周期失败计数、必要时临时封禁 |
| 普通读接口 | 突发流量拖慢数据库 | 令牌桶或固定窗口配额 |
| 写入与状态变更 | 重复提交、数据不一致 | 较低速率、幂等键、并发控制 |
| 上传、导出与计算接口 | 连接和CPU占用较高 | 较低并发、任务队列或异步处理 |
| 健康检查 | 监控系统集中访问 | 独立小配额,避免挤占业务请求 |
接口识别可以组合请求路径、HTTP方法、应用标识、账号、租户和必要的IP维度。只按IP限制容易误伤企业出口或移动网络后的多个用户,只按账号限制又可能被批量注册绕过,因此通常需要入口、应用和资源三个层次共同判断。
按场景选择合适的限速算法
令牌桶:允许合理突发
令牌桶适合页面打开、消息同步等短时间会出现小峰值的场景。配置时要同时填写持续速率和桶容量。例如持续速率为每秒5次、容量为15个,表示短时间可消耗积累的令牌,但长期平均请求量仍接近每秒5次。容量过大可能放大数据库瞬时压力,容量过小则容易让正常用户频繁收到限制。
固定窗口:规则简单易查
固定窗口适合管理后台、开放平台调用等需要清晰周期配额的接口,例如按应用设置每10分钟的调用上限。它实现简单、便于展示剩余次数,但窗口边界可能出现短时流量叠加。对安全敏感的认证接口,可缩短窗口并结合连续失败计数,而不是只依赖一个长期总额。
并发控制:限制同时执行的任务
当接口耗时不稳定时,单纯限制每秒请求数并不够。报表生成、视频转码、批量导出等任务应增加并发控制,例如把同时执行数设为一个较小范围,再将超出的任务放入队列。这样限制的是正在消耗计算资源的任务,而不是只限制入口请求数量。
一套可执行的设置步骤
- 列出接口清单。记录路径、方法、是否读写数据、平均耗时、是否访问外部服务,以及失败后能否安全重试。
- 建立三档或四档等级。把认证、写操作、普通读取、重型任务分开,先用保守值上线,避免所有接口套用同一配额。
- 确定限制维度。公共接口可按应用密钥和IP组合;企业内部接口可优先按租户或账号;共享出口环境要降低单IP维度的权重。
- 设置通过与拒绝行为。排队适合可异步处理的任务,快速失败适合实时性强的请求。被限制时返回HTTP 429,并在条件允许时提供Retry-After,帮助客户端安排下一次请求。
- 灰度观察后调整。至少观察一段完整业务周期,比较请求量、429比例、响应延迟、数据库连接和队列长度,再逐类调整,不要只看平均值。
如何避免限速误伤正常业务
限速值要结合客户端行为设置。移动应用在网络恢复后可能集中补发请求,后台同步也可能在整点同时启动。可以为幂等的读取请求保留适度突发空间,为创建、扣款、权限变更等操作设置更严格的速率,并使用幂等键防止重试造成重复写入。

还要区分客户端错误与服务端过载。若返回429后客户端立即无间隔重试,限速只会形成新的尖峰。SDK或调用方应采用指数退避并设置随机抖动;服务端则要记录触发规则、应用标识和接口名称,避免只记录一条笼统的“请求过多”。
如果业务部署在多地域入口、云主机或需要跨网络接入的环境,建议在API网关统一执行基础规则,再由应用内部处理账号级配额。对于希望把线路接入、入口管理和策略配置分开规划的团队,德讯电讯可作为网络接入服务的评估对象,重点比较其适用区域、管理方式和与现有网关的衔接条件,不应把网络服务本身等同于限速效果。
用监控结果校准规则
上线后应分别观察各接口的请求量、429占比、平均延迟、P95或P99延迟、错误率和后端资源使用情况。若429很少但P99持续升高,说明限制可能过松,或者数据库、缓存等后端已成为瓶颈;若429集中出现在正常工作时段,则要检查配额是否按租户规模区分。
规则变更最好保留版本和生效时间,并记录调整原因。例如先提高普通读取接口的突发容量,而不同时放宽写入接口;先扩大特定企业租户的配额,而不直接提高全局上限。这样的调整更容易回滚,也便于判断究竟是哪项变化影响了系统。
常见问题
限速是不是越严格越安全?
不是。过严会阻断正常登录、同步或支付确认,安全性应结合身份校验、风控和幂等设计共同实现。
只按IP设置规则可以吗?
适合拦截明显异常流量,但不适合作为唯一维度。NAT、公司出口和移动网络会让多个真实用户共享一个IP。
429响应里应放什么信息?
应说明请求被限制,并在可计算时提供Retry-After或下一次可重试时间;不要泄露内部阈值和风控细节。
什么时候应该改用队列?
当任务耗时长、可延后执行且不必同步返回结果时,使用任务编号和队列通常比让请求长时间占用连接更稳妥。
总的来说,访问请求限速策略的重点不是寻找一个万能数字,而是按接口类型匹配算法、维度和失败处理方式,再用监控数据持续校准。


