与本地并行lambda调用相比,AWS LambdatoLambda并行调用的性能有所下降

2024-05-12 19:29:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个“orchestrator”lambda,它接受一个参数列表,并为该列表中的每个参数同步调用一个“worker”lambda。然后,编排器等待所有工作lambda完成并返回聚合结果。编排器收到一个包含122项的列表,我遇到了一些奇怪的行为

当我在我的主机上测试orchestrator lambda时,它可以完美地工作,并行调用所有122个工作lambda并返回结果。它大约在1分钟内完成,这与最长的单个worker调用的时间长度相同。这是有意义的,因为所有lambda都是并行调用的

但是,当我在lambda环境中运行orchestrator lambda时,它似乎在性能下降的情况下运行。我捕获的性能指标表明,本地版本每秒返回约9个结果,而lambda托管的版本每秒返回约2个结果。请参阅所附图表,以说明这一点

我的本地主机和lambda环境都运行相同版本的python(3.7.4),1.7GB内存和一个完整的vCPU分配给orchestrator和worker lambda。作为参考,编排器lambda的代码是herehere

本地表现:

Local invocation

Lambda托管性能:

Lambda-hosted performance

如何解释本地版本和lambda托管版本之间的性能差异


Tags: lambda版本列表参数here环境图表时间
1条回答
网友
1楼 · 发布于 2024-05-12 19:29:38

问题似乎在于我是如何使用asyncio的。我使用boto3 lambda客户端调用worker lambda,如下所示:

loop = asyncio.get_running_loop()  
await loop.run_in_executor(lambda_client.invoke, ...)

这似乎是lambda环境中的阻塞,但不是在我的主机上,这导致了性能下降。我不知道为什么

我通过重构代码以使用aioboto3库解决了这个问题,如下所示:

async with aioboto3.client('lambda') as lambda_client:
    response = await lambda_client.invoke(...)

这在lambda中实现了与主机相同的性能

相关问题 更多 >