消耗计划上的 Azure Function 冷启动时间最长可达 30 分钟

标签 azure azure-functions

我有一个 azure 函数 v3,用 C# 编写,使用类库方法。

  • 该函数由 blob 存储触发。
  • 该函数正在使用消耗计划。

问题是冷启动可能长达 30 分钟!我查阅了this link的文档

但没有关于预期冷启动时间的具体数字。

一个有趣的观察是,如果我导航到门户,然后单击“刷新”按钮:

enter image description here

然后该函数立即被触发。

  1. 这是正常的预期行为吗?
  2. 您能否向我指出任何明确说明消耗计划冷启动时间约为 0-30-50 分钟即可的文档?

最佳答案

这是不正确的,您指的是超时持续时间 - 这不等于冷启动。如果您的函数需要那么长时间,则可能会导致出现异常/错误(我不是指代码中的异常)。任何文档(甚至是微软的文档)都没有提到冷启动需要 30 分钟。

如果冷启动花费的时间太长(>~1 分钟)并且您确定没有任何启动错误 - 分解您的函数并并行触发这些函数(如果可能)。 Application Insights 是您的 friend 。

最后,没有确切的数字 - 它是基于每次使用的。有很多因素会影响执行时间 - 这可能会导致人们将责任归咎于冷启动,而不是函数的职责和依赖性。对于 Functions/Lambda,它不仅仅是“像任何其他 API 一样的代码”,还存在一些架构更改。

我绝对想知道的是,如果将代码作为代码发布到 Azure Function 与在 docker 中发布( https://learn.microsoft.com/en-us/azure/devops/pipelines/targets/function-app-container?view=azure-devops&tabs=yaml ),性能有何差异(特别是冷启动)。我会尝试找一些时间对此进行良好的实验并报告(不 promise )。

进一步阅读 -

  1. 粗冷启动时序研究:https://mikhail.io/serverless/coldstarts/azure/ (他使用 AWS Lambda 进行了相同的实验)
  2. 另一个很好的 Lambda 和函数比较研究:https://azurefromthetrenches.com/comparative-performance-of-azure-functions-and-aws-lambda/
  3. https://azure.microsoft.com/en-in/blog/understanding-serverless-cold-start/

编辑: 虽然这是一个稍旧的 Github Issue Thread,但该线程报告的最大冷启动时间约为 2 分钟;似乎平均值约为 20 秒左右。请注意,Microsoft Azure 的工程经理 (David Ebbo) 当时提到,对于琐碎的功能来说,花费的时间不应超过 10 秒。 https://github.com/Azure/azure-functions-host/issues/838

编辑 2:30 分钟超时持续时间适用于非消费计划(消费计划为 5 分钟),因此我假设您打算使用非消费计划,在这种情况下您不会有冷启动问题。其他计划使功能保持温暖。 请仔细阅读您链接的文档中的“计划概述” - https://learn.microsoft.com/en-us/azure/azure-functions/functions-scale#overview-of-plans

关于消耗计划上的 Azure Function 冷启动时间最长可达 30 分钟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67504904/

相关文章:

azure-functions - Azure 函数部署失败,Azure Pipeline 中的 Azure CLI 2.2.0 更新

Java Azure 函数卡住 "Executing"

c# - Azure Function 与源一起发布

azure - U-SQL 根据文件中的不同值将 CSV 文件拆分为多个文件

azure - 在 Azure Pipelines 中用 FileTransform@1 替换变量时,可以采取哪些步骤来修复 InvalidRequestContent 错误?

azure - 通过 Visual Studio 创建 Azure 函数时无法连接到 Cosmos DB

c# - 从 azure 函数运行 azure 存储过程

azure - 从 Azure 上的整体迁移到微服务时,是否可以保留相同的 api url

azure - 如何在 azure 上打开 websocket 端口?

c# - 无法在门户中将 azure 队列存储与 azure 函数(调度程序触发器)绑定(bind)