API 101 专栏 · 第 23

限流与节流:保护你的 API

2025年05月21日
限流与节流:保护你的 API

引言

API 就像是数字高速公路——如果没有交通规则,就会陷入混乱。想象一条没有限速或车道分隔线的高速公路;车辆会发生碰撞,导致交通瘫痪。同样,不受控制的 API 流量会导致服务器崩溃、安全漏洞以及用户产生挫败感。根据阿里云 2023 年的一项调查,78% 的开发者将 API 滥用视为首要安全隐患。本文探讨了**限流(Rate Limiting)节流(Throttling)**这两个保护 API 基础设施的关键策略。

问题:不受控制的 API 流量

  • 宕机风险: 如果没有限制,单个恶意攻击者可以向你的 API 发送数百万次请求,从而使服务器过载。
  • 安全漏洞: 暴力破解攻击和 DDoS 攻击会利用未受限制的端点。
  • 糟糕的用户体验: 当资源被垄断时,合法用户会遭遇延迟激增。

什么是限流与节流?

限流的定义

限流限制客户端在指定时间范围内可以发起的请求数量。例如,允许每分钟 100 次请求。主要应用场景:

  • 防止 DDoS 攻击(例如,Twitter 限制每个应用每分钟 150 万次请求)。
  • 管理免费增值模式下的资源分配。

节流的定义

节流是减缓过多的请求,而不是完全阻止它们。例如,在流量高峰期延迟响应。常见场景:

  • 平滑突发流量(例如,黑色星期五的电商大促)。
  • 优先处理高价值请求(例如,支付网关)。

主要区别

维度限流节流
方法达到限制后硬拦截逐渐减缓流量
应用场景防止滥用管理临时负载
用户影响突然拒绝(429 错误)延迟但最终会处理

为什么限流与节流很重要

防止滥用与攻击

  • 缓解暴力破解: LinkedIn 将登录尝试限制为 5 次/小时,从而降低凭据撞库的风险。
  • DDoS 防御: Cloudflare 的限流在 2023 年第三季度阻止了 1280 万次 DDoS 攻击。

确保公平使用

  • 资源分配: Zoom 的 API 为免费用户提供每月 100 万次请求,而企业级套餐则为 1000 万次。
  • 成本控制: AWS Lambda 按请求计费;节流可防止出现 5 万美元的意外账单。

合规性与 SLA

  • 正常运行时间保证: Shopify 的 API 强制执行 100 次调用/分钟,以确保 99.99% 的 SLA 合规性。

限流策略的类型

基于密钥

根据 API 密钥进行限制。示例:Stripe 限制每个 API 密钥 100 次请求/秒。OAuth 作用域可以进一步限制访问权限。

基于 IP

封禁滥用的 IP。GitHub 会暂停每小时发起超过 60 次未经身份验证请求的 IP。地理封锁(Geo-blocking)也适用于此。

基于用户

与用户角色保持一致。HubSpot 的 API 为免费用户提供 100 次调用/小时,而为企业用户提供 1 万次。

并发限制

限制同时发生的连接数。AWS RDS 限制 4 万个并发数据库连接,以防止服务器崩溃。

算法深入解析

令牌桶算法

  • 机制: 允许一定数量的突发令牌(例如 100 个),并以固定的速率(例如 10 个/秒)重新填充。
  • 应用场景: Cloudflare 使用该算法来处理限时抢购期间的流量峰值。
1graph LR
2    A[Token Bucket / 令牌桶] --> B[Token Count: 100 / 令牌数:100]
3    A --> C[Refill Rate: 10 tokens/sec / 填充速率:10 令牌/秒]
4    A --> D{Process Request? / 处理请求?}
5    D -->|Yes / 是| E[Consume 1 Token / 消耗 1 个令牌]
6    D -->|No / 否| F[Return 429 Error / 返回 429 错误]

漏桶算法

  • 机制: 以恒定的速率处理请求,并丢弃多余的请求。
  • 应用场景: RabbitMQ 在消息队列中使用该算法,以避免消息代理(Broker)过载。

实施的最佳实践

设定合理的限制

  • 负载测试: Netflix 通过模拟流量来设置最佳限制。从 1 次请求/秒开始并逐步扩展。
  • 流量模式: 分析高峰时段(例如,营业时间内的流量是平时的 3 倍)。

清晰的沟通

  • HTTP 标头: 返回 X-RateLimit-Limit: 100X-RateLimit-Remaining: 25 以及 Retry-After: 60
  • 文档: Stripe 的 API 文档明确说明了速率限制以及违规的处罚措施。

监控与调整

  • 需要跟踪的指标:
    • 429 错误率(目标 <1%)
    • P95 延迟
    • 按客户端划分的流量分布
  • 工具: 结合 Grafana 仪表板的 Prometheus;Datadog 的异常检测。

优雅的错误处理

  • 具有可操作性的提示信息:
    • ❌ "Too many requests." (请求过多。)
    • ✅ "Exceeded limit of 100 requests/minute. Retry after 60 seconds." (超过了每分钟 100 次请求的限制。请在 60 秒后重试。)

真实案例

Google Maps API

  • 每个项目每天强制限制 10 万次地理编码请求以防止滥用。

GitHub API

  • 分层限制:未经身份验证的用户为 60 次请求/小时,而经过身份验证的用户为 5000 次/小时。

Outline.com

  • 由于需要 GPU 密集型的渲染,将 PDF 导出限制为 5 次/分钟。

防止电商价格爬取 (E-Commerce Price Scraping Prevention)

  • 沃尔玛将商品 API 调用上限设为 2 次/秒,以阻止竞争对手抓取价格。

工具与服务

API 网关

  • AWS API Gateway: 支持带有自定义 Lambda 授权方的令牌桶算法。
  • Azure API Management: 带有动态限流策略的使用计划。
  • Kong: 基于插件的系统,用于基于 IP 的限制。

云解决方案

  • API7 Cloud: 作为 SaaS 控制平面,可以管理任何云端的所有 API。
  • Ambassador: Kubernetes 原生,带有基于 JWT 的限流功能。

开源选项

  • Apache APISIX: 基于 Lua 的插件,用于 JWT 和 IP 节流。

未来趋势

AI 驱动的节流

  • 异常检测: Azure API Management 使用机器学习来识别异常的流量模式。
  • 预测性扩展: Google Cloud 的 AutoML 会根据预测的需求调整限制。

标准化

  • OpenAPI 规范: 采用 x-rate-limit 扩展以实现一致的策略执行。

Serverless 集成

  • AWS Lambda: 通过预置并发(Provisioned Concurrency)集成节流功能,以处理流量峰值。

结语

对于 API 的可靠性而言,限流和节流是不容妥协的保障。通过实施分层限制、采用稳健的算法并利用相关工具,开发者可以在保持用户信任的同时确保系统的正常运行。随着 API 优先 (API-first) 架构占据主导地位,这些实践将成为数字韧性的基石。

微信咨询

获取方案