簡體   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