簡體   English   中英

API Gateway和Lambda之間的限制

[英]Throttling between API Gateway and Lambda

根據我的理解,API Gateway默認具有1000 RPS限制 - 當超過此限制時,它將開始限制調用並返回429錯誤代碼。 通過網關,Lambda具有100個並發調用限制,當超過此限制時,它將開始限制調用並返回500(或502)錯誤代碼。

鑒於此,當在Cloudwatch上查看我的圖表時,我希望我的限制調用數量更接近4XX錯誤的數量,或者至少高於5XX錯誤的數量,因為調用必須首先通過API網關才能到達Lambda。 但是,看起來限制調用的數量更接近於5XX錯誤的數量。

在我閱讀圖表的方式中,我可能會遺漏一些東西嗎?

根據您的Lambda函數執行所需的時間以及請求的傳播程度,您可以在API Gateway限制限制之前或之后達到Lambda限制。 我會說你要比較的兩個指標是相互獨立的。

根據API網關請求文檔

API網關將穩態請求率限制為每秒10,000個請求(rps)

這意味着API每100毫秒可以處理1,000個請求。

上面的評論是正確的,說明CloudWatch沒有全面了解您的情況。 系統的實際性能取決於lambda的運行時間和並發請求的數量。

為了更好地了解發生了什么,我建議使用Lambda Load Tester ,如下圖所示或構建自己的

測試

使用的lambda具有以下屬性:

  1. 在調用時,它會休眠1秒然后退出。
  2. 保留並發限制為25,這意味着lambda將只執行25個並發實例。 任何盈余都將返回500錯誤。

要求:1000並發:25

在第一次測試中,我們將在40個批次的25個請求中發送1000個請求。

命令:
 bash run.sh -n 1000 -c 25 
輸出:
bash run.sh -n 1000 -c 50
摘要:

在這種情況下,請求數低於lambda和API網關限制。 所有處決都成功了。

要求:1000並發:50

在第一次測試中,我們將分20批50個請求發送1000個請求。

命令:
 bash run.sh -n 1000 -c 50 
輸出:
Status code distribution:
  [200] 69 responses
  [500] 1938 responses

Error distribution:
  [985] Get https://drlhus6zf3.execute-api.us-east-1.amazonaws.com/dev/dummy: dial tcp 52.84.175.209:443: connect: connection refused
  [8]   Get https://drlhus6zf3.execute-api.us-east-1.amazonaws.com/dev/dummy: net/http: request canceled (Client.Timeout exceeded while awaiting headers)
摘要:

在這種情況下,請求數低於API網關限制,因此每個請求都傳遞給lambda。 但是,50個並發請求超過了我們放置在lambda上的25個限制,因此大約75%的請求返回了500個錯誤。

要求:800並發:800

在此測試中,我們將在每批800個請求中發送800個請求。

命令:
 bash run.sh -n 800 -c 800 
輸出:
 Status code distribution: [200] 34 responses [500] 765 responses Error distribution: [1] Get https://XXXXXXX.execute-api.us-east-1.amazonaws.com/dev/dummy: net/http: request canceled (Client.Timeout exceeded while awaiting headers) 
摘要:

在這種情況下,請求數量開始超越API網關的限制,您可以看到其中一個請求超時。 800個並發請求遠遠超過了我們放在lambda上的25個保留並發限制,在這種情況下,大約95%的請求返回了500個錯誤。

請求:3000並發:1500

在此測試中,我們將分兩批1500個請求發送3000個請求。

命令:
 bash run.sh -n 3000 -c 1500 
輸出:
 Status code distribution: [200] 69 responses [500] 1938 responses Error distribution: [985] Get https://drlhus6zf3.execute-api.us-east-1.amazonaws.com/dev/dummy: dial tcp 52.84.175.209:443: connect: connection refused [8] Get https://drlhus6zf3.execute-api.us-east-1.amazonaws.com/dev/dummy: net/http: request canceled (Client.Timeout exceeded while awaiting headers) 
摘要:

在這種情況下,請求數超出了API網關的限制,並且拒絕了幾個連接嘗試。 通過網關的那些仍然遇到我們放在lambda上的保留並發限制並返回500錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM