根据
API网关请求文档:
API网关将稳态请求速率限制为10,000个每秒(rps)
这意味着每100毫秒API可以处理1,000个请求。
上面的评论指出CloudWatch没有给你完整的图片。你系统的实际性能取决于lambda的运行时间和并发请求的数量。
为了更好地了解发生了什么,我建议使用以下图片中看到的
Lambda负载测试器或
构建你自己的。
测试
该lambda具有以下属性:
- 在调用时,它会休眠1秒钟,然后退出。
- 具有25个保留并发限制,这意味着lambda只执行25个并发实例。任何剩余量都将返回500错误。
请求数量:1000 并发数:25
在第一次测试中,我们将发送1000个请求,每批发送25个请求,共40批。
命令:
bash run.sh -n 1000 -c 25
输出
Status code distribution:
[200] 1000 responses
简要概述:
在这个案例中,请求的数量在 Lambda 和 API Gateways 的限制以下。所有执行都成功了。
请求:1000 同时:50
在第一次测试中,我们将发送 1000 个请求,分为 20 批,每批 50 个请求。
bash run.sh -n 1000 -c 50
输出
Status code distribution:
[200] 252 responses
[500] 748 responses
总结:
在这种情况下,请求的数量低于API网关的限制,因此每个请求都被传递给了Lambda。然而,50个并发请求超过了我们对Lambda设置的25个限制,因此大约75%的请求返回了500错误。
请求:800 并发:800
在这个测试中,我们将发送800个请求,每个批次包含800个请求。
bash run.sh -n 800 -c 800
Output:
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
在这个测试中,我们将发送3000个请求,分为2批,每批1500个请求。
bash run.sh -n 3000 -c 1500
Output:
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错误。