负载测试-高并发=使用Lambda时高延迟?

时间:2019-06-07 07:55:23

标签: node.js amazon-web-services load-testing serverless

我创建了一个lamdba函数,该函数从DynamoDB中获取一条记录。

现在,我正在尝试获取有关体系结构性能的一些数据(在以后的迭代中将启用DAX)。

对于测试,我使用的是loadtest package。下面是我的2个测试的详细信息

测试#1

AWS Lambda配置

  • 超时:30秒
  • 内存:1024 MB
  • 保留并发:900

测试输入

  • 最大请求数:1000
  • 并发性:100

测试结果

  • 总请求数:1000
  • totalTimeSeconds:15.028303200999997
  • 平均延迟时间女士:1385.2
  • maxLatencyMs:6536
  • minLatencyMs:197

测试#2

AWS Lambda配置

  • 超时:30秒
  • 内存:1024 MB
  • 保留并发:900

测试输入

  • 最大请求数:1000
  • 并发性:1000

测试结果

  • 总请求数:1000
  • totalTimeSeconds:19.298303200999997
  • meanLatencyMs:8648.2
  • maxLatencyMs:18749
  • minLatencyMs:832

问题

  1. 当我将lambda函数的保留并发配置为运行900个并行实例时,为什么将并发级别从100更改为1000,平均延迟会增加那么多?
  2. 我是否缺少任何可以改善数字的AWS配置?

2 个答案:

答案 0 :(得分:1)

测试1的请求数量是并发执行的10倍,这有助于分摊任何冷启动的成本。另一方面,测试2的结果更糟,因为测试2完全是冷启动。

现在,您的测试不一定是公平的比较(取决于您要衡量的内容)。您可以尝试重复测试2,使请求数是并发性的10倍,以查看是否仍然获得与测试1类似的结果。

答案 1 :(得分:0)

您是否检查了Lambda是否未受到限制? lambda的默认帐户并发度大约为<= 1000(您在负载测试中使用了该值) API网关或Lambda是否存在任何http错误?

AWS: “ AWS Lambda将使未保留的并发池至少保留100个并发执行,因此没有设置特定限制的函数仍可以处理请求。因此,实际上,如果您的总帐户限制为1000,则仅限于分配900到单个功能。”

检查: https://itnext.io/the-everything-guide-to-lambda-throttling-reserved-concurrency-and-execution-limits-d64f144129e5