我正在尝试启用 API 网关限制,但它没有按预期工作。
我将默认方法限制速率设置为每秒 1 个请求,并将突发设置为 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 日志中,我发现了不同的日志流,每个日志流只有几毫秒的差异。
如果我将速率设置为每秒 0 个请求并将突发设置为 0 个请求,则限制将起作用并且所有请求都会受到限制。但是当我将 Rate 和 Bust 设置为 1 时,它无法按预期工作。
为什么会发生这种情况?我需要将 API 限制为每秒仅 1 个请求。
对于较小的速率/突发值,AWS API Gateway 节流似乎不是很精确。
我想象API网关有多个“实例”正在运行,并且速率和突发的值“最终一致”。
但是我没有找到任何相关的文档。
当我发出初始请求并等待 500 毫秒后再发出其他 99 个请求时,结果“不太不精确”。
Example:
axios.get(url);
setTimeout(function(){
console.log("After 500 ms");
for (let i=0; i<99; i++) {
axios.get(url);
}
}, 500);
Results:
- 有一次我获得了 1 次成功和 99 次节流。
- 其他时候我获得了 12 次成功和 88 次节流。
- 其他时候我获得了 33 次成功和 67 次失败。
然而,很难获得一致的结果。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)