Amazon web services API网关和Lambda之间的节流
据我所知,API网关在默认情况下有1000 rpm的限制——当超过这个限制时,它将开始限制调用并返回429个错误代码。通过网关,Lambda有100个并发调用限制,当超过此限制时,它将开始限制调用并返回500(或502)个错误代码 有鉴于此,在Cloudwatch上查看我的图表时,我希望限制调用的数量接近4XX错误的数量,或者至少高于5XX错误的数量,因为调用必须首先通过API网关才能到达Lambda。但是,限制调用的数量似乎接近5XX错误的数量Amazon web services API网关和Lambda之间的节流,amazon-web-services,lambda,aws-lambda,aws-api-gateway,amazon-cloudwatch,Amazon Web Services,Lambda,Aws Lambda,Aws Api Gateway,Amazon Cloudwatch,据我所知,API网关在默认情况下有1000 rpm的限制——当超过这个限制时,它将开始限制调用并返回429个错误代码。通过网关,Lambda有100个并发调用限制,当超过此限制时,它将开始限制调用并返回500(或502)个错误代码 有鉴于此,在Cloudwatch上查看我的图表时,我希望限制调用的数量接近4XX错误的数量,或者至少高于5XX错误的数量,因为调用必须首先通过API网关才能到达Lambda。但是,限制调用的数量似乎接近5XX错误的数量 我阅读图表的方式是否有遗漏 根据Lambda函数
我阅读图表的方式是否有遗漏 根据Lambda函数执行所需的时间以及请求的分布情况,您可以在API网关节流限制之前或之后达到Lambda限制。我要说的是,您正在比较的两个指标是相互独立的 根据: API网关将稳态请求速率限制为每秒10000个请求(rps) 这意味着每100毫秒API可以处理1000个请求 上面的评论是正确的,说明CloudWatch并没有向您提供全部信息。系统的实际性能取决于lambda的运行时和并发请求的数量 为了更好地理解正在发生的事情,我建议使用下面的图片中看到的或 测试 使用的lambda具有以下属性:
在这种情况下,请求数超过了API网关的限制,并且有几次连接尝试被拒绝。那些通过网关的用户仍然符合我们对lambda设置的保留并发限制,并返回了500个错误。“我希望我的限制调用数接近4XX错误数”为什么?那是两件不相干的事,不是吗?您自己也说过,Lambda节流阀会生成5XX错误,而API网关速率限制事件会生成4XX错误,根据定义,这不会被视为Lambda节流阀,因为Lambda从未看到请求,因为API网关会立即拒绝它。确认。。。Cloudwatch中的“节流”指标是Lambda指标,而不是API网关。。。不是吗?这很有道理。如果是这样的话,有没有办法看到API网关阻止的调用?我不这么认为,因为它们可能在处理路径的早期就被拒绝了。。。但这只是一个直观的猜测。是的,尽管API-GW 1000 req/s和Lambda 100并发调用限制都是软限制,AWS支持将为您增加。您不需要付费支持计划来提交此类支持请求——您所需要的只是对您的用例进行简要说明,以证明增加的合理性。但是如果API网关限制为每秒10000个请求(rps)为什么说只有3000个请求就超过了限制?在本例中,我们使用“Reserved Concurrency”字段来减少此lamada的限制,并生成上面所示的结果。(见“测试”一节)
bash run.sh -n 1000 -c 25
Status code distribution:
[200] 1000 responses
bash run.sh -n 1000 -c 50
Status code distribution:
[200] 252 responses
[500] 748 responses
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)
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)