Azure Functions Flex Consumption 计划托管
Flex Consumption 是基于 Linux 的 Azure Functions 托管计划,它基于 Consumption 按使用付费的无服务器计费模型。 它通过引入专用网络、实例内存大小选择和基于无服务器模型的快速/大规模横向扩展功能,为你提供了更大的灵活性和可自定义性。
可以查看 Flex Consumption 计划示例存储库中 Flex Consumption 计划功能的端到端示例。
好处
Flex Consumption 计划基于 Consumption 计划的优势,其中包括动态缩放和基于执行的计费。 借助 Flex Consumption,还可以获得以下额外功能:
此表可帮助你将 Flex Consumption 的功能与 Consumption 托管计划直接进行比较:
功能 | 消耗 | Flex Consumption |
---|---|---|
缩放到零 | ✅ 是 | ✅ 是 |
缩放行为 | 事件驱动 | 事件驱动(快速) |
虚拟网络 | ❌ 不支持 | ✅ 受支持 |
专用计算(缓解冷启动问题) | ❌ 无 | ✅ 始终就绪的实例(可选) |
计费 | 仅执行时间 | 执行时间 + 始终就绪的实例 |
横向扩展实例(最大值) | 200 | 1000 |
有关 Flex Consumption 计划与 Consumption 计划和其他所有计划和托管类型的完整比较,请参阅函数缩放和托管选项。
虚拟网络集成
Flex Consumption 通过添加对虚拟网络集成的支持,扩展了 Consumption 计划的传统优势。 应用在 Flex Consumption 计划中运行时,可以连接到在虚拟网络中保护的其他 Azure 服务。 尽管如此,你仍可以利用无服务器计费和缩放,以及 Flex Consumption 计划的规模和吞吐量优势。 有关详细信息,请参阅“启用虚拟网络集成”。
实例内存
在 Flex Consumption 计划中创建函数应用时,可以选择运行应用的实例的内存大小。 请参阅“计费”,了解实例内存大小如何影响函数应用的成本。
目前,Flex Consumption 同时提供以下实例内存大小选项:2,048 MB 和 4,096 MB。
确定要与应用一起使用的实例内存大小时,需要考虑以下事项:
- 2048 MB 实例内存大小是默认值,应该用于大多数情况。 对于应用需要更高并发能力或更高处理能力的场景,请使用 4,096 MB 实例内存大小。 有关详细信息,请参阅“配置实例内存”。
- 你可以随时更改实例内存大小。 有关详细信息,请参阅“配置实例内存”。
- 实例资源在函数代码和 Functions 主机之间共享。
- 实例内存越大,每个实例可以处理更多并发执行或更密集的 CPU 或内存工作负载。 特定的缩放决策适用于特定工作负载。
- HTTP 触发器的默认并发取决于实例内存大小。 有关详细信息,请参阅 HTTP 触发器并发。
- 可用的 CPU 和网络带宽与特定实例大小成正比。
按函数缩放
并发是确定 Flex Consumption 函数应用缩放方式的一个关键因素。 为了提高具有各种触发器类型的应用的缩放性能,Flex Consumption 计划为按函数缩放应用提供了一种更确定的方式。
此按函数缩放行为是托管平台的一部分,因此你无需配置应用或更改代码。 有关详细信息,请参阅《事件驱动缩放》一文中的“按函数缩放”。
在按功能缩放中,根据组聚合对某些功能触发器做出决策。 下表显示了定义的功能缩放组:
缩放组 | 组中的触发器 | 设置值 |
---|---|---|
HTTP 触发器 | HTTP 触发器 SignalR 触发器 |
http |
Blob 存储触发器 (基于事件网格) |
Blob 存储触发器 | blob |
Durable Functions | 业务流程触发器 活动触发器 实体触发器 |
durable |
应用中的所有其他功能均在其自己的实例组中单独缩放,这些实例是使用约定 function:<NAMED_FUNCTION>
引用的。
始终就绪实例
Flex Consumption 包括一项始终就绪的功能,可用于选择始终运行并分配给每个按函数缩放组或函数的实例。 对于需要始终准备好处理请求的最小实例数的情况(例如,减少应用程序的冷启动延迟),这是一个不错的选择。 默认值为 0(零)。
例如,如果为 HTTP 函数组始终设置为 2,平台将让两个实例始终运行,并将这两个实例分配给应用中的 HTTP 函数。 这些实例正在处理函数执行,但根据并发设置,平台将扩展到这两个实例之外的按需实例。
若要了解如何配置始终就绪的实例,请参阅“设置始终就绪的实例计数”。
并发
并发是指在应用的实例上函数的并行执行的数量。 可以将每个实例设置为在任何给定时间应处理的最大并发执行数。 有关详细信息,请参阅 HTTP 触发器并发。
并发对应用缩放方式有直接影响,因为在较低的并发级别,需要更多实例来处理函数的事件驱动的需求。 虽然你可以控制和微调并发,但我们提供了适用于大多数情况的默认值。 若要了解如何设置 HTTP 触发器函数的并发限制,请参阅“设置 HTTP 并发限制”。
部署
灵活消耗计划中的部署遵循单一路径。 生成项目代码并将其压缩到应用程序包中后,将其部署到 Blob 存储容器中。 启动时,应用会获取包并运行此包中的函数代码。 默认情况下,用于存储内部主机元数据 (AzureWebJobsStorage) 的同一存储帐户也用作部署容器。 不过,你可以使用替代存储帐户,或者通过配置应用的部署设置来选择首选的身份验证方法。 在简化部署路径时,不再需要通过应用设置来影响部署行为。
计费
在 Flex Consumption 计划中运行应用时,可通过两种模式确定成本。 每个模式基于每个实例确定。
计费模式 | 说明 |
---|---|
按需 | 在按需模式下运行时,仅对函数代码在可用实例上执行的时间付费。 在按需模式下,不需要最小实例计数。 系统会针对以下内容计费: • 当每个按需实例主动执行函数(以 GB 秒为单位)时,预配的总内存量减去每月 GB-s 的免费额度。 • 执行的总数减去每月执行的免费额度(数量)。 |
始终就绪 | 可以配置一个或多个实例,将它们分配给特定触发器类 (HTTP/Durable/Blob) 和单独的函数,这些实例始终可用于处理请求。 启用任何始终就绪的实例后,系统会针对以下内容计费: • 在所有始终就绪实例(称为基线,以 GB-秒为单位)中预配的总内存量。 • 每个始终就绪实例主动执行函数(以 GB-秒为单位)期间预配的总内存量。 • 总执行次数。 在始终就绪的计费中,没有免费额度。 |
这两种执行模式的最小计费执行期为 1000 ms。 过去,计费活动周期向上舍入到最近的 100 ms。 可以在“监视参考”中找到 Flex Consumption 计划计费计量的详细信息。
有关在按照 Flex Consumption 计划运行时如何计算成本的详细信息(包括示例),请参阅“基于消耗的成本”。
支持的语言堆栈版本
下表显示了 Flex Consumption 应用当前支持的语言堆栈版本:
语言堆栈 | 所需版本 |
---|---|
C#(独立进程模式)1 | .NET 82 |
Java | Java 11、Java 17 |
Node.js | Node 20 |
PowerShell | PowerShell 7.4 |
Python | Python 3.10、Python 3.11 |
1不支持 C# 进程内模式。 你需要迁移 .NET 代码项目,才能在隔离的工作器模型中运行。
2需要 1.20.0
版本或 Microsoft.Azure.Functions.Worker 之后的版本及 1.16.2
版本或 Microsoft.Azure.Functions.Worker.Sdk 之后的版本。
区域订阅内存配额
目前,在给定订阅中的每个区域中,对于 Flex Consumption 计划上运行的应用的所有实例,内存限制为 512,000 MB
。 这意味着,在给定的订阅和区域中,你可以采用实例内存大小和计数的任何组合,只要它们保持在配额限制内即可。 例如,以下每个示例都意味着已达到配额,应用将停止缩放:
- 你有一个 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 Consumption 中,Bicep、ARM 模板和整体控制平面中使用的许多标准应用程序设置和站点配置属性已弃用或已移动,在自动创建函数应用资源时不应使用。 有关详细信息,请参阅“Flex Consumption 计划弃用”。
注意事项
使用 Flex Consumption 计划时,请记住以下其他注意事项:
- 主机:应用初始化有 30 秒的超时时间。 如果函数应用启动时间超过 30 秒,你可能会看到记录的与 gRPC 相关的
System.TimeoutException
条目。 目前无法配置此超时。 有关详细信息,请参阅此主机工作项。 - Durable Functions:Azure 存储是目前唯一支持在弹性消耗计划中托管 Durable Functions 的存储提供程序。 请参阅有关在弹性消耗计划中托管 Durable Functions 时的相关建议。
- 虚拟网络集成 按照此处的说明确保为订阅启用
Microsoft.App
Azure 资源提供程序。 灵活消耗应用所需的子网委派是Microsoft.App/environments
。 - 触发器:除 Kafka 和 Azure SQL 触发器外的所有触发器都完全受支持。 Blob 存储触发器仅支持事件网格源。 非 C# 函数应用必须使用扩展捆绑包的
[4.0.0, 5.0.0)
版本或更高版本。 - 区域:目前并非所有区域都受支持。 若要了解详细信息,请参阅“查看当前支持的区域”。
- 部署:目前不支持部署槽。
- 缩放:当前最小的最大缩放比例为
40
。 当前支持的最高值为1000
。 - 托管依赖项:弹性消耗不支持 PowerShell 中的托管依赖项。 你必须改为定义自己的自定义模块。
- 诊断设置:当前不支持诊断设置。
- 证书:当前不支持使用 WEBSITE_LOAD_CERTIFICATES 应用设置加载证书。
- 密钥保管库引用:如果密钥保管库的网络访问受限,则应用设置中的密钥保管库引用将不起作用,即使函数应用具有虚拟网络集成也是如此。 当前的解决方法是直接在代码中引用密钥保管库并读取所需的机密。