API网关和Lambda

时间:2016-12-02 18:15:24

标签: amazon-web-services lambda aws-lambda aws-api-gateway amazon-cloudwatch

根据我的理解,默认情况下,API网关具有1000 RPS限制 - 当超过此限制时,它将开始限制调用并返回429错误代码。通过网关,Lambda具有100个并发调用限制,当超过此限制时,它将开始限制调用并返回500(或502)错误代码。

鉴于此,在Cloudwatch上查看我的图表时,我希望我的限制调用数量更接近4XX错误的数量,或者至少高于5XX错误的数量,因为调用必须首先通过API网关为了到达Lambda。但是,看起来限制调用的数量更接近于5XX错误的数量。

我在阅读图表的方式中是否会遗漏一些内容?

1 个答案:

答案 0 :(得分:0)

根据 API Gateway Request documentation

  

API网关将稳态请求速率限制为每秒10,000个请求(rps)

这意味着API每100毫秒可以处理1,000个请求。

以上评论正确无误,说明CloudWatch没有提供完整的图片。系统的实际性能取决于lambda的运行时间和并发请求的数量。

为了更好地了解发生了什么,我建议使用下图中显示的Lambda Load Testerbuilding your own

测试

使用的lambda具有以下属性:

  1. 调用时,它将休眠1秒钟,然后退出。
  2. 保留的并发限制为25,这意味着lambda将仅执行25个并发实例。任何盈余将返回500错误。

请求:1000个并发:25

在第一个测试中,我们将分40个批次发送1000个请求,每个批次25个请求。

命令:
bash run.sh -n 1000 -c 25
输出:
Status code distribution:
  [200] 1000 responses
摘要:

在这种情况下,请求数低于lambda和API网关限制。所有处决都是成功的。

请求:1000个并发:50

在第一个测试中,我们将分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

在此测试中,我们将分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

在此测试中,我们将分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错误。