【问题标题】:parallel lambda executions on dynamodb updatedynamodb 更新上的并行 lambda 执行
【发布时间】:2021-09-25 22:20:17
【问题描述】:

我正在构建一个处理 dynamodb 表条目的 aws lambda 服务。这个过程非常耗时,每个条目大约需要 2 秒,并且当时分批添加大约 20 个条目。我正在寻找一种同时处理批处理中的所有条目的方法,例如为每个添加的条目触发一个单独的 lambda 事件,以便它们都可以并行运行,从而更快地完成。据我了解,dynamodb 触发器每秒轮询几次,并将所有更新的条目发送到单个 lambda 事件。有没有办法配置触发器为每个条目创建并发事件? 我是 aws 新手,如果我使用了错误的命名法,请见谅。

【问题讨论】:

    标签: aws-lambda amazon-dynamodb


    【解决方案1】:

    如果我理解正确,您是在使用DynamoDB Streams 来触发您的 lambda?

    有很多细微差别决定了并行执行多少个 Lambda 函数来处理您的 DynamoDB 流。您应该测试您的实现,看看您是否正在建立一个更长的待处理项目的积压日志,或者处理这些项目的延迟是否太长而无法满足您的要求。

    如果是这种情况,您可以将Amazon SQS 引入您的解决方案。在 Lambda 函数中,使用您的 DynamoDB 流,您只需将项目转发到 SQS 队列。这个队列随后可以很容易地被许多 Lambda 函数并行处理。


    根据您的评论更新

    1 分钟的延迟可能不会太长,您需要知道哪些延迟对于您的业务用例是可以接受的。如果您认为 1 分钟的延迟太长,那么您可以结合以下无服务器模式来并行处理这些项目:

    或者,您也可以直接从订阅了 DynamoDB 流的 Lambda 函数触发AWS Step Functions。 AWS Step Functions 是一种工作流服务,它还允许您编排并行执行。这个模式是Lambda to Step Functions

    【讨论】:

    • 感谢您的回答。是的,我正在使用您提到的 DynamoDB Streams。有问题的 DynamoDB 表不会像早期试点那样有很多流量,所以我认为不会有积压。问题是,一旦表被更新(一批大约 20 个项目),如果通过相同的 lambda 执行串行处理,该过程将需要大约一分钟才能完成。相反,如果我可以并行启动 20 个 lambda 执行,则可以在几秒钟内处理该数据。您是否建议使用 lambda 将每个项目发送到单独的 sqs 并将该 sqs q 添加到 lambda?
    • @JohanKuylenstierna 我扩展了答案
    猜你喜欢
    • 2023-03-16
    • 2019-11-11
    • 1970-01-01
    • 2021-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-24
    相关资源
    最近更新 更多