【问题标题】:Very slow requests to dynamodb from lambda function从 lambda 函数对 dynamodb 的请求非常慢
【发布时间】:2015-11-23 07:16:11
【问题描述】:

我在同一区域 (us-east-1) 中有 lambda 函数和 dynamo db 表。在 lambda 函数中,我执行非常简单的查询:

params =
  TableName: 'users'
  Item:
    email:
      S: event.body.email
  ConditionExpression: 'attribute_not_exists (email)'
dynamodb.putItem(params, context.done)

DynamoDB 表中只有几行,电子邮件上有哈希键,读/写吞吐量设置为 5/5。

Lambda 函数在约 4 秒内执行...这非常慢。我做错了吗?


我已经用不同的内存设置为 lambda 函数测试了我的函数(之前设置为 128mb):

  • 256mb => ~2000ms
  • 512mb => ~1000ms
  • 1024mb => ~500ms
  • 1536mb => ~300ms

因此,响应时间似乎 1-1 取决于内存(实际上取决于计算容量,因为 AWS 将其与内存一起扩展)。这仍然很疯狂,因为要制作非常简单的 REST API,我必须设置 1536mb 内存以使其“响应”,而我的程序使用 17mb!


另一方面,我已经计算出它会花费:

  • 使用 128mb 内存的每 100 万个 4000 毫秒请求 8.32 美元
  • 使用 1536mb 内存的每 100 万个 300 毫秒请求 10.004 美元

所以我猜这还不错......

【问题讨论】:

  • 您确定没有在您的 Lambda 函数中执行任何其他操作吗?简单的 JS 调用不应该需要那么多内存,也不应该花费那么多时间。
  • 只是为了比较,如果你使用 SimpleDB,你会得到什么样的性能?
  • 您找到解决方案了吗?我面临着类似的问题,我在我的 lambda 函数中使用批量写入,并且花费的时间太长。此外,该功能几乎不使用 80MB 内存,因此增加内存以获得更好的性能对我来说似乎不太合适。
  • 物有所值; Lambda 配置对话框指出“您的函数分配的 CPU 与配置的内存成正比” - 看起来 AWS 在您配置更多内存时也会为您提供更多 CPU...
  • 我正在使用索引从包含 5 个条目的表中进行简单查找。 128MB RAM 的响应时间为 16 秒!添加更多内存也会按比例减少延迟,但这仍然是巨大的延迟!

标签: amazon-web-services amazon-dynamodb aws-lambda


【解决方案1】:

嗯,这个问题也可能与取消暂停运行 Lambda 函数的容器有关。您可能还想优化初始化对象的方式,这样它们就不会在每次调用函数时都重新初始化。

见文章Container reuse in Lambda

【讨论】:

  • 有趣。但我正在做的只是需要'aws-sdk'模块并向数据库发送请求。我也试过一个接一个地发出很多请求,以确保容器被重用......
  • 您所描述的延迟非常大。它也可能是us-east-1 使用率很高的区域。
  • 我会尝试在其他地区部署功能。
  • 我们刚刚开始使用 eu-west 使用 AWS Lambdas 和 API Gateway,并且发现仅从最小 Lambda 调用 putItem 时同样严重的性能问题。我希望这可以像 OP 一样修复我不认为我们可以做很多其他事情来优化我们的代码......除非我们可以避免连接开销,尽管 get 很好,这表明这不是问题。跨度>
  • @kixorz 你说得对,我用谷歌搜索并找到了这个解决方案并尝试了 3008 MB,性能提高了很多(6x)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-17
  • 2017-02-14
  • 1970-01-01
  • 1970-01-01
  • 2015-05-20
  • 1970-01-01
  • 2018-03-22
相关资源
最近更新 更多