AWS Lambda如何处理多个请求?

时间:2017-08-20 09:49:41

标签: java aws-lambda

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

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

2 个答案:

答案 0 :(得分:19)

  

AWS Lambda如何为多个请求提供服务?

独立。

  

我想知道这是一个多线程的模型吗?

不,就你要问的意义而言,它不是一个多线程模型

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

  

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

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

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

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

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

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

答案 1 :(得分:4)

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

  

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

每秒请求数= 1000/10 = 100

假设每次执行需要1秒或更长时间才能执行100次并行Lambda执行。

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

  

还要记住,拥有多个线程并不总是如此   高效Lambda函数可用的CPU在它们之间共享   Lambda函数创建的所有线程和进程。一般来说你   通过并行运行,不会在Lambda函数中获得更多的CPU   在多个线程之间。在这种情况下,您的代码实际上并未运行   在两个核心上,但在一个核心上的两个“超线程”;取决于   工作量,这可能比单个线程更好或更差。该   服务团队正在研究如何更好地利用多个核心   Lambda执行环境,我们将把您的反馈作为一个   该功能的+1。

参考:AWS Forum Post

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