Amazon API Gateway
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

限制 API 请求以获得更高的吞吐量

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

如果请求提交超过稳态请求速率和突增限制,则 API Gateway 将使超出限制的请求失败,并向客户端返回 429 Too Many Requests 错误响应。捕获此类异常后,客户端可以立即以速率限制的方式重新提交失败的请求,同时遵守 API Gateway 限制。

作为 API 开发人员,您可以针对各个 API 阶段或方法设置限制,以提高账户中所有 API 的整体性能。或者,您可以启用使用计划,将客户端请求提交限制在指定的请求速率和配额内。这将限制请求提交的总量,使它们不会大幅超过账户级别的限制。

账户级别限制

默认情况下,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 所有者,您可以设置默认方法限制,用于覆盖 API 中特定阶段或各个方法的账户级别请求限制。即使您将默认方法限制设置为高于账户级别限制,默认方法限制也不会超出账户级别的速率限制。

您可以使用 API Gateway 控制台或通过调用 API Gateway REST API 来设置默认方法限制。有关如何使用控制台的说明,请参阅更新阶段设置