保护 WebSocket API - Amazon API Gateway
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

保护 WebSocket API

为了防止过多请求耗尽 API,Amazon API Gateway 将使用令牌存储桶算法(其中,一个令牌即一个请求)限制对 API 的请求。具体来说,API Gateway 针对账户中的所有 API 设置请求提交稳态速率限制和突增限制。在令牌存储桶算法中,突增即存储桶的最大大小。

如果请求提交超过稳态请求速率和突增限制,则 API Gateway 将使超出限制的请求失败,并向客户端返回 429 Too Many Requests 错误响应。当客户端收到这些错误响应时,客户端可以通过限制速率的方式重新提交失败的请求,同时遵守 API Gateway 限制。

账户级别限制

默认情况下,API Gateway 将稳态请求速率限制在每秒 10000 个请求 (rps)。它将一个 AWS 账户中所有 API 的突增 (即存储桶的最大大小) 限制在 5000 个请求。在 API Gateway 中,突增限制对应于 API Gateway 在不返回 429 Too Many Requests 错误响应的情况下在任意时刻可以完成的最大并发请求提交数量。

为帮助理解这些限制,下面提供了几个示例,它们采用默认突增限制和默认账户级别速率限制:

  • 如果调用方在一秒内均匀地提交 10000 个请求(例如每毫秒提交 10 个请求),则 API Gateway 会处理所有请求,不会删除任何请求。

  • 如果调用方在第一毫秒提交 10000 个请求,则 API Gateway 会响应其中 5000 个请求,并将剩余请求数量限制在一秒期间内。

  • 如果调用方在第一毫秒提交 5000 个请求,然后在剩余 999 毫秒内均匀提交另外 5000 个请求(例如每毫秒大约提交 5 个请求),则 API Gateway 会在一秒内处理所有 10000 个请求,不会返回 429 Too Many Requests 错误响应。

  • 如果调用方在第一毫秒提交 5000 个请求,然后等到第 101 毫秒再提交另外 5000 个请求,则 API Gateway 会处理 6000 个请求,并限制一秒内的剩余请求数量。这是因为,在 10000 rps 的速率下,API Gateway 已经在前 100 毫秒后响应了 1000 个请求,因此清空了存储桶中同样的数量。在接下来的 5000 个请求高峰中,有 1000 个请求会进入存储桶并排队等待处理。其他 4000 个超出存储桶容量的请求会被丢弃。

  • 如果调用方在第一毫秒提交 5000 个请求,在第 101 毫秒提交 1000 个请求,然后在剩余 899 毫秒内均匀提交另外 4000 个请求,则 API Gateway 会在一秒内处理所有 10000 个请求,不会施加限制。

更普遍的情况是,在给定的某个时间,当存储桶包含 b 且存储桶最大容量为 B 时,可添加到存储桶的最大额外令牌数量为 Δ=B-b。这个最大额外令牌数量对应于客户端在不收到任何 429 错误响应的情况下可以提交的最大额外并发请求数量。

一般而言,Δ 随时间变化。值的范围从存储桶已满时的零 (即 b=B) 到存储桶为空时的 B (即 b=0)。范围取决于请求处理速率(令牌从存储桶中删除的速率)和速率限制速率(令牌添加到存储桶中的速率)。

下面的图表显示了最大额外并发请求数量 Δ 随着时间的变化趋势。此图表假设存储桶中的令牌数量以综合速率 r 下降,从空存储桶开始。


                在指定令牌存储桶大小和综合消耗速率下,突增与时间的对应关系

客户可以请求我们放宽账户级别的速率限制。要请求增加账户级别限制,请联系 AWS 支持中心。有关更多信息,请参阅 API Gateway 配额

路由级别限制

您可以设置路由级别限制,用于覆盖 API 中特定阶段或各个路由的账户级别请求限制。即使您将默认路由限制设置为高于账户级别限制,默认路由限制也不会超出账户级别的速率限制。