我有一个大文件,我想在AWS中使用Lambda函数进行处理。由于我无法控制文件的大小,我想出了将文件处理分配给多个lambda函数调用的解决方案,以避免超时。以下是它的工作原理:
uploadHandler
)uploadHandler
测量文件的大小并将其分成相等的块。processor
lambda函数进行处理。注意:
uploadHandler
不读取文件内容。processor
的数据仅为{ start: #, end: # }
。processor
的多个实例。processor
调用分别读取其自己的文件块并为其生成输出。到目前为止一切顺利。问题是如何将所有processor
调用的输出合并为一个输出?有没有人有任何建议?以及如何知道所有processor
s的执行何时完成?
答案 0 :(得分:2)
我最近遇到了类似的问题。我使用此解决方案https://docs.aws.amazon.com/step-functions/latest/dg/tutorial-create-iterate-pattern-section.html
使用AWS lambda和Step函数解决它在这个具体的例子中,执行并不是在并行中发生的,而是它的顺序执行。但是当状态机完成执行时,您可以确保文件已完全正确处理。我不知道你的样子是否正好。
答案 1 :(得分:2)
uploadHandler
函数同步调用processor
函数。processors
。 Lambda函数只有一个vCPU(如果RAM> 1,800 Gb,则为2个vCPU),但请求是IO绑定的,因此您只需要一个处理器。uploadHandler
将等待所有processors
回复,然后您可以汇总所有回复。优点:实施起来更简单,没有存储空间;
缺点:在所有内容完成之前,无法查看正在发生的事情;
processingJob
(RDS,DynamoDB,等等)。 uploadHandler
将创建作业并保存文件被分解的部分数量。使用每个文件部分保存作业ID。processor
获取一个部分(带有作业ID),处理它,然后在DB中存储处理结果。processor
检查是否是最后一个提供结果的人;如果是,则使其触发assembler
函数以收集所有结果并执行您需要的任何操作。 优点:更高的可见性,因为您可以随时查询您的存储数据库,以检查哪些部分已处理,哪些部分待处理;如果需要,您可以存储processor
中的各种元数据进行详细分析;
缺点:需要存储服务和稍微复杂的Lambdas处理;