比较 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 计算资源提供的高端处理能力来实现功能。
函数应用超时持续时间
functionTimeout
host.json 项目文件中的属性用于指定函数应用中函数的超时时长。 此属性专门应用于函数执行。 触发器启动函数执行后,函数需要在超时持续时间内返回/响应。
下表显示特定计划的默认值和最大值(以分钟为单位):
计划 | 默认 | 最大1 |
---|---|---|
Flex 消耗计划 | 30 | 无限制2 |
高级计划 | 304 | 无限2 |
专用计划 | 304 | 无界限3 |
容器应用 | 30 | 无限5 |
消耗计划 | 5 | 10 |
- 无论函数应用的超时设置如何,HTTP 触发的函数响应请求的最长时间均为 230 秒。 这是因为 Azure 负载均衡器的默认空闲超时。 对于较长的处理时间,请考虑使用 Durable Functions 异步模式 或延迟实际工作并返回即时响应。
- 不强制实施最大执行超时期限。 在 Flex 消耗和高级计划的缩减期间,用于函数执行的宽限期为 60 分钟,而在平台更新期间提供的宽限期为 10 分钟。
- 要求将应用服务计划设置为 Always On。 在平台更新期间提供 10 分钟的宽限期。
- 1.x 版 Functions 主机运行时的默认超时为“无限制”。
- 当最小副本数设置为零时,默认超时取决于应用中使用的特定触发器。