Architecture Azure功能:生命周期是如何工作的?

Architecture Azure功能:生命周期是如何工作的?,architecture,lifecycle,azure-functions,Architecture,Lifecycle,Azure Functions,我在Azure功能方面遇到了一些问题,其中一个功能应用程序部署正确,运行良好,现在声称缺少依赖项(NodeJ),并且在第二天测试时出错。如果我了解Azure功能如何工作的生命周期,我想我可以更轻松地进行故障排除和修复 谁能解释一下生命周期,或者给我指一下我似乎找不到的文档 例如,我使用的是连续部署。使用此方法,似乎有一个默认的deploy.cmd用于: Git克隆/将存储库拉到D:\Site\repository 在存储库上运行npm安装 Kudosync(无论这是什么意思)将这些文件发送到D:

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

谁能解释一下生命周期,或者给我指一下我似乎找不到的文档

例如,我使用的是连续部署。使用此方法,似乎有一个默认的deploy.cmd用于:

  • Git克隆/将存储库拉到D:\Site\repository
  • 在存储库上运行npm安装
  • Kudosync(无论这是什么意思)将这些文件发送到D:\Site\wwwroot
  • 这一切都很好。我想知道接下来会发生什么

    e、 g.函数在一段时间内未被使用,因此我假设它已停止运行并出现“故障”

    当它再次进入时,它需要再次旋转一些东西

    • 它是否再次经历了部署过程(看起来不像)
    • 什么/在哪里/如何将文件恢复回实例
    • 这与扩展应用程序时使用的过程相同吗

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

    因此,假设我通过Kudu将内容推送到我的函数应用程序中,更新内容后,Kudu将在存储库中获取内容,并在运行所有部署脚本后将其“部署”到
    /site/wwwroot
    文件夹中

    然后,功能应用程序的主机会看到文件更改,并拾取对功能的更改。如果给定实例上的函数将任何内容写入磁盘,其他实例也会看到它

    下面是一个非常简化的图表,显示了它的外观:


    正如Fabio提到的,对于需要加载大量文件的函数,我们现在有一个解决方案(即使只有1个require语句,它可能依赖数百个文件)由于Azure文件处理大量请求的速度很慢,特别是在从扩展加载的情况下,这会导致它们在第一次加载时花费异常长的时间。我们计划在不久的将来解决这个问题。同时,您可以使用应用程序服务计划或减少依赖文件的数量(即使内容大小大致相同)。

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

    因此,假设我通过Kudu将内容推送到我的函数应用程序中,更新内容后,Kudu将在存储库中获取内容,并在运行所有部署脚本后将其“部署”到
    /site/wwwroot
    文件夹中

    然后,功能应用程序的主机会看到文件更改,并拾取对功能的更改。如果给定实例上的函数将任何内容写入磁盘,其他实例也会看到它

    下面是一个非常简化的图表,显示了它的外观:


    正如Fabio提到的,对于需要加载大量文件的函数,我们现在有一个解决方案(即使只有1个require语句,它可能依赖数百个文件)由于Azure文件处理大量请求的速度很慢,特别是在从扩展加载的情况下,这会导致它们在第一次加载时花费异常长的时间。我们计划在不久的将来解决这个问题。同时,您可以使用应用程序服务计划或减少依赖文件的数量(即使内容大小大致相同)。

    能否提供一些详细信息,如您看到的错误消息?部署发生一次,然后各个实例使用网络共享访问内容。因此,如果它能工作一次,那么它应该能再次工作,直到下一次部署。这绝对不是我的经验。有人告诉我,npm模块缺失,这些模块是在一天前安装并运行的。是否存在任何可能导致不同情况的错误条件?您可能会遇到这个问题:但我在猜测。如果你能分享你看到的错误的详细信息,那会很有帮助。@ChrisAnderson MSFT如果你想写一篇网络共享概述/etc,我肯定会接受这个答案(因为这是我的问题)。你能提供一些细节,比如你看到的错误消息吗?部署发生一次,然后各个实例使用网络共享访问内容。因此,如果它能工作一次,那么它应该能再次工作,直到下一次部署。这绝对不是我的经验。有人告诉我,npm模块缺失,这些模块是在一天前安装并运行的。是否存在任何可能导致不同情况的错误条件?您可能会遇到这个问题:但我在猜测。如果你能分享你看到的错误的详细信息,那会很有帮助。@ChrisAnderson MSFT如果你想写一篇网络共享概述/etc,我肯定会接受这个答案(因为这是我的问题)。