【问题标题】:Does Azure Functions run NPM install on cold starts?Azure Functions 是否在冷启动时运行 NPM 安装?
【发布时间】:2020-03-05 12:46:34
【问题描述】:

我设置了一个 Azure 函数来为我处理一些到数据库的日志记录。我的项目中唯一的依赖项是mssql 包,该函数大约有 70 行代码,基本上只是接受请求并将其映射到数据库。

我对某些请求的响应时间过长,最多 3 分钟!我的自发想法是,这是因为它必须在每次启动函数的新实例(冷启动)时运行 npm install。

这是正确的吗?我能做些什么来减少延迟?在构建步骤中使用 WebPack 捆绑 mssql 并将捆绑的 js 发布到 Azure 是否有帮助?

【问题讨论】:

    标签: node.js azure azure-functions


    【解决方案1】:

    当您在函数上使用消耗计划时,这是一种已知行为(称为冷启动)。同一问题的示例reported here

    您可以采取哪些措施来缓解此问题,如果您不想面对冷启动,您可以使用高级计划(它仍然是即用即付定价模式)。更多信息here

    【讨论】:

    • 对。那么它会在冷启动时运行 npm install 吗?
    • 是的,它会为不可用的包运行 npm install。
    • 另外,请不要创建机制来预热您的函数。这是在我们没有可用的高级计划时创建的解决方法,但现在有了可用的高级计划,它始终为您提供预热实例
    • 我有一个“keep-alive 函数”,它向我的主函数发送 ping 请求。我应该删除它吗?
    • 这就是要走的路。另一个重要的细节,这是我与其他人多次讨论过的。如果您在函数应用程序上使用 Windows 环境,则无论您使用什么 VM,都将预安装 .NET 框架和 .NET Core,因此您可能在 c# 代码中使用的大多数包都将在那里可用,因此无需在函数的冷启动期间安装包,这是另一种显着减少冷启动的方法,使用c#和.NET(框架或核心)而不是node等开源技术。但是如果你需要node,那就使用node . :)
    【解决方案2】:

    如果您已经拥有这些软件包,它将不会安装。如果它不可用,它将安装。我认为这是冷启动。

    看看this doc

    使用应用服务计划可以避免这种情况。

    您还可以通过预热功能来避免此问题。看看this doc

    【讨论】:

    • 它在冷启动时运行 npm install 吗?我是否会受益于使用 WebPack 构建项目并发布捆绑包以避免在冷启动时安装 npm?
    • @motosson 是的,你是对的。使用 WebPack 捆绑您的节点模块是一个不错的选择。它可以减少您的冷启动时间。但是为了避免冷启动,我建议你预热功能或使用应用服务计划。
    • @mottosson 消费模型允许您的代码在不同的环境 (VM) 中运行。因此,如果它没有可用的软件包,则需要安装它。
    • 另外,我想说,不要预热功能,也不要使用应用服务计划。应用服务计划是一种不同的模型,您可以在其中预先分配要由您的功能使用的资源。因此,您失去了使用消费计划所带来的成本效益。如果您需要预热实例,请使用高级计划
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-19
    • 1970-01-01
    • 1970-01-01
    • 2021-09-03
    相关资源
    最近更新 更多