首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AWS API网关节流不按预期工作

AWS API网关节流不按预期工作
EN

Stack Overflow用户
提问于 2020-07-28 20:06:38
回答 2查看 2.6K关注 0票数 4

我正在尝试启用API网关节流,但它并不像预期的那样工作。

我将默认方法节流速率设置为每秒1次请求,并将突发设置为1次请求。

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

代码语言:javascript
复制
for (let i=0; i<10; i++) {
    axios.get(url);
}

预期结果将是:

  • 1次请求成功
  • 9个节流请求(HTTP 429错误)

但实际结果恰恰相反:

  • 9次请求获得成功
  • 一个节流请求(HTTP 429错误)

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

  • 16次请求获得成功
  • 4个节流请求(HTTP 429错误)

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

如果我将速率设置为每秒0请求,并将请求突发到0请求,则节流工作,所有请求都将获得节流。但是,当我将利率设定为1时,它并不像预期的那样起作用。

为什么会发生这种事?我需要将我的API限制为每秒一个请求。

EN

回答 2

Stack Overflow用户

发布于 2020-07-29 14:50:41

看起来,对于速率/突发的小值,API网关节流并不是很精确。

我设想有多个API网关运行的“实例”,而速率和突发的值“最终是一致的”。

然而,我没有找到任何有关这方面的文件。

当我发出初始请求并等待500毫秒后再发出其他99次请求时,结果“不太精确”。

示例:

代码语言:javascript
复制
axios.get(url);
setTimeout(function(){
    console.log("After 500 ms");
    for (let i=0; i<99; i++) {
        axios.get(url);
    }
}, 500);

结果:

  • 一旦我获得了成功和99节流。
  • 另一次我成功12次,节流88次。
  • 另一次,我成功33次,节流67次。

然而,很难有一致的结果。

票数 3
EN

Stack Overflow用户

发布于 2020-07-28 20:19:36

有两种方法可以对API调用应用限制:

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

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63141984

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档