比较 Azure Functions 托管选项

已完成

在 Azure 中创建函数应用时,必须为应用选择托管计划。 Azure 为函数代码提供了以下托管选项:

托管选项 服务 可用性 容器支持
消耗计划 Azure Functions 正式发布 (GA)
Flex 消耗计划 Azure Functions 预览
高级计划 Azure Functions GA Linux
专用计划 Azure Functions GA Linux
容器应用 Azure Container Apps GA Linux

Azure 应用服务基础结构有助于在 Linux 和 Windows 虚拟机上托管 Azure Functions。 选择的托管选项决定了以下行为:

  • 函数应用的缩放方式。
  • 每个函数应用实例可用的资源。
  • 对 Azure 虚拟网络连接等高级功能的支持。
  • 支持 Linux 容器。

你选择的计划也会影响运行函数代码的成本。

计划概述

下面是各种托管选项的优点摘要:

消耗计划

消耗计划是默认托管计划。 仅当函数以自动缩放方式运行(即用即付)时,才需要为计算资源付费。 在消耗计划中,会根据传入事件数动态添加和删除 Functions 主机的实例。

Flex 消耗计划

通过计算选择、虚拟网络和即用即付计费获得高可伸缩性。 在 Flex 消耗计划中,会根据配置的每个实例的并发性和传入事件数动态添加和移除 Functions 主机的实例。

可以通过指定预配置(始终就绪)实例的数量来减少冷启动情况的出现。 按需自动缩放。

高级计划

使用预热的工作器根据需要自动缩放,这些工作器在空闲后无延迟地运行应用程序,在更强大的实例上运行,并连接到虚拟网络。

对于以下情况,请考虑使用 Azure Functions 高级计划:

  • 函数应用持续或几乎持续运行。
  • 你希望对实例进行更多的控制,并希望通过事件驱动的扩展在同一计划中部署多个函数应用程序。
  • 消耗计划中存在大量小型执行和高执行帐单,但消耗计划中的 GB 秒较低。
  • 所需的 CPU 或内存选项比消耗计划提供的 CPU 或内存选项要多。
  • 代码需要运行的时间长于消费计划允许的最长执行时间。
  • 需要配置虚拟网络连接。
  • 你想提供一个自定义 Linux 映像来在上面运行函数。

专用计划

在应用服务计划中以定期应用服务计划费率运行你的函数。 最适用于不能使用 Durable Functions 的长时间运行的方案。

对于以下情况,可以考虑使用应用服务计划:

  • 必须具有完全可预测的计费,或者需要手动缩放实例。
  • 想要在同一计划中运行多个 Web 应用和函数应用
  • 需要访问更大的计算大小选项。
  • 应用服务环境 (ASE) 提供完全的计算隔离和安全的网络访问。
  • 高内存使用率和高规模 (ASE)。

容器应用

在 Azure 容器应用托管的完全托管环境中创建和部署容器化函数应用。

使用 Azure Functions 编程模型生成事件驱动、无服务器、云原生函数应用。 将函数与其他微服务、API、网站和工作流作为容器托管的程序一起运行。

在以下情况下,请考虑在容器应用中托管函数:

  • 希望将自定义库与函数代码打包在一起以支持业务线应用程序。
  • 需要将代码执行从本地或旧应用迁移到容器中运行的云本机微服务。
  • 希望避免管理 Kubernetes 群集和专用计算的开销和复杂性。
  • 需要专用 CPU 计算资源提供的高端处理能力来实现功能。

函数应用超时持续时间

host.json 项目文件中的 functionTimeout 属性指定函数应用中函数的超时持续时间。 此属性专门应用于函数执行。 触发器启动函数执行后,函数需要在超时持续时间内返回/响应。

下表显示特定计划的默认值和最大值(以分钟为单位):

计划 默认 Maximum1
消耗计划 5 10
Flex 消耗计划 30 不受限制3
高级计划 302 不受限制3
专用计划 302 不受限制3
容器应用 305 不受限制3
  1. 不管函数应用超时设置如何,230 秒是 HTTP 触发的函数在响应请求时需要的最长时间。
  2. Functions 运行时 1.x 版本的默认超时不受限制
  3. 保证最长 60 分钟。 操作系统和运行时修补、漏洞修补和行为扩展仍然可以取消函数执行。
  4. 在 Flex 消耗计划中,主机不会强制实施执行时间限制。 但是,目前没有保证,因为平台可能需要在横向缩减、部署或应用更新期间终止实例。
  5. 当最小副本数设置为零时,默认超时取决于应用程序中使用的特定触发器。