在使用AWS Lambda进行并行处理时,等待工人的好方法是什么



问题

我有一个优化问题,我正在使用AWS Lambda的几个实例并行运行优化算法,每个实例都有不同的参数。我需要等待所有的工人完成跑步,然后查看所有的结果,以便选出最好的一个。

注意:我使用的是完全无服务器的体系结构。

第一个想法

我的第一个想法是使用另一个Lambda函数来启动所有的工人,等待他们,然后收集结果。然而,我发现这种同步方法相当不方便,因为它要求主函数在整个过程中运行,而实际上没有做任何有用的工作。理想情况下,我会有一个功能来启动工人,第二个功能来收集结果,只有在所有工人完成后才会触发。

问题

在触发对其结果有效的代码之前,等待所有Lambda工作人员完成的好方法是什么?

您可以使用步骤函数:

Step Functions是一种无服务器编排服务,允许您将AWS Lambda功能和其他AWS服务结合起来构建业务关键型应用程序。

具体而言,Step函数支持并行状态:

并行状态使AWS步骤函数尽可能同时执行每个分支,从该分支的StartAt字段中命名的状态开始,并等待所有分支终止(达到终端状态),然后再处理并行状态的Next字段。

或者,考虑映射状态:

Map状态可用于为输入数组的每个元素运行一组步骤。当Parallel状态使用相同的输入执行多个步骤分支时,Map状态将对状态输入中的数组的多个条目执行相同的步骤。

因此,Map支持动态并行,而Parallel支持预定义的静态并行。

最新更新