AWS Lambda如何处理多个请求? 我想知道这是一个多线程类型的模型吗?
如果我从API网关调用Lambda。并且在10秒内向API发出1000个请求。将创建多少个容器以及多少个线程。
答案 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。
有关Lambda并发执行的更多详细信息,请参阅this aws documentation。