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

Multithreading 解决lambda超时约束的工作流系统与多线程,multithreading,aws-lambda,workflow,aws-step-functions,Multithreading,Aws Lambda,Workflow,Aws Step Functions,我有一个lambda,它必须调用很多作业(所有作业都要调用另一个lambda),一旦所有作业成功完成,我必须向另一个系统发送通知,这就是为什么我同步和顺序调用每个作业,这导致lambda超时 我有两个解决办法 使用Step功能或任何其他工作流系统,一旦所有作业达到其终端状态,工作流将知道并通知其他系统 我以多线程方式调用所有作业,因为所有作业都将在网络I/O上被阻止,因此处理速度大大加快,我能够在限制内处理所有请求 我知道这是一个典型的工作流问题,问题是为什么或者为什么我不应该使用多线程或s

我有一个lambda,它必须调用很多作业(所有作业都要调用另一个lambda),一旦所有作业成功完成,我必须向另一个系统发送通知,这就是为什么我同步和顺序调用每个作业,这导致lambda超时

我有两个解决办法

  • 使用Step功能或任何其他工作流系统,一旦所有作业达到其终端状态,工作流将知道并通知其他系统

  • 我以多线程方式调用所有作业,因为所有作业都将在网络I/O上被阻止,因此处理速度大大加快,我能够在限制内处理所有请求

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

    多线程是否会导致未知问题


    谢谢

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

    考虑以下情况:Lambda的vCPU数量是有限的。你能得到的最大金额是6(在撰写本文时)

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

    因此,可能会出现这样一种情况,即您处理的作业太多,以至于即使使用多线程处理,您也会在超时时间内运行。因此,你只是在将来把这个问题推得更远,但你并没有解决它

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