Azure Functions:生命周期如何运作?

Azure Functions: How does the life-cycle work?

我 运行 遇到了 Azure Functions 的一些问题,其中一个 Function App 部署正确并且运行良好,现在声称缺少依赖项 (NodeJS) 并且在第二天测试时出错。如果我了解 Azure Functions 如何工作的生命周期,我想我可以更轻松地进行故障排除和修复。

任何人都可以解释生命周期或指出我似乎找不到的文档吗?

例如,我正在使用持续部署。使用此方法似乎有一个默认值 deploy.cmd 用于:

  1. Git clone/pull 仓库到 D:\Site\repository
  2. 运行 在存储库上安装 npm。
  3. Kudosync(不管这意味着什么)这些文件到 D:\Site\wwwroot

这一切都很完美。我想知道接下来会发生什么。

例如该函数在一段时间内未使用,因此我假设它会停止运行并被占用 "out-of-order"?

再次访问时,需要重新启动一些东西。

当您将某些内容部署到 Azure Functions 时,有几个选项,但大多数都会通过您的 .scm 站点(又名 Kudu)。 Kudu 为您与文件系统交互,这通常是某种网络共享(对于消费计划,它是 Azure 文件;对于应用服务计划,它内置于应用服务中)。

假设我通过 Kudu git push 将内容添加到我的 Function App,内容更新后,Kudu 会将存储库中的内容 "deploy" 发送到 ./site/wwwroot 运行 任何部署脚本后的文件夹。

Function App 的宿主随后会看到文件更改,并获取对您的 Functions 的更改。如果给定实例上的函数将任何内容写入磁盘,其他实例也会看到它。

这是一个简化得多的示意图:

正如 Fabio 提到的,我们现在有一个 open issue 函数需要加载大量文件(即使它只是 1 个 require 语句,也可能有数百个文件需要加载)这取决于)导致它们第一次加载异常长时间,因为 Azure 文件处理大量请求的速度很慢,尤其是在缩放负载下。我们有计划在不久的将来解决这个问题。同时,您可以使用应用服务计划或减少依赖文件的数量(即使内容大小大致相同)。