【问题标题】:Loadtesting - High concurrency = High latency while using Lambda?负载测试 - 高并发 = 使用 Lambda 时的高延迟?
【发布时间】:2019-10-22 17:13:12
【问题描述】:

我创建了一个从 DynamoDB 获取记录的 lamdba 函数。

现在我正在尝试获取有关架构性能的一些数字(这将在以后的迭代中启用 DAX)。

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

测试 #1

AWS Lambda 配置

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

测试输入

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

测试结果

  • totalRequests:1000
  • totalTimeSeconds:15.028303200999997
  • meanLatencyMs:1385.2
  • maxLatencyMs:6536
  • minLatencyMs:197

测试 #2

AWS Lambda 配置

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

测试输入

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

测试结果

  • totalRequests:1000
  • totalTimeSeconds:19.298303200999997
  • meanLatencyMs:8648.2
  • maxLatencyMs:18749
  • minLatencyMs:832

问题

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

【问题讨论】:

  • 您是在 VPC 内部还是外部运行?
  • 不,我没有配置任何 VPC

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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    您是否检查过 Lambda 是否没有受到限制? lambda 有一个默认的帐户并发大约

    AWS: “AWS Lambda 会将未预留的并发池保持在至少 100 个并发执行,这样没有设置特定限制的函数仍然可以处理请求。因此,在实践中,如果您的总账户限制为 1000,则您只能分配900 到各个功能。”

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

    【讨论】:

    • 没有错误发生我把900保留并发到我使用的函数中
    • 1.这个实验你只运行过一次吗?结果是否一致? 2.你发现哪个 lambda 执行花了那个时间吗? Min& Max 没有说太多,因为其中一个 lambdas 可能行为不端,这会影响平均值 也许您可以在执行期间启用 X-RAY,它应该会提供更多关于需要什么时间的见解 3.您是否还有其他活动您的aws帐户上的lambda?您是否为 Lambda 选择了 VPC?
    猜你喜欢
    • 1970-01-01
    • 2012-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-30
    • 2021-11-03
    • 1970-01-01
    相关资源
    最近更新 更多