我拥有中级 AWS 知识,并且遇到问题,我可以看到多种解决方法,并且我正在寻求更熟练的 AWS 架构师的意见。
我有一个本地系统,可以生成约 30k XML 文件(每个 <100KB) throughout the day. These XML files have to be sent to AWS to be parsed.
可能的解决方案:
在这 3 个解决方案中,我认为 选项 1 最合适,但我很想听到对此的意见。
还有一种场景,每天将 XML 文件收集到一批约 30k 个文件中。对于这种情况,我有以下问题:
我的一个具体问题是:“一次”触发 30k lambda 是否会造成问题?这些任务对时间不敏感,因此“只有”1k 个 lambda 并行运行并不是问题,只要它们最终都运行即可。
消防水管 + 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