工作流系统与多线程解决 lambda 超时约束

问题描述

我有一个 lambda,它必须调用很多作业(所有作业都是调用一个 lambda),一旦所有作业成功完成,我必须向另一个系统发送通知,这就是我同步调用它们的原因并按顺序导致 lambda 超时。

我有两个解决方

  1. 使用 Step Functions 或任何其他工作流系统,一旦所有作业到达其最终状态,工作流就会知道并通知其他系统

  2. 我以多线程方式调用所有作业,因为所有作业都将在网络 I/O 上被阻塞,因此处理速度大大加快,我能够在约束范围内处理所有请求

我知道这是工作流的一个经典问题,问题是为什么或为什么我不应该使用多线程或步进函数

多线程会导致未知问题吗?

谢谢

解决方法

我建议使用 Step Functions。使用多线程与其说是解决方案,不如说是一种变通方法,因为您只是在解决当前必须在以后重新出现的问题。

请考虑以下情况:Lambda 的 vCPU 数量是有限的。您可以获得的最大数量为 6(在撰写本文时)。

这意味着您不能“仅仅”并行运行 10.000 个作业。只是没有足够的内核/CPU 来并行运行所有作业。这意味着您仍然或多或少地按顺序运行它们,只是比以前更快。

因此,您可能会处理如此多的作业,以至于即使使用多线程,您也会超时运行。因此,您只是在将来将此问题移得更远,但您并没有解决它。

因此,我认为使用 Step Functions 是更好的解决方案。显然,Step Functions 也有限制,但更容易处理/管理。与多线程相比,您实际上可以并行运行更多作业。