AWS Lambda 如何为多个请求提供服务?
AWS Lambda 如何为多个请求提供服务?我想知道它是否也是一个多线程的模型?
如果我从 API 网关调用 Lambda。在10秒内有1000个请求到API。将创建多少个容器和多少个线程。
AWS Lambda 如何为多个请求提供服务?我想知道它是否也是一个多线程的模型?
如果我从 API 网关调用 Lambda。在10秒内有1000个请求到API。将创建多少个容器和多少个线程。
AWS Lambda 如何为多个请求提供服务?
独立地。
我想知道它是否也是一个多线程的模型?
不,它不是您所要求的多线程模型。
当然,您的代码可以编写为使用多个线程和/或子进程来完成它打算为一个调用完成的任何目的,但 Lambda 不会一次向同一容器发送多个调用。在第一个调用完成之前,容器不会用于第二次调用。如果第二个请求在第一个请求运行时到达,则第二个请求将在不同的容器中运行。
如果我从 API 网关调用 Lambda。在10秒内有1000个请求到API。将创建多少个容器和多少个线程?
根据需要创建尽可能多的容器,以便在其自己的容器中处理每个到达的请求。
每次调用的持续时间将是最大的决定因素。
10 秒内发出 1000 个非常快的请求,大致相当于 1 秒内发出 100 个请求。假设每个请求在不到 1 秒的时间内完成,并且到达时间均匀分布,则预计创建的容器少于 100 个。
另一方面,如果 1000 个请求在 10 秒内到达,并且每个请求需要 30 秒才能完成,则在此事件期间将存在 1000 个容器。
在流量激增导致容器数量增加后,它们都会徘徊几分钟,准备在到达时处理额外的负载,然后 Lambda 将开始终止它们。
AWS Lambda 能够通过对多个容器进行水平扩展来为多个请求提供服务。默认情况下,Lambda 最多可以支持 1000 个并行容器执行。
在 10 秒内有 1000 个请求发送到 API。将创建多少个容器和多少个线程。
每秒请求数 = 1000/10 = 100
假设每次执行需要 1 秒或更长时间才能完成,则将有 100 个并行 Lambda 执行。
注意:您也可以生成多个线程,但很难预测性能提升。
还要记住,拥有多个线程并不总是有效的 Lambda 函数可用的 CPU 在 Lambda 函数创建的所有线程和进程之间共享。通常,通过在多个线程之间并行运行工作,您将无法在 Lambda 函数中获得更多 CPU。在这种情况下,您的代码实际上不是在两个内核上运行,而是在单个内核上的两个“超线程”上运行。根据工作负载的不同,这可能比单个线程更好或更差。服务团队正在寻找在 Lambda 执行环境中更好地利用多个内核的方法,我们将把您的反馈视为该功能的 +1。
参考:AWS 论坛帖子
有关 Lambda 并发执行的更多详细信息,请参阅此 aws 文档。