使用步进功能进行摄取服务是否是一个好选择?

问题描述 投票:1回答:1

[以前,我已经创建了具有主和从lambda的概念的提取服务。响应于S3事件调用主Lambda,它将从S3读取csv文件并创建块。稍后,主lambda将异步调用多个从属lambda。每个从属lambas将处理这些数据块,并最终放入DynamoDB中。

在这里,我能够调用从属Lambda的多个实例并实现并行化

稍后,我读到了Step Function(SF),它可以编排多个AWS服务来完成任务。现在,我正在考虑使用SF重新设计我的提取服务。借助Map状态,可以很方便地实现并行:https://aws.amazon.com/blogs/aws/new-step-functions-support-for-dynamic-parallelism/但是我不确定这将是有用的,因为这是新功能并且紧密结合。

关于SF的任何建议如何实现此和/或任何其他替代方法

amazon-web-services lambda aws-step-functions
1个回答
0
投票

首先,我喜欢您创建不同的Master / Slave Lambda的方法:一个常见的错误是尝试创建一个独特的“递归”函数,该函数基于输入事件进行分块和加载。乍一看似乎可以,但是会导致infinite循环和昂贵的账单。

TL; DR我认为您的方法没有错,我会坚持下去。

我在这个问题上添加了两个不相关的想法:

  1. SF获得更多值,当您需要在完成DynamoDB的加载后需要执行某些操作时(例如,如果您想在lambda出错的情况下删除所有已加载的项目,或者您想要记录的总数项)或在您要切换为串行方式的情况下(例如,在Dynamo桌上保留一些WCU)。

  2. AWS Data Pipeline是设计用于执行ETL的工具,并支持从S3到DynamoDB的工作流。值得一看(在官方文档中可以找到tutorial for ingesting from S3 to DynamoDB)。

您构建服务的方式对我来说似乎很好,如果您对此感到满意,我不会浪费时间来更改它:请记住不同设计的好处,但要避免在早期进行过度优化。

© www.soinside.com 2019 - 2024. All rights reserved.