根据我的理解,默认情况下,API网关具有1000 RPS限制 - 当超过此限制时,它将开始限制调用并返回429错误代码。通过网关,Lambda具有100个并发调用限制,当超过此限制时,它将开始限制调用并返回500(或502)错误代码。
鉴于此,在Cloudwatch上查看我的图表时,我希望我的限制调用数量更接近4XX错误的数量,或者至少高于5XX错误的数量,因为调用必须首先通过API网关为了到达Lambda。但是,看起来限制调用的数量更接近于5XX错误的数量。
我在阅读图表的方式中是否会遗漏一些内容?
答案 0 :(得分:0)
根据 API Gateway Request documentation:
API网关将稳态请求速率限制为每秒10,000个请求(rps)
这意味着API每100毫秒可以处理1,000个请求。
以上评论正确无误,说明CloudWatch没有提供完整的图片。系统的实际性能取决于lambda的运行时间和并发请求的数量。
为了更好地了解发生了什么,我建议使用下图中显示的Lambda Load Tester或building your own。
使用的lambda具有以下属性:
在第一个测试中,我们将分40个批次发送1000个请求,每个批次25个请求。
命令:bash run.sh -n 1000 -c 25
输出:
Status code distribution:
[200] 1000 responses
摘要:
在这种情况下,请求数低于lambda和API网关限制。所有处决都是成功的。
在第一个测试中,我们将分20批发送1000个请求,每批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个请求。
命令: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个错误。
在此测试中,我们将分2批发送3000个请求,每批1500个请求。
命令: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错误。