AWS Lambda成本取决于函数运行的时间,并且在某种程度上取决于内存占用量。具有更快完成的功能并占用更少的内存可以节省很多钱。尤其是在经常执行此类函数时。

如何调整Node.js Lambda函数的速度和较小的内存占用量以节省成本?

还有其他方面吗?对于Lambda而言有哪些优点可以改进?

#1 楼

Dawny33的响应很好,但是我会在开发过程中更早开始。

密切关注您的云环境,以确保您的功能按预期运行(包括您的“生产”功能,这可能会操作(在不同的数据集上操作)至关重要,因为它可能会揭示无法在本地或使用测试数据集重现的内容。

我要说的是,您在进行此性能测试时优化目的应该直接从开发人员的机器开始。或者至少在迁移到云之前先从某些本地环境开始。

我之所以这么说是因为,尽管AWS Lambda在很多方面都很出色,但事实是您没有完全的控制权在服务器上将限制您的检测能力。我并不是说在无服务器环境中无法进行检测,而是尝试找出您有多少CPU中断(以及由代码引起的中断);)

所以我建议而且实际上并不限于无服务器,而是尽早开始分析。 NodeJS分析可以使用许多不同的工具进行,NewRelic,dynatrace和AppDynamic是其中的佼佼者。还有一个较小的播放器,其中一些只是要安装的NPM软件包(例如Nodefly)。由于V8引擎内置了一个探查器,因此也可以不使用任何其他工具来执行一些NodeJS。 NodeJS的本文档将帮助您入门。

无论选择哪种工具,都希望在本地安装它并收集分析数据。这可能涉及运行代理或在package.json中包含一个包。您的工具说明将告诉您如何安装。一个好的分析器将使您知道使用了多少内存和CPU。更好的工具将使您了解进行了多少次远程呼叫,花费了多长时间。

使用该工具为您提供的概要分析数据来识别并解决瓶颈。对可以进行多少次配置没有限制。有些人(疯狂吗?)会研究他们最关键的功能的系统调用。如果您想节省几分之一秒的功能,则可能必须执行此类操作(但是,也许AWS Lambda并不是开始的最佳选择)。

这一点也值得注意我还没有提到任何有关AWS Lambda的内容。这是因为您的优化很可能不是特定于AWS Lambda的(毕竟,在无服务器环境中,您不必担心服务器/环境)。

请确保不仅代码有效,而且它以您期望的方式工作。不要过度优化,而要密切关注CPU和内存使用情况。排序时,2MB的阵列真的应该增长到10MB吗?

然后,您将能够使用Dawny33提到的工具或其他一些工具,以确认在部署到Lambda时您的功能是否具有相似的功能。但是,您已经对功能有了很高的信心,只需要验证它们的行为是否正确,而不必对它们进行全面的介绍。

评论


是的,这很重要,但是怎么办呢?是否有一些工具,实践,开发人员可以做什么?我在此答案中看不到任何提及的内容:/

– Evgeny Zislis
17年3月3日在4:00

我是通过概要分析和检测说出来的。 NewRelic APM是一个示例,但这只是可用的探查器之一。安装事件探查器,运行功能,优化。除非您有特定于AWS的问题,否则它是否将在AWS Lambda上运行都无关紧要。我将根据您的评论更新答案。

–亚历山大
17 Mar 3 '17 at 4:09

可以完成此工作的一些示例以及指向文章,博客,已知分析器的链接。这就是imho使答案变得有价值的事情,而不仅仅是让人们在“我怎么计算我的cpu中断,我一无所知”的某个地方问一个问题。

– Evgeny Zislis
17 Mar 3 '17 at 4:11

好点子。我再次提高了答案。

–亚历山大
17 Mar 3 '17 at 4:23

#2 楼

我可能无法完全回答它,但以下是我从lambda的有限经验得出的观点:



速度性能:单次运行的持续时间Lambda函数将出现在Lambda的monitoring选项卡的仪表板中,其外观如下所示:





节流阀/错误也是如此/调用数。




还可以设置CloudWatch筛选器以用于lambda函数的内存使用,其数据可用于进一步优化处理程序。这是有关如何进行设置的不错的信息。
还设置适当的日志记录,以便以后可以查看CloudWatch中的日志。这本身并不是一个优化技巧,而是更多的最佳实践

测试:彻底测试您的lambda函数,这样您就不会错过任何情况。这很重要,因为lambda在放弃之前会重试失败的功能。因此,如果您正确测试了该功能,则可以节省时间。 Lambda函数测试指南



#3 楼

签出IOpipe分析器,以从Lambda调用中获取完整的v8分析器转储。您可以将它们加载到Chrome Devtools中,以准确了解CPU时间在哪里,以及函数如何使用内存。



免责声明:我为IOpipe工作。 br />

#4 楼

使用StackImpact代理获取CPU和内存配置文件。博客文章中的更多详细信息:AWS Lambda CPU和内存性能分析(Node.js)。由于Lambda Node.js进程在两次请求之间处于冻结状态,因此大多数其他工具可能无法立即使用。



免责声明:我为StackImpact工作

评论


虽然听起来很相关,而且可能是有效的解决方案,但对它可能如何帮助解决该问题进行一些扩展将避免出现链接的感觉,只有在链接腐烂的情况下,才可以初步了解如何提供帮助。

–滕西拜
17-10-20在9:17