您现在访问的是微软AZURE全球版技术文档网站,若需要访问由世纪互联运营的MICROSOFT AZURE中国区技术文档网站,请访问 https://docs.azure.cn.

Azure Functions 托管选项

在 Azure 中创建函数应用时,必须为应用选择托管计划。 有三个基本托管计划可用于 Azure Functions:消耗计划高级计划专用(应用服务)计划。 Linux 和 Windows 虚拟机上的所有托管计划均已正式发布 (GA)。

选择的托管计划决定了以下行为:

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

本文详细比较了各种托管计划和基于 Kubernetes 的托管

备注

如果选择在 Kubernetes 群集中托管函数,请考虑使用已启用 Azure Arc 的 Kubernetes 群集。 预览版中现已包括在已启用 Azure Arc 的 Kubernetes 群集上的托管。 若要了解详细信息,请参阅 Azure Arc 上的应用服务、函数和逻辑应用

计划概述

下面汇总了适用于 Functions 的三个主要托管计划的优点:

计划 好处
消耗计划 在函数运行时自动缩放,你只需为计算资源付费。

在消耗计划中,会根据传入事件数动态添加和删除 Functions 主机的实例。

✔ 默认托管计划。
✔ 仅当函数运行时才产生费用。
✔ 即使是在负载较高期间也可自动缩放。
高级计划 使用预热的工作器根据需要自动缩放,这些工作器在空闲后会毫不延迟地运行应用程序,在更强大的实例上运行,并连接到虚拟网络。

请考虑下列情况中的 Azure Functions 高级计划:

✔ 你的函数应用持续地运行,或者近乎持续地运行。
✔ 你的消耗计划具有大量的小型执行操作,具有较高的执行费用但较低的 GB 秒数。
✔ 你需要的 CPU 或内存选项超出消耗计划提供的选项。
✔ 你的代码所需的运行时间超过消耗计划允许的最长执行时间。
✔ 你需要使用消耗计划中未提供的功能,例如虚拟网络连接。
✔ 需要提供用于运行函数的自定义 Linux 映像。
专用计划 在应用服务计划中以定期应用服务计划费率运行你的函数。

最适用于不能使用 Durable Functions 的长时间运行的方案。 对于以下情况,可以考虑使用应用服务计划:

✔ 具有已运行其他应用服务实例的、未充分利用的现成 VM。
✔ 需要可预测的缩放和成本。

本文中的比较表还包括以下托管选项,这些选项提供了运行函数应用所需的最大限度的控制和隔离。

托管选项 详细信息
ASE 应用服务环境 (ASE) 是一项应用服务功能,可提供完全隔离和专用的环境,以便高度安全地运行应用服务应用。

ASE 适用于有以下要求的应用程序工作负荷:

✔ 极高的缩放性。
✔完全计算隔离和安全的网络访问。
✔ 内存使用率较高。
Kubernetes
直接
Azure Arc
Kubernetes 提供了一个在 Kubernetes 平台之上运行的完全隔离的专用环境。

Kubernetes 适用于有以下要求的应用程序工作负荷:
✔ 自定义硬件要求。
✔ 隔离和安全的网络访问。
✔ 能够在混合或多云环境中运行。
✔ 与现有的 Kubernetes 应用程序和服务一起运行。

本文中的其余表对有关各种功能和行为的计划进行了比较。 有关动态托管计划(“消耗”和“高级”)之间的成本比较,请参阅 Azure Functions 定价页。 有关各种专用计划选项的定价,请参阅应用服务定价页

操作系统/运行时

下表显示了托管计划的操作系统和语言支持。

Linux1
仅限代码
Windows2
仅限代码
Linux1、3
Docker 容器
消耗计划 .NET Core 3.1
.NET 5.0
Javascript
Java
Python
TypeScript
.NET Core 3.1
.NET 5.0
Javascript
Java
PowerShell Core
TypeScript
不支持
高级计划 .NET Core 3.1
.NET 5.0
Javascript
Java
Python
TypeScript
.NET Core
.NET 5.0
Javascript
Java
PowerShell Core
TypeScript
.NET Core
Node.js
Java
PowerShell Core
Python
TypeScript
专用计划 .NET Core 3.1
.NET 5.0
Javascript
Java
Python
TypeScript
.NET Core 3.1
.NET 5.0
Javascript
Java
PowerShell Core
TypeScript
.NET Core 3.1
.NET 5.0
Javascript
Java
PowerShell Core
Python
TypeScript
ASE .NET Core 3.1
.NET 5.0
Javascript
Java
Python
TypeScript
.NET Core 3.1
.NET 5.0
Javascript
Java
PowerShell Core
TypeScript
.NET Core 3.1
.NET 5.0
Javascript
Java
PowerShell Core
Python
TypeScript
Kubernetes(直接) 不适用 不适用 .NET Core 3.1
.NET 5.0
Javascript
Java
PowerShell Core
Python
TypeScript
Azure Arc(预览版) .NET Core 3.1
.NET 5.0
Javascript
Java
Python
TypeScript
不适用 .NET Core 3.1
.NET 5.0
Javascript
Java
PowerShell Core
Python
TypeScript

1 对于 Python 运行时堆栈,Linux 是唯一受支持的操作系统。
2 对于 PowerShell 运行时堆栈,Windows 是唯一受支持的操作系统。
3 对于 Docker 容器,Linux 是唯一受支持的操作系统。

函数应用超时持续时间

函数应用的超时持续时间通过 host.json 项目文件中的 functionTimeout 属性进行定义。 下表显示了两种计划和不同运行时版本的默认值和最大值(以分钟为单位):

计划 运行时版本 默认 最大值
消耗 1.x 5 10
消耗 2.x 5 10
消耗 3.x 5 10
高级 1.x 无限制 无限制
高级 2.x 30 无限制
高级 3.x 30 无限制
应用服务 1.x 无限制 无限制
应用服务 2.x 30 无限制
应用服务 3.x 30 无限制

备注

不管函数应用超时设置如何,230 秒是 HTTP 触发的函数在响应请求时需要的最长时间。 这起因于 Azure 负载均衡器的默认空闲超时。 对于处理时间较长的情况,考虑使用 Durable Functions 异步模式延迟实际工作并返回即时响应

缩放

下表对各种托管计划的缩放行为进行了比较。

计划 向外扩展 最大实例数
消耗计划 事件驱动型。 即使是在负载较高期间也可自动扩展。 Azure Functions 基础结构可根据传入的触发器事件数添加额外的 Functions 主机实例,因此可以缩放 CPU 和内存资源。 200
高级计划 事件驱动型。 即使是在负载较高期间也可自动扩展。 Azure Functions 基础结构可根据触发函数的事件数添加额外的 Functions 主机实例,因此可以缩放 CPU 和内存资源。 100
专用计划 1 手动/自动缩放 10-20
ASE 1 手动/自动缩放 100
Kubernetes 对使用 KEDA 的 Kubernetes 群集进行事件驱动型自动缩放。 因群集而异。    

1 有关各种应用服务计划选项的特定限制,请参阅应用服务计划限制

冷启动行为

计划 详细信息
消耗 计划 当空闲时,应用数可能会缩减为零,这意味着某些请求在启动时可能会产生额外的延迟。 消耗计划有一些可缩短冷启动时间的优化措施,包括从已经运行函数主机和语言进程的预热占位符函数中进行拉取。
高级计划 永久预热实例以避免任何冷启动。
专用计划 在专用计划中运行时,Functions 主机可以连续运行,这意味着冷启动实际上不是问题。
ASE 在专用计划中运行时,Functions 主机可以连续运行,这意味着冷启动实际上不是问题。
Kubernetes 可以根据 KEDA 配置对应用进行配置以避免冷启动。 如果配置为缩放到零,则新事件会遇到冷启动。

服务限制

资源 消耗计划 高级计划 专用计划 ASE Kubernetes
默认超时持续时间(分钟) 5 30 301 30 30
最大超时持续时间(分钟) 10 无限制7 无限制2 unbounded unbounded
最大出站连接数(每个实例) 600 个处于活动状态(总共 1200 个) unbounded unbounded unbounded unbounded
最大请求大小 (MB)3 100 100 100 100 取决于群集
最大查询字符串长度3 4096 4096 4096 4096 取决于群集
最大请求 URL 长度3 8192 8192 8192 8192 取决于群集
每个实例的 ACU 100 210-840 100-840 210-2508 AKS 定价
最大内存(每个实例的 GB 数) 1.5 3.5-14 1.75-14 3.5 - 14 支持任何节点
最大实例计数 200 1009 因 SKU 而异10 10010 取决于群集
每个计划的函数应用数 100 100 无限制4 unbounded unbounded
应用服务计划 每个区域 100 个 每个资源组 100 个 每个资源组 100 个 - -
存储5 5 TB 250 GB 50-1000 GB 1 TB 不适用
每个应用的自定义域数 5006 500 500 500 不适用
自定义域 SSL 支持 包含无限制的 SNI SSL 连接 包含无限制的 SNI SSL 连接和 1 个 IP SSL 连接 包含无限制的 SNI SSL 连接和 1 个 IP SSL 连接 包含无限制的 SNI SSL 连接和 1 个 IP SSL 连接 不适用

1 默认情况下,应用服务计划中的 Functions 1.x 运行时的超时是无限制的。
2 需要将应用服务计划设置为 Always On。 按标准费率付费。
3 这些限制在主机中设置
4 可以托管的函数应用的实际数目取决于应用的活动、计算机实例的大小和相应的资源利用率。
5 存储限制是同一应用服务计划中所有应用的临时存储中的总内容大小。 消耗计划使用 Azure 文件存储作为临时存储。
6 当函数应用托管在消耗计划中时,仅支持 CNAME 选项。 对于高级计划应用服务计划中的函数应用,可以使用 CNAME 或 A 记录映射自定义域。
7 保证最长 60 分钟。
8 辅助角色是托管客户应用的角色。 辅助角色有 3 种固定大小:一个 vCPU/3.5 GB RAM;两个 vCPU/7 GB RAM;四个 vCPU/14 GB RAM。
9 在 Linux 高级计划中运行时,当前限制为 20 个实例。
10 有关详细信息,请参阅应用服务限制

网络功能

功能 消耗计划 高级计划 专用计划 ASE Kubernetes
入站 IP 限制和专用站点访问 ✅是 ✅是 ✅是 ✅是 ✅是
虚拟网络集成 ❌否 ✅是(区域) ✅是(区域和网关) ✅是 ✅是
虚拟网络触发器(非 HTTP) ❌否 ✅是 ✅是 ✅是 ✅是
混合连接(仅限 Windows) ❌否 ✅是 ✅是 ✅是 ✅是
出站 IP 限制 ❌否 ✅是 ✅是 ✅是 ✅是

计费

计划 详细信息
消耗计划 只需为函数运行时间付费。 账单将基于执行数量、执行时间和所用内存。
高级计划 高级计划基于在必需实例和预热实例中使用的核心秒数和内存。 每个计划必须至少有一个实例始终处于预热状态。 此计划提供了最可预测的定价。
专用计划 应用服务计划中函数应用的费用与其他应用服务资源(例如 Web 应用)的费用相同。
应用服务环境 (ASE) ASE 每月会产生统一的基础结构使用费,该费率不会随 ASE 大小的变化而改变。 每个应用服务计划 vCPU 也会产生费用。 ASE 中托管的所有应用都在“隔离”定价 SKU 中。
Kubernetes 只需支付 Kubernetes 群集的费用;Functions 无额外费用。 函数应用作为应用程序工作负荷在群集之上运行,就像普通应用一样。

后续步骤