繁体   English   中英

Lambda 超时,无法处理来自 DynamoDB 的所有结果。 除了迁移到 Fargate 之外,还有什么优化技巧吗?

[英]Lambda timeout and can't process all results from DynamoDB. Any tips to optimize this other than moving to Fargate?

Lambda 需要从 DynamoDB 中获取所有结果并对每条记录执行处理并触发步骤 function 工作流。 虽然分页结果是由 DynamoDB 给出的,但是如果有太多页面无法在 15 分钟 lambda 限制内处理,Lambda 将超时。 除了移动到 Fargate 之外,是否有任何解决方法可以使用 lambda?

概览 Lambda

while True: 
   l, nextToken = get list of records from DynamoDB
   for each record in l:
      perform some preprocesing like reading a file and triggering a workflow
   if nextToken == None:
       break

我假设处理一条记录可以在 15 分钟 lambda 限制内进行。

你可以做的是将你原来的 lambda 作为一个协调器调用一个处理单个页面的工作器 lambda。

  • 协调员 Lambda

     while True: l, nextToken = get list of records from DynamoDB for each record in l: call the worker lambda by passing the record as the event if nextToken == None: break
  • 工人 Lambda

     perform some preprocesing like reading a file and triggering a workflow

您可以使用 SQS 为您提供快速连续处理这些的方法。 您甚至可以使用它来或多或少地并行而不是同步地执行它们。

Lambda reads in Dynamodb -> breaks each entry into a json object -> sends the json object to SQS -> which queues them out to multiple invoked lambda -> that lambda is designed to handle one single entry end finish

这样做允许您通过将第二个 lambda 设计为仅处理任务的一次迭代并使用 SQS 作为您的循环/迭代器,将可能需要许多小时的长任务拆分为多个 lambda 调用。 您可以在 SQS 上设置设置以尽可能快地发送或一次发送一个(尽管如果您一次发送一个,您将必须管理队列中消息的生存时间和过时设置)

此外,如果将新项目添加到 dynamo 中然后必须进行处理是很常见的事情,那么您应该使用 Dynamo Streams - 每次添加新项目时都会触发 lambda 触发该新项目,从而允许在添加项目时实时执行您的工作流程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM