【问题标题】:AWS Serverless CSV to Queue to CSV ArchitectureAWS 无服务器 CSV 到队列到 CSV 架构
【发布时间】:2017-10-14 22:24:39
【问题描述】:

我目前正在使用 AWS 进行一些无服务器 CSV 处理。对 EC2 和 Dynamo 相当熟悉。我确信有更好的方法来构建它,而且我还没有找到一种有效的方法来存储数据。任何架构建议将不胜感激。

此流程将接收上传到 S3 的 CSV,处理所有元组行并将处理后数据的新 CSV 输出到 S3。

1) 最佳架构和 2) 在队列完成之前存储数据的最佳位置是什么,直到可以构建 CSV

数据流和服务架构:

CSV(包含元组)(S3)-> CSV 处理(Lambda)-> 队列(SNS)-> 队列处理(Lambda)-> ?????在写入 CSV 之前已处理的队列项目的临时存储 ???? (在这里使用什么?)-> CSV 构建(Lambda)-> CSV 存储(S3)

聪明的想法值得赞赏。

【问题讨论】:

  • 行在顺序上有什么关系吗?

标签: amazon-web-services amazon-s3 aws-lambda


【解决方案1】:

我相信你把事情复杂化了

s3 可以在事件发生时触发调用 lambda 函数。这是直接在s3 buckets事件通知中设置的

所以使用它在另一个存储桶中制作 CSV 的转换版本

亚马逊在这里有一个如何做这种事情的例子

http://docs.aws.amazon.com/lambda/latest/dg/with-s3-example.html

【讨论】:

  • 谢谢,我正在使用 S3 触发器。但是,如果我将 csv 中的 50000 个元组加载到 lambda 中,则处理时间太长。它可以逐项并行完成(这将更有效)。 S3 正在触发 lambda 函数来处理 CSV。然后 Lambda 函数向队列提供数据,因此它不会 1) 挂起超过 Lambda 的 3 分钟时间限制和 2) 以确保更高效的处理。
  • 是的,如果数据处理时间可能比 lambda 可以运行的时间更长,因为它需要更复杂的处理结构。时间限制是 5 分钟顺便说一句(300 秒)而不是 3 分钟,不知道这是否有帮助
  • 这正是我想要修复/想出的? =)
【解决方案2】:

更新(回复this comment):

它不会并行化任何东西

如果您清楚了解单个 Lambda 在其时间限制内可以处理多少个元组,您可以平均分配任务。

例如,给定以下信息...

  • 原始 CSV 包含 50,000 个元组
  • 单个 Lambda 在时限内可以处理 5000 个元组。

然后,您可以对 处理器 Lambda 执行 10 次并行异步调用,每个调用都使用不同的 offset


原答案:

你可以让它与两个 Lambda 一起工作:

  1. 监听器
    • S3 触发的 Lambda,其唯一工作是将新上传的 CSV 的 s3 路径传递给 处理器 Lambda。
  2. 处理器
    • Listener 触发的 Lambda。它将需要s3 pathoffset 作为参数(其中offset 是它应该开始处理的CSV 行。
    • 此 Lambda 执行 CSV 行的实际处理。它应该跟踪它当前正在处理的行,并且在达到 Lambda 时间限制之前,它将停止并使用相同的 s3 path 但使用新的 offset 调用自己。

因此,基本上,它是一个递归 Lambda,它会调用自身,直到处理完所有 CSV 行。

要检查剩余时间,您可以在处理程序的 whilefor 循环中使用 context.getRemainingTimeInMillis() 方法 (NodeJS)。

【讨论】:

  • 谢谢!这是一个有趣的解决方案。在 S3 中使用临时文件来保持“队列”的位置是有意义的。我认为它完成了 1)“超过 Lambda 的 3 分钟时间限制”,但不是“2)确保更有效的处理”,因为它不会并行化任何东西。欣赏它。
  • @Shanks 这对你来说是一个很好的练习。你如何并行化它?
猜你喜欢
  • 2011-09-21
  • 1970-01-01
  • 2020-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-27
  • 1970-01-01
  • 2016-07-03
相关资源
最近更新 更多