【问题标题】:How do you run functions in parallel?你如何并行运行函数?
【发布时间】:2019-02-05 04:14:52
【问题描述】:

我的愿望是根据一些自定义的 select 语句从数据库中检索 x 条记录,输出将是一个 json 数据数组。然后我想将数组中的每个元素并行传递给另一个 lambda 函数。

因此,如果返回 1000 条记录,则需要并行执行 1000 个 lambda 函数(我将帐户限制增加到所需的数量)。如果 1000 个中有 30 个失败,则检索记录的主要任务需要知道它。

我正在努力整理这个简单的流程。

我目前使用 javascript 和 AWS Aurora。我不是在寻找检索数据的 node.js/javascript 代码,只是 AWS Step Functions 配置以及如何在每个函数中构建数组。

谢谢。

【问题讨论】:

    标签: amazon-web-services aws-step-functions


    【解决方案1】:

    如果返回 1000 条记录,则需要 1000 个 lambda 函数 并行执行

    Step Functions 不支持您尝试实现的目标。状态机任务不能根据接收到的输入进行修改。因此,例如,不能将 Parallel 任务配置为根据它在数组输入中接收到的项目数来添加/删除函数。

    您或许应该考虑使用SQS Lambda trigger。从数据库中检索到的记录数可以添加到 SQS 队列中,然后该队列将为收到的每个项目触发 Lambda 函数。

    如果 1000 个中有 30 个失败,则检索记录的主要任务 需要了解它。

    有多种方法可以实现这一目标。如果 Lambda 返回错误,SQS 不会从队列中删除项目。您可以根据需要配置DLQRedrivePolicy。或者,您可能想提出一个自定义解决方案,以保持对失败的 Lambda 的计数,以调用从数据库中获取记录的服务。

    【讨论】:

    • 如果您添加带有 SQS 触发器的 lambda,当队列为空 10-15 分钟时会发生什么情况,lambda 本身会减慢它对 SQS 的轮询,这违背了真正的瞬时触发器的想法所以我们不得不求助于像步进函数这样的编排器。但如果不可能,另一种可能性是 sns 或 s3 触发器,但它们都没有批处理 API,因此我们可以以最小化的聊天方式插入或上传所有 1000 条记录。所以我们陷入了困境。
    猜你喜欢
    • 2019-12-30
    • 2014-10-21
    • 2017-08-27
    • 2017-08-03
    • 2021-10-31
    • 2021-09-27
    • 2015-12-24
    • 1970-01-01
    相关资源
    最近更新 更多