我有一个“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的代码是here和here
本地表现:
Lambda托管性能:
如何解释本地版本和lambda托管版本之间的性能差异
问题似乎在于我是如何使用asyncio的。我使用boto3 lambda客户端调用worker lambda,如下所示:
这似乎是lambda环境中的阻塞,但不是在我的主机上,这导致了性能下降。我不知道为什么
我通过重构代码以使用aioboto3库解决了这个问题,如下所示:
这在lambda中实现了与主机相同的性能
相关问题 更多 >
编程相关推荐