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

2022-08-31 20:33:41

AWS Lambda 如何为多个请求提供服务?我想知道它是否也是一个多线程的模型?

如果我从 API 网关调用 Lambda。在10秒内有1000个请求到API。将创建多少个容器和多少个线程。


答案 1

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

独立地。

我想知道它是否也是一个多线程的模型?

不,它不是您所要求的多线程模型。

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

如果我从 API 网关调用 Lambda。在10秒内有1000个请求到API。将创建多少个容器和多少个线程?

根据需要创建尽可能多的容器,以便在其自己的容器中处理每个到达的请求。

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

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

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

在流量激增导致容器数量增加后,它们都会徘徊几分钟,准备在到达时处理额外的负载,然后 Lambda 将开始终止它们。


答案 2

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

在 10 秒内有 1000 个请求发送到 API。将创建多少个容器和多少个线程。

每秒请求数 = 1000/10 = 100

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

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

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

参考:AWS 论坛帖子

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


推荐