AWS Lambda如何处理多个请求?

AWS Lambda如何处理多个请求? 我想知道这是一个multithreading类型的模型吗?

如果我从API网关调用Lambda。 并且在10秒内向API发出1000个请求。 将创建多少个容器以及多少个线程。

AWS Lambda如何处理多个请求?

独立。

我想知道这是一个multithreading类型的模型吗?

不, 在您要求的意义上 ,它不是一个multithreading模型

当然,您的代码可以编写为使用多个线程和/或子进程来完成一次调用要完成的任何目的,但Lambda不会一次向同一个容器发送多个调用。 在第一次调用完成之前,容器不会用于第二次调用。 如果第二个请求在第一个请求运行时到达,则第二个请求将在另一个容器中运行。

如果我从API网关调用Lambda。 并且在10秒内向API发出1000个请求。 将创建多少个容器以及多少个线程?

将创建许多容器,以便在其自己的容器中处理每个到达的请求。

每次调用的持续时间将是这个的最大决定因素。

在10秒内1000个非常快速的请求大约相当于1秒内的100个请求。 假设每个请求在不到1秒的时间内完成,并且到达时间均匀分布,则可以预期创建的容器少于100个。

另一方面,如果1000个请求在10秒内到达并且每个请求需要30秒才能完成,那么在此事件期间您将有1000个容器。

在交通量增加导致集装箱数量膨胀之后,它们都会徘徊几分钟,准备好在它到达时处理额外的负载,然后Lambda将开始终止它们。

AWS Lambda能够通过水平扩展多个容器来提供多个请求。 默认情况下,Lambda最多可支持1000个并行容器执行 。

在10秒内向API提出1000个请求。 将创建多少个容器以及多少个线程。

每秒请求数= 1000/10 = 100

假设每次执行需要1秒或更长时间才能完成,将有100个并行的Lambda执行。

注意:您也可以生成多个线程,但很难预测性能增益。

还要记住,拥有多个线程并不总是有效Lambda函数可用的CPU在Lambda函数创建的所有线程和进程之间共享。 通常,通过在多个线程之间并行运行工作,您将无法在Lambda函数中获得更多CPU。 在这种情况下,您的代码实际上并不是在两个内核上运行,而是在单个内核上运行两个“超线程”; 根据工作负载,这可能比单个线程更好或更差。 服务团队正在研究如何在Lambda执行环境中更好地利用多个核心,我们将把您的反馈作为该function的+1。

参考: AWS论坛post

有关Lambda并发执行的更多详细信息,请参阅此 aws文档。