繁体   English   中英

AWS API 网关节流未按预期工作

[英]AWS API Gateway Throttling not working as expected

我正在尝试启用 API 网关节流,但它没有按预期工作。

我将 Default Method Throttling Rate 设置为每秒 1 个请求,并将 Burst 设置为 1 个请求。

在此处输入图像描述

然后我在我的代码中创建了一个循环,以同时向我的 API 端点发出 10 个请求。

for (let i=0; i<10; i++) {
    axios.get(url);
}

预期结果将是:

  • 1 个成功的请求
  • 9 个受限请求(HTTP 429 错误)

但实际结果恰恰相反:

  • 9 次成功请求
  • 1 个受限请求(HTTP 429 错误)

我重复了这个过程,但是同时发出了 20 个请求,结果是:

  • 16次成功请求
  • 4 个受限请求(HTTP 429 错误)

在这个 API 方法的 CloudWatch 日志中,我发现了不同的日志流,每个日志流只有几毫秒的差异。

在此处输入图像描述

如果我将 Rate 设置为每秒 0 个请求,并将 Burst 设置为 0 个请求,则节流工作并且所有请求都得到节流。 但是当我将 Rate 和 Bust 设置为 1 时,它不会按预期工作。

为什么会这样? 我需要将我的 API 限制为每秒 1 个请求。

似乎 AWS API 网关节流对于较小的速率/突发值不是很精确。

我想象 API 网关有多个“实例”在运行,并且 rate 和 burst 的值“最终一致”。

但是我没有找到任何关于那个的文档。

当我发出一个初始请求并在发出其他 99 个请求之前等待 500 毫秒时,结果“不那么不精确”。

例子:

axios.get(url);
setTimeout(function(){
    console.log("After 500 ms");
    for (let i=0; i<99; i++) {
        axios.get(url);
    }
}, 500);

结果:

  • 一旦我获得 1 次成功和 99 次油门。
  • 其他时候我获得了 12 次成功和 88 次油门。
  • 其他时候我获得了 33 次成功和 67 次油门。

但是,很难获得一致的结果。

有两种方法可以限制 API 呼叫:

  1. 账户级节流
  2. API级和阶段级节流

当您需要应用 API 级别或阶段级别的节流时,您必须使用使用计划

使用计划指定谁可以访问一个或多个已部署的 API 阶段和方法——以及他们可以访问它们的数量和速度

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM