如何将 AWS lambda 调用划分为独立的处理任务

How to partition AWS lambda invocations to independent processing tasks

我正在寻找有关 AWS 的一些最佳实践建议,并希望这个问题不会因为过于开放而立即被关闭。

我正在将 windows 服务器应用程序转换为 AWS lambda。 服务器每 5 分钟 运行s 抓取所有已上传到不同 FTP 位置的文件。 这些文件必须按特定顺序处理,这可能不是它们到达的顺序,因此它会对它们进行排序并进行相应处理。 它与数据库交互以根据先前文件中的信息验证文件。 然后它将相关信息发送到数据库中,并在数据库中记录新信息。 错误会被标记并记录在数据库中,以供手动处理。

请注意,目前没有进行并行处理。这会很困难,因为需要对文件进行排序并以正确的顺序处理它们。

因此,我一直假设 lambda 必须 运行 作为计划中的单个调用。

但是,我意识到文件可以根据它们的来源进行分区,并且可以独立处理这些位置。 所以我可以有一定的并行度。

我的问题是在 AWS 中管理有限并行性的正确方法是什么?

一个笨拙的方法是通过数据库,像这样:

我认为这可行,但感觉通过数据库管理此类事情不太合适。

有人可以提出适合我的问题的模式,以及正确的 AWS 方法吗?

如果您真的想通过并行 lambda 调用来做到这一点,那么是的,您应该绝对使用数据库来协调他们的工作。

你考虑的协议似乎是合理的。您需要使用数据库的事务功能来确保并行调用不会相互干扰,并且您需要确保系统对不会发生的 lambda 调用具有弹性。

当你的 lambda 被调用来处理事件时,它应该决定需要多少额外的并行调用,然后对 运行 这些额外的实例进行异步 lambda 调用。这些实例应该认识到它们是直接调用的并跳过那部分。

在那之后,所有并行的 lambda 调用都应该做完全相同的事情。确保其中 none 个在任何方面都是特殊的,因此您无需依赖任何特定的完成而不会出错。他们应该各自从数据库中的工作队列中提取工作,直到完成所有工作。

但请注意:通常您所谈论的任务类型不受 CPU 约束。如果是这种情况,那么 运行在 same lambda 调用中执行多个并行任务将更好地利用您的资源。当然,你可以两者都做。