在API网关和Lambda之间插入



从我的理解中,默认情况下,API网关具有1000 rps限制 - 当越过时,它将开始进行节流呼叫并返回429个错误代码。经过网关,lambda具有100并发调用限制,当越过这时,它将开始进行节流呼叫并返回500(或502)错误代码。

鉴于在CloudWatch上查看我的图表时,我希望我的润肤接种数量更接近4xx错误的数量,或者至少高于5xx错误的数量,因为呼叫必须首先通过API Gateway为了完全到达Lambda。但是,看起来节流呼叫的数量更接近5xx错误的数量。

从阅读图表的方式中,我可能会缺少一些东西吗?

取决于您的lambda函数执行多长时间,以及在API网关节流限制之后或之后,您可以在lambda限制之前点击lambda限制。我会说您要比较的两个指标彼此独立。

根据API网关请求文档:

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

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

上面的评论是正确的,表明CloudWatch并没有为您提供全部图片。系统的实际性能取决于lambda的运行时和并发请求的数量。

要更好地了解发生了什么,我建议使用以下图像中看到的lambda负载测试仪或构建自己的。

测试

使用的lambda具有以下属性:

  1. 调用后,它睡1秒钟,然后退出。
  2. 保留并发限制为25,这意味着Lambda只能执行25个并发实例。任何盈余都将带有500误差。

请求:1000并发:25

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

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

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

请求:1000并发:50

在第一个测试中,我们将以20批次的50个请求发送1000个请求。

命令:
bash run.sh -n 1000 -c 50
输出:
Status code distribution:
  [200] 252 responses
  [500] 748 responses
概括:

在这种情况下,请求的数量低于API网关限制,因此每个请求都传递给Lambda。但是,我们在lambda上放置的50个并发请求超过了25的限制,因此约有75%的请求返回了500个错误。

请求:800并发:800

在此测试中,我们将在1批次的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个请求的2批次发送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个错误。

最新更新