【问题标题】:Would AWS Step Functions map state be the best option for processing 10 million line CSV?AWS Step Functions 映射状态是否是处理 1000 万行 CSV 的最佳选择?
【发布时间】:2020-03-02 05:09:34
【问题描述】:

我的工作流程可能需要数千或数百万次 Lambda 调用,我正在尝试了解 Step Functions 映射状态是否允许我需要的执行次数。

我正在创建一项服务,该服务将由上传到 S3 存储桶的 CSV 文件触发。 CSV 文件将包含数百万个需要处理的事件注册(不同 Lambda 的流程),并输出成功、失败等摘要。查看不同的服务,我认为 Step Functions 可以协调流程.地图状态允许动态数量的子工作流,但我还没有找到最大数量可能是多少。如果数量可以达到数千,我可以批量执行以限制工作流程。如果不是,我正在考虑以某种方式利用 SQS 或尝试了解 AWS Batch 是否也是一个有效的选项。

Step Functions 的映射状态是否适用于这种具有动态执行次数的流,还是其他服务更适合我的任务?

【问题讨论】:

  • 一些明确的问题:处理这样一个文件中的所有行总共需要多长时间?为什么您认为 AWS Lambda 是处理文件的合适方法?您是否考虑过任何其他处理文件的方法?
  • 目前我不完全确定处理整个文件需要多长时间,但文件中的每个单独项目大约需要 200 毫秒。考虑多个 Lambda 实例同时执行此操作的扇出方法。目前认为 Lambda 作为文件中的每一行都需要转换为 JSON、解析,然后作为请求传递给特定的 API 端点,并捕获响应以最终报告整个过程。但是还有其他资源,没有发现任何似乎更符合要求的资源。

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


【解决方案1】:

我会避免在这个用例中使用 Step Functions。 Map 状态需要 ItemsPath 参数,该参数指向 Data 中的项目数组(从一种状态传递到另一种状态的 JSON)。这个 JSON 的大小限制为 32K 个字符(实际上可能在 32KiB 左右,我没有深入研究 Step Functions 编码处理的细节)。 因此,这有效地排除了 Step Functions 中的Map,因为您只需使用此数据量即可达到服务限制。

在这个用例中,我认为使用 SQS 和 Lambda 会更好。将文件上传到 S3 将触发 Lambda,这将触发 AWS Batch 作业,该作业又会下载 CSV 文件并将每一行的消息发送到一个或多个 SQS 队列(如果您想要不同的 Lambda 用于不同的行类型)。 Lambda 与 SQS 具有原生集成,因此您可以使用它。

请记住,SQS 可能会重复消息,因此即使对同一行进行多次处理,您的 Lambda 也应该能够正常工作(Lambda 应该是幂等的)。基本上,如果您想拥有可靠的分布式系统,则系统的任何元素都应该是幂等的。

另一种解决方案(如果您坚持使用 Step Functions)是为 CSV 文件中的每一行启动新的执行,但是,我认为您会很快达到服务限制,而且成本会很高。

【讨论】:

    猜你喜欢
    • 2022-12-21
    • 2020-09-05
    • 1970-01-01
    • 2020-02-27
    • 2020-08-21
    • 2021-11-25
    • 1970-01-01
    • 2020-05-19
    • 2021-02-28
    相关资源
    最近更新 更多