Answers:
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时具有相似的性能。但是,您已经对自己的功能有了很高的信心,只需要验证它们的行为是否正确,而不必对它们进行全面的介绍。
我可能无法完全回答,但以下是我对lambda的有限经验:
monitoring
选项卡的仪表板中,如下所示:油门/错误/调用次数也是如此。
签出IOpipe分析器,以从Lambda调用中获取完整的v8分析器转储。您可以将它们加载到Chrome Devtools中,以准确了解CPU时间在哪里以及如何将内存用于功能。
免责声明:我为IOpipe工作
使用StackImpact代理获取CPU和内存配置文件。博客文章中的更多详细信息:AWS Lambda CPU和内存性能分析(Node.js)。由于Lambda Node.js进程在两次请求之间处于冻结状态,因此大多数其他工具可能无法立即使用。
免责声明:我为StackImpact工作