比较 Azure Functions 托管选项

已完成

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

托管选项 服务 可用性 容器支持
消耗计划 Azure Functions 正式发布 (GA)
灵活消费计划 Azure Functions GA
高级计划 Azure Functions GA Linux
专用计划 Azure Functions GA Linux
容器应用 Azure 容器应用程序 GA Linux

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

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

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

计划概述

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

消耗计划

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

Flex 消耗计划

通过选择计算资源、使用虚拟网络和即用即付的计费模式,实现出色的可扩展性。 在 Flex 可变消费计划中,会根据配置的每个实例的并发数量和传入事件的数量,动态添加和移除 Functions 主机实例。

可以通过指定预配置(始终就绪)实例的数量来减少冷启动情况的出现。 根据需求自动调整规模。

高级计划

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

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

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

专用计划

在应用服务计划中,以标准应用服务计划费率运行您的函数。 最适合无法使用 Durable Functions 的长时间应用场景。

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

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

容器应用

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

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

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

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

函数应用超时持续时间

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

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

计划 默认 最大1
Flex 消耗计划 30 无限制2
高级计划 304 无限2
专用计划 304 无界限3
容器应用 30 无限5
消耗计划 5 10
  1. 无论函数应用的超时设置如何,HTTP 触发的函数响应请求的最长时间均为 230 秒。 这是因为 Azure 负载均衡器的默认空闲超时。 对于较长的处理时间,请考虑使用 Durable Functions 异步模式 或延迟实际工作并返回即时响应。
  2. 不强制实施最大执行超时期限。 在 Flex 消耗和高级计划的缩减期间,用于函数执行的宽限期为 60 分钟,而在平台更新期间提供的宽限期为 10 分钟。
  3. 要求将应用服务计划设置为 Always On。 在平台更新期间提供 10 分钟的宽限期。
  4. 1.x 版 Functions 主机运行时的默认超时为“无限制”。
  5. 当最小副本数设置为零时,默认超时取决于应用中使用的特定触发器。