AWS 每天处理大量小文件

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

我拥有中级 AWS 知识,并且遇到问题,我可以看到多种解决方法,并且我正在寻求更熟练的 AWS 架构师的意见。

我有一个本地系统,可以生成约 30k XML 文件(每个 <100KB) throughout the day. These XML files have to be sent to AWS to be parsed.

可能的解决方案:

  1. 将 XML 文件馈送到 Kinesis Firehose(可能通过 API 网关),该 Kinesis Firehose 会解析 lambda 中的每个文件,并将原始文件存储在 S3 中。在我看来,这是理想的解决方案(?)。大约创建一个新的 XML 文件。每 3 秒一次。
  2. 通过预签名的 S3 URL 上传每个 XML 文件并触发解析它的 lambda。这涉及从 API 网关获取每个文件的预签名 URL。我不确定这对于以上述频率生成的文件是否是一个好方法。
  3. 同上,但使用SFTP上传。

在这 3 个解决方案中,我认为 选项 1 最合适,但我很想听到对此的意见。

还有一种场景,每天将 XML 文件收集到一批约 30k 个文件中。对于这种情况,我有以下问题:

  • 即使消防水带每天只输送一次并同时处理大量文件,选项 1仍然有意义吗?
  • 选项 2/3 仍然有意义吗?另一种可能性是上传单个 zip,使用 lambda 将其解压缩到另一个文件夹中,在该文件夹中,每个新文件都会触发 lambda。这意味着一次触发 30k 个 lambda。
  • 有 S3 批处理操作,它将 lambda 应用于预定文件列表中的每个文件。与
  • 选项 2 的 zip 版本有何不同?似乎这些 s3 批处理操作无法使用 terraform 进行配置,这对我来说是一个缺点。
我知道这个问题不是非常具体,但我将不胜感激。

我的一个具体问题是:“一次”触发 30k lambda 是否会造成问题?这些任务对时间不敏感,因此“只有”1k 个 lambda 并行运行并不是问题,只要它们最终都运行即可。

amazon-web-services amazon-s3 aws-lambda amazon-kinesis amazon-kinesis-firehose
1个回答
0
投票
这取决于您想要如何处理文件以及每个文件的处理时间以及您想要实时处理还是批处理方式。

消防水管 + lambda:

虽然 firehose + lambda 选项设置起来更方便,但频繁执行 lambda(每 3 秒)会涉及更高的成本。 kinesis firehose 也是如此,它根据处理的数据量收费。因此,如果您愿意,我建议对您的案例进行成本分析。

替代方法:

如果您每 3 秒创建一次文件并且有实时处理的条件,建议使用长时间运行的微服务从 s3 读取文件并处理/解析它并进行进一步处理。

如果您愿意每天在某个合适的时间处理一次文件,那么选择具有任何批处理框架(如 Spring Batch)的 AWS ECS 计划任务将会很有帮助。这样,您就可以让 AWS ECS 计划任务在特定时间运行并处理从 s3 读取的文件。处理完成后,作业关闭,因此不会产生任何费用。

参考:

https://docs.aws.amazon.com/AmazonECS/latest/developerguide/scheduling_tasks.html

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