你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Flex 消耗是基于 Linux 的 Azure Functions 托管计划,它基于消耗按使用付费的无服务器计费模型。 It gives you more flexibility and customizability by introducing private networking, instance memory size selection, and fast/large scale-out features still based on a serverless model.
可以查看 Flex 消耗计划示例存储库中以 Flex 消耗计划为特色的端到端示例。
Benefits
灵活消耗计划利用和发挥无服务器消耗计划的优势,其中包括动态缩放和按执行计费。 借助 Flex Consumption,还可以获得以下额外功能:
- 减少冷启动时间:与按需计划相比,启用始终就绪的实例以实现更快的冷启动时间。
- 虚拟网络支持: 虚拟网络集成 使无服务器应用能够在虚拟网络中运行。
- Per-Function Scaling: Each function in your app scales independently based on its workload, potentially resulting in more efficient resource allocation.
- 改进了并发处理:通过每个函数可配置的并发设置更好地处理并发执行。
- 灵活的内存配置:Flex Consumption 提供了多种 实例内存 大小选项,使您可以根据特定的工作负荷要求进行优化。
此表可帮助你将 Flex Consumption 的功能与 Consumption 托管计划直接进行比较:
Feature | 消耗 | Flex 消耗 |
---|---|---|
缩放到零 | ✅ 是 | ✅ 是 |
Scale behavior | Event driven | Event driven (fast) |
Virtual networks | ❌ 不支持 | ✅ 受支持 |
专用计算(缓解冷启动问题) | ❌ 无 | ✅ 始终就绪的实例(可选) |
Billing | Execution-time only | 执行时间 + 始终就绪的实例 |
横向扩展实例(最大值) | 200 | 1000 |
有关 Flex 消耗计划与消耗计划和其他所有计划及托管类型的完整比较,请参阅函数缩放和托管选项。
虚拟网络集成
Flex 消耗计划通过添加对虚拟网络集成的支持,扩展了消耗计划的传统优势。 应用在 Flex Consumption 计划中运行时,可以连接到在虚拟网络中保护的其他 Azure 服务。 尽管如此,你仍可以利用无服务器计费和缩放,以及 Flex Consumption 计划的规模和吞吐量优势。 有关详细信息,请参阅 “启用虚拟网络集成”。
Instance memory
在 Flex Consumption 计划中创建函数应用时,可以选择运行应用的实例的内存大小。 See Billing to learn how instance memory sizes affect the costs of your function app.
目前,Flex Consumption 提供这些实例内存大小选项:512 MB、2,048 MB 和 4,096 MB。
确定要与应用一起使用的实例内存大小时,需要考虑以下事项:
- 2048 MB 实例内存大小是默认值,应该用于大多数情况。 512 MB 和 4,096 MB 实例内存大小适用于最适合应用程序的并发或处理能力要求的方案。 有关详细信息,请参阅 配置实例内存。
- 你可以随时更改实例内存大小。 有关详细信息,请参阅 配置实例内存。
- 实例资源在函数代码和 Functions 主机之间共享。
- 实例内存越大,每个实例可以处理更多并发执行或更密集的 CPU 或内存工作负载。 特定的缩放决策适用于特定工作负载。
- HTTP 触发器的默认并发取决于实例内存大小。 有关详细信息,请参阅 HTTP 触发器并发。
- 可用的 CPU 和网络带宽与特定实例大小成正比。
Per-function scaling
Concurrency is a key factor that determines how Flex Consumption function apps scale. 为了提高具有各种触发器类型的应用的缩放性能,Flex Consumption 计划为按函数缩放应用提供了一种更确定的方式。
This per-function scaling behavior is a part of the hosting platform, so you don't need to configure your app or change the code. For more information, see Per-function scaling in the Event-driven scaling article.
在按功能缩放中,根据组聚合对某些功能触发器做出决策。 下表显示了定义的功能缩放组:
Scale groups | 组中的触发器 | Settings value |
---|---|---|
HTTP triggers |
HTTP trigger SignalR trigger |
http |
Blob 存储触发器 (Event Grid-based) |
Blob 存储触发器 | blob |
Durable Functions |
Orchestration trigger Activity trigger Entity trigger |
durable |
应用中的所有其他功能均在其自己的实例组中单独缩放,这些实例是使用约定 function:<NAMED_FUNCTION>
引用的。
始终就绪实例
Flex Consumption includes an always ready feature that lets you choose instances that are always running and assigned to each of your per-function scale groups or functions. 对于需要始终有最少数量的实例准备好处理请求的情况,“始终就绪”是一个不错的选择。 例如,要减少应用程序的冷启动延迟的情况。 默认值为 0(零)。
例如,如果为 HTTP 函数组始终设置为 2,平台将让两个实例始终运行,并将这两个实例分配给应用中的 HTTP 函数。 这些实例正在处理函数执行,但根据并发设置,平台将扩展到这两个实例之外的按需实例。
启用区域冗余时,每个函数或函数组只能配置两个始终就绪的实例。
若要了解如何配置始终就绪的实例,请参阅 “设置始终就绪的实例计数”。
Concurrency
并发是指在应用的实例上函数的并行执行的数量。 可以将每个实例设置为在任何给定时间应处理的最大并发执行数。 并发对应用缩放方式有直接影响,因为在较低的并发级别,需要更多实例来处理函数的事件驱动的需求。 虽然你可以控制和微调并发,但我们提供了适用于大多数情况的默认值。
若要了解如何设置 HTTP 触发器函数的并发限制,请参阅 设置 HTTP 并发限制。 若要了解如何为非 HTTP 触发器函数设置并发限制,请参阅 目标基础缩放。
Deployment
Flex 消耗计划中的部署遵循单一路径,不再需要应用设置来影响部署行为。 生成项目代码并将其压缩到应用程序包中后,将其部署到 Blob 存储容器中。 启动时,应用会获取包并运行此包中的函数代码。 默认情况下,用于存储内部主机元数据 (AzureWebJobsStorage) 的同一存储帐户也用作部署容器。 但是,可以使用备用存储帐户,也可以通过 配置应用的部署设置来选择首选的身份验证方法。
Billing
在 Flex Consumption 计划中运行应用时,可通过两种模式确定成本。 每个模式基于每个实例确定。
Billing mode | Description |
---|---|
On Demand | When running in on demand mode, you are billed only for the amount of time your function code is executing on your available instances. 在按需模式下,不需要最小实例计数。 系统会针对以下内容计费: • The total amount of memory provisioned while each on demand instance is actively executing functions (in GB-seconds), minus a free grant of GB-s per month. • 执行的总数减去每月执行的免费额度(数量)。 |
Always ready | 可以配置一个或多个实例,将它们分配给特定触发器类型(HTTP/持久/Blob)和单独的函数,这些实例始终可用于处理请求。 启用任何始终就绪的实例后,系统会针对以下内容计费: • The total amount of memory provisioned across all of your always ready instances, known as the baseline (in GB-seconds). • The total amount of memory provisioned during the time each always ready instance is actively executing functions (in GB-seconds). • 总执行次数。 在始终就绪的计费模式中,不存在免费赠予。 |
有关执行定价、始终就绪基线成本以及按需执行的免费额度的最新信息,请参阅 Azure Functions 定价页。
这两种执行模式的最小计费执行期为 1000 ms。 过去,计费活动周期向上舍入到最近的 100 ms。 You can find details on the Flex Consumption plan billing meters in the Monitoring reference.
For details about how costs are calculated when you run in a Flex Consumption plan, including examples, see Consumption-based costs.
支持的语言堆栈版本
下表显示了 Flex Consumption 应用当前支持的语言堆栈版本:
Language stack | Required version |
---|---|
C# (isolated process mode)1 | .NET 82, .NET 93 |
Java | 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 |
- 不支持 C# 进程内模式。 需要迁移 .NET 代码项目,才能在独立工作模型中运行。
- Requires version
1.20.0
or later of Microsoft.Azure.Functions.Worker and version1.16.2
or later of Microsoft.Azure.Functions.Worker.Sdk. - Requires version
2.0.0
or later of both Microsoft.Azure.Functions.Worker and Microsoft.Azure.Functions.Worker.Sdk.
区域订阅内存配额
Flex Consumption 计划具有基于内存的配额,用于限制所有 Flex Consumption 应用可在特定区域和订阅中同时使用的计算量。 假设你有一个以 GB 为单位的内存桶,用于区域中的整个订阅。 该区域中的所有 Flex Consumption 应用共享此存储桶。 如果 Flex Consumption 应用尝试使用配额允许的更多,则某些执行可能会延迟或限制缩放,但不会阻止你创建或部署应用。
目前,给定订阅中的每个区域对于在 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 Consumption 计划中,许多标准应用程序设置和站点配置属性已弃用或已移动,在自动创建函数应用资源时不应使用。 有关详细信息,请参阅 Flex 消耗计划弃用。
Considerations
使用 Flex Consumption 计划时,请记住以下其他注意事项:
- 每个计划的应用:每个灵活消费计划仅允许一个应用。
-
Host: There's a 30-second time-out for app initialization. 如果函数应用启动时间超过 30 秒,你可能会看到记录的与 gRPC 相关的
System.TimeoutException
条目。 目前无法配置此超时。有关详细信息,请参阅此主机工作项。 - Durable Functions: Azure Storage is currently the only supported storage provider for Durable Functions when hosted in the Flex Consumption plan. See recommendations when hosting Durable Functions in the Flex Consumption plan.
-
虚拟网络集成 按照此处的说明确保为订阅启用
Microsoft.App
Azure 资源提供程序。 灵活消耗应用所需的子网委派是Microsoft.App/environments
。 -
Triggers: While all triggers are fully supported in a Flex Consumption plan, the Blob storage trigger only supports the Event Grid source. Non-C# function apps must use version
[4.0.0, 5.0.0)
of the extension bundle, or a later version. - Regions: Not all regions are currently supported. 若要了解详细信息,请参阅 “查看当前支持的区域”。
- Deployments: Deployment slots aren't currently supported.
- Proxies: Functions Proxies aren't supported. 考虑将函数应用与 Azure API 管理集成。
-
Scale: The lowest maximum scale is currently
40
. 当前支持的最高值为1000
。 - Managed dependencies: Managed dependencies in PowerShell aren't supported by Flex Consumption. 必须改为 上传包含应用内容的模块。
- Certificates: Loading certificates with the WEBSITE_LOAD_CERTIFICATES app setting, managed certificates, app service certificates, and other platform certificate-based features are currently not supported.
- Key Vault 和应用配置参考:当这些服务受到网络访问限制时,当前无法在 Flex Consumption 计划的应用设置中使用 Azure Key Vault 或 Azure App Configuration 引用。 即使函数应用启用了虚拟网络集成,此限制也适用。 如果必须使用受限的 Key Vault 或应用配置实例,则必须使用客户端 SDK 从这些服务的引用中手动检索值。 函数绑定扩展也无法访问这些引用,这意味着还必须使用 Azure 客户端 SDK 从函数代码访问远程服务数据。
-
Timezones:
WEBSITE_TIME_ZONE
andTZ
app settings aren't currently supported when running on Flex Consumption plan.