Azure Functions Flex Consumption 计划托管

Flex 消耗是基于 Linux 的 Azure Functions 托管计划,它基于消耗按使用付费的无服务器计费模型。 它通过引入专用网络、实例内存大小选择和基于 无服务器 模型的快速/大规模扩展功能,为你提供了更大的灵活性和可自定义性。

可以查看 Flex 消耗计划示例存储库中以 Flex 消耗计划为特色的端到端示例。

好处

Flex Consumption 计划基于 Consumption 计划的优势,其中包括动态缩放和基于执行的计费。 借助 Flex Consumption,还可以获得以下额外功能:

此表可帮助你将 Flex Consumption 的功能与 Consumption 托管计划直接进行比较:

功能 消耗 Flex 消耗
缩放到零 ✅ 是 ✅ 是
缩放行为 事件驱动型 事件驱动 (快速)
虚拟网络 ❌ 不支持 ✅ 受支持
专用计算(缓解冷启动问题) ❌ 无 ✅ 始终就绪的实例(可选)
计费 仅执行时间 执行时间 + 始终就绪的实例
横向扩展实例(最大值) 200 1000

有关 Flex 消耗计划与消耗计划和其他所有计划及托管类型的完整比较,请参阅函数缩放和托管选项

虚拟网络集成

Flex 消耗计划通过添加对虚拟网络集成的支持,扩展了消耗计划的传统优势。 应用在 Flex Consumption 计划中运行时,可以连接到在虚拟网络中保护的其他 Azure 服务。 尽管如此,你仍可以利用无服务器计费和缩放,以及 Flex Consumption 计划的规模和吞吐量优势。 有关详细信息,请参阅 “启用虚拟网络集成”。

实例内存

在 Flex Consumption 计划中创建函数应用时,可以选择运行应用的实例的内存大小。 请参阅 计费 ,了解实例内存大小如何影响函数应用的成本。

目前,Flex Consumption 提供这些实例内存大小选项:512 MB、2,048 MB 和 4,096 MB。

确定要与应用一起使用的实例内存大小时,需要考虑以下事项:

  • 2048 MB 实例内存大小是默认值,应该用于大多数情况。 512 MB 和 4,096 MB 实例内存大小适用于最适合应用程序的并发或处理能力要求的方案。 有关详细信息,请参阅 配置实例内存
  • 你可以随时更改实例内存大小。 有关详细信息,请参阅 配置实例内存
  • 实例资源在函数代码和 Functions 主机之间共享。
  • 实例内存越大,每个实例可以处理更多并发执行或更密集的 CPU 或内存工作负载。 特定的缩放决策适用于特定工作负载。
  • HTTP 触发器的默认并发取决于实例内存大小。 有关详细信息,请参阅 HTTP 触发器并发
  • 可用的 CPU 和网络带宽与特定实例大小成正比。

按函数缩放

并发是确定 Flex 消耗函数应用缩放方式的一个关键因素。 为了提高具有各种触发器类型的应用的缩放性能,Flex Consumption 计划为按函数缩放应用提供了一种更确定的方式。

按函数缩放 行为是托管平台的一部分,因此无需配置应用或更改代码。 有关详细信息,请参阅事件驱动缩放文章中的 按函数缩放

在按功能缩放中,根据组聚合对某些功能触发器做出决策。 下表显示了定义的功能缩放组:

缩放组 组中的触发器 设置值
HTTP 触发器 HTTP 触发器
SignalR 触发器
http
Blob 存储触发器
(基于事件网格)
Blob 存储触发器 blob
持久性函数 业务流程触发器
活动触发器
实体触发器
durable

应用中的所有其他功能均在其自己的实例组中单独缩放,这些实例是使用约定 function:<NAMED_FUNCTION> 引用的。

始终就绪实例

Flex 消耗包括一项始终就绪的功能,可用于选择始终运行并分配给每个函数缩放组或函数的实例。 对于需要始终有最少数量的实例准备好处理请求的情况,“始终就绪”是一个不错的选择。 例如,要减少应用程序的冷启动延迟的情况。 默认值为 0(零)。

例如,如果为 HTTP 函数组始终设置为 2,平台将让两个实例始终运行,并将这两个实例分配给应用中的 HTTP 函数。 这些实例正在处理函数执行,但根据并发设置,平台将扩展到这两个实例之外的按需实例。

启用区域冗余时,每个函数或函数组只能配置两个始终就绪的实例。

若要了解如何配置始终就绪的实例,请参阅 “设置始终就绪的实例计数”。

并发

并发是指在应用的实例上函数的并行执行的数量。 可以将每个实例设置为在任何给定时间应处理的最大并发执行数。 并发对应用缩放方式有直接影响,因为在较低的并发级别,需要更多实例来处理函数的事件驱动的需求。 虽然你可以控制和微调并发,但我们提供了适用于大多数情况的默认值。

若要了解如何设置 HTTP 触发器函数的并发限制,请参阅 设置 HTTP 并发限制。 若要了解如何为非 HTTP 触发器函数设置并发限制,请参阅 目标基础缩放

部署

Flex 消耗计划中的部署遵循单一路径,不再需要应用设置来影响部署行为。 生成项目代码并将其压缩到应用程序包中后,将其部署到 Blob 存储容器中。 启动时,应用会获取包并运行此包中的函数代码。 默认情况下,用于存储内部主机元数据 (AzureWebJobsStorage) 的同一存储帐户也用作部署容器。 但是,可以使用备用存储帐户,也可以通过 配置应用的部署设置来选择首选的身份验证方法。

计费

在 Flex Consumption 计划中运行应用时,可通过两种模式确定成本。 每个模式基于每个实例确定。

计费模式 说明
按需 按需 模式下运行时,只需对函数代码在可用实例上执行的时间付费。 在按需模式下,不需要最小实例计数。 系统会针对以下内容计费:

• 每个按需实例主动执行函数时预配的总内存量(以 GB 秒为单位)减去每月免费授权(GB 秒)。
• 执行的总数减去每月执行的免费额度(数量)。
始终就绪 可以配置一个或多个实例,将它们分配给特定触发器类型(HTTP/持久/Blob)和单独的函数,这些实例始终可用于处理请求。 启用任何始终就绪的实例后,系统会针对以下内容计费:

• 在所有始终就绪实例(称为 基线 (以 GB 秒为单位)中预配的总内存量。
• 每个始终就绪的实例在 主动 执行函数期间预配置的内存总量(以 GB-秒为单位)。
• 总执行次数。

在始终就绪的计费模式中,不存在免费赠予。

有关执行定价、始终就绪基线成本以及按需执行的免费额度的最新信息,请参阅 Azure Functions 定价页

这两种执行模式的最小计费执行期为 1000 ms。 过去,计费活动周期向上舍入到最近的 100 ms。 可以在“监视参考”中找到 Flex Consumption 计划计费计量的详细信息。

有关在弹性消耗计划中运行时如何计算成本的详细信息,包括示例,请参阅 基于消耗的成本

支持的语言堆栈版本

下表显示了 Flex Consumption 应用当前支持的语言堆栈版本:

语言堆栈 所需版本
C# (独立进程模式)1 .NET 82、.NET 93
爪哇岛 Java 11、Java 17、Java 21
Node.js Node.js 20,Node.js 22
PowerShell PowerShell 7.4
Python语言 Python 3.10、Python 3.11、Python 3.12
  1. 不支持 C# 进程内模式。 需要迁移 .NET 代码项目,才能在独立工作模型中运行
  2. 需要版本 1.20.0 或更高的 Microsoft.Azure.Functions.Worker 和版本 1.16.2 或更高的 Microsoft.Azure.Functions.Worker.Sdk
  3. 2.0.0 或更高版本的 Microsoft.Azure.Functions.WorkerMicrosoft.Azure.Functions.Worker.Sdk 是必需的。

区域订阅内存配额

目前,在给定订阅中的每个区域中,对于 Flex Consumption 计划上运行的应用的所有实例,内存限制为 512,000 MB。 此配额意味着,在给定的订阅和区域中,你可以采用实例内存大小和计数的任何组合,只要它们保持在配额限制内即可。 例如,以下每个示例都意味着已达到配额,应用将停止缩放:

  • 有一个 512 MB 的应用扩展到 250 个实例,另一个 512 MB 的应用扩展到 750 个实例。
  • 你有一个 512 MB 的应用已扩展到 1,000 个实例。
  • 你有一个 2,048 MB 的应用已扩展到 100 个实例,还有一个 2,048 MB 的应用已扩展到 150 个实例
  • 你有一个 2,048 MB 的应用已横向扩展到 250 个实例
  • 你有一个 4,096 MB 的应用已横向扩展到 125 个实例
  • 你有一个 4,096 MB 的应用已扩展到 100 个实例,还有一个 2,048 MB 的应用已扩展到 50 个实例

缩放至零的 Flex 消耗应用或标记为横向缩减并删除的实例不计入配额。 可以增大此配额,使弹性消耗应用能够进一步扩展,具体取决于你的要求。 如果你的应用需要更大的配额,请创建支持工单。

弃用的属性和设置

在 Flex 消耗中,许多标准应用程序设置和站点配置属性已弃用或已移动,在自动创建函数应用资源时不应使用。 有关详细信息,请参阅 Flex 消耗计划弃用

注意事项

使用 Flex Consumption 计划时,请记住以下其他注意事项:

  • 每个计划的应用:每个灵活消费计划仅允许一个应用。
  • 主机:应用初始化有 30 秒的超时。 如果函数应用启动时间超过 30 秒,你可能会看到记录的与 gRPC 相关的 System.TimeoutException 条目。 目前无法配置此超时。有关详细信息,请参阅此主机工作项
  • Durable Functions:Azure 存储当前是唯一受支持的 Durable Functions 存储提供程序 ,托管在 Flex Consumption 计划中。 请参阅在 Flex 消耗计划中托管 Durable Functions 时的建议
  • 虚拟网络集成 按照此处的说明确保为订阅启用 Microsoft.App Azure 资源提供程序。 灵活消耗应用所需的子网委派是 Microsoft.App/environments
  • 触发器:虽然 Flex 消耗计划完全支持所有触发器,但 Blob 存储触发器仅支持事件网格源。 非 C# 函数应用必须使用[4.0.0, 5.0.0) 版本或更高版本。
  • 区域:目前并非所有区域都受支持。 若要了解详细信息,请参阅 “查看当前支持的区域”。
  • 部署:目前不支持部署槽。
  • 缩放:当前最小的最大缩放比例为 40。 当前支持的最高值为 1000
  • 托管依赖项:Flex Consumption 不支持 PowerShell 中的托管依赖项 。 必须改为 上传包含应用内容的模块
  • 诊断设置:当前不支持诊断设置。
  • 证书:当前不支持使用WEBSITE_LOAD_CERTIFICATES应用设置、托管证书、应用服务证书和其他基于平台证书的功能加载证书。
  • Key Vault 和应用配置参考:当这些服务受到网络访问限制时,当前无法在 Flex Consumption 计划的应用设置中使用 Azure Key VaultAzure App Configuration 引用。 即使函数应用启用了虚拟网络集成,此限制也适用。 如果必须使用受限的 Key Vault 或应用配置实例,则必须使用客户端 SDK 从这些服务的引用中手动检索值。 函数绑定扩展也无法访问这些引用,这意味着还必须使用 Azure 客户端 SDK 从函数代码访问远程服务数据。
  • 时区WEBSITE_TIME_ZONETZ 应用设置在 Flex Consumption 计划中运行时,当前不受支持。

Azure Functions 托管选项在 Flex Consumption 计划中创建和管理函数应用