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