Azure Functions 中的事件驱动缩放

Azure Functions 会根据输入事件数量自动扩展函数应用的实例。 你的应用如何扩展,包括扩展速度、最大实例数以及功能是否独立扩展,取决于你的托管计划:

托管计划 事件驱动的扩展 Details
高级计划 ✓ 应用级扩展 选择上述高级套餐
消耗计划 (旧版) ✓ 应用级扩展 选择上方的消费计划
专用(应用服务)计划 不適用 使用 App Service 扩展

注释

本文内容与当前选择的托管计划无关。 要选择其他套餐,请使用本文顶部的选择器。 有关所有托管计划的比较,请参见 Azure Functions 托管选项

事件驱动扩展不适用于专用(应用服务)计划。 专用计划不会根据事件动态扩展。 关于专用套餐中的扩展选项,请参见 Azure 应用服务 中的应用扩展。

函数代码文件存储在函数主要存储帐户中的 Azure 文件共享上。 删除函数应用的主存储帐户时,函数代码文件将被删除并且无法恢复。

运行时缩放

Azure Functions 使用名为“缩放控制器”的组件来监视事件率以及确定是要横向扩展还是横向缩减。 缩放控制器针对每种触发器类型使用试探法。 例如,使用 Azure 队列存储触发器时,它使用目标导向的扩展

图示显示规模控制器监视事件和创建实例。

Azure Functions 的缩放单位为函数应用。 当函数应用扩展时,它会分配更多资源来运行多个 Azure Functions 主机实例。 相反,随着计算需求减少,规模控制器会移除函数主实例。 当函数应用中没有运行函数时,实例数最终会“缩减”。

消耗计划中 Functions 主机的每个实例资源都有限,通常只有 1.5 GB 内存和 1 个 CPU。 主机实例支持整个函数应用,因此应用中的所有功能共享资源并同时扩展。 当功能应用共享相同的消费计划时,它们仍然可以独立扩展。

高级套餐的具体大小决定了该方案中所有应用的可用内存和CPU。 该方案根据其中应用的扩展需求来横向扩展其实例,各应用则在方案内按需进行扩展。

冷启动

如果你的功能应用闲置几分钟,平台可能会将运行应用的实例数降到零。 下一个请求会产生从 0 扩展到 1 所带来的额外延迟。 此延迟称为“冷启动”。 你的功能应用需要的依赖数量会影响冷启动时间。 冷启动对于同步操作(例如,必须返回响应的 HTTP 触发器)来说更是一个问题。 如果冷启动影响了您的功能,请考虑采用支持缓解策略的计划:

Plan 冷启动缓解 Details
高级计划 已预热且随时可用的实例 至少必须有一个实例始终运行
消耗计划 (旧版) None 此方案中预计会出现冷启动
专用计划 始终开启设置 应用持续运行;没有动态缩放

如表中所示,高级套餐可帮助消除应用的冷启动。

了解缩放行为

缩放可能会因多种因素而异。 应用根据触发条件和所选语言的不同调整比例。 请注意这些扩展行为的细节:

  • 新的实例化率: 对于 HTTP 触发器,平台最多每秒分配一次新实例。 对于非 HTTP 触发器,平台最多每 30 秒分配一次新实例。 在高级计划中运行时,缩放速度会更快。

  • 基于目标的缩放: 基于目标的缩放为客户提供快速直观的缩放模型。 目前,服务总线队列和主题、存储队列、事件中心、Apache Kafka 和 Azure Cosmos DB 扩展支持此缩放方法。 请务必查看基于目标的缩放以了解其缩放行为。

  • 最大监控触发点: 目前,比例控制器最多只能监控100个触发器来做出缩放决策。 当你的应用有超过100个基于事件的触发器时,规模决策仅基于前100个执行的触发器。 有关详细信息,请参阅可缩放应用的最佳做法和模式

限制横向扩展

你可能决定限制应用可用于横向扩展的最大实例数。对于下游组件(如数据库)的吞吐量有限的情况,最常见的情况是这种限制。 有关运行各种托管计划时的最大缩放限制,请参阅缩放限制

在消费计划或弹性高级计划中,可以通过修改 functionAppScaleLimit 站点配置设置的值来为应用指定最大限制的下限。 若要不受限制,可将 functionAppScaleLimit 设置为 0null,或介于 1 和应用最大值之间的有效值。

az resource update --resource-type Microsoft.Web/sites -g <RESOURCE_GROUP> -n <FUNCTION_APP-NAME>/config/web --set properties.functionAppScaleLimit=<SCALE_LIMIT>

缩减行为

对函数的需求减少时,事件驱动的缩放会自动减少容量。 它通过清空当前函数执行的实例,然后删除这些实例来减少此限制。 系统会将此行为记录为排出模式。 当前正在执行的函数在消耗计划应用中最多可以获得 10 分钟的宽限期,而在高级计划应用中最长可以获得 60 分钟的宽限期。 事件驱动的缩放和此行为不适用于专用计划应用。

以下注意事项适用于缩减行为:

  • 对于在消耗计划中在 Windows 上运行的应用,默认情况下,只有 2021 年 5 月之后创建的应用才启用排空模式行为。
  • 若要使用服务总线触发器为函数启用正常关闭,请使用 4.2.0 版或更高版本的服务总线扩展

可缩放应用的最佳做法和模式

函数应用的许多方面会影响其扩展性,包括主机配置、运行时占用和资源效率。 有关详细信息,请查看性能注意事项一文的“可扩展”部分。 您还应当了解函数应用扩展时连接的表现方式。 有关详细信息,请参阅如何在 Azure Functions 中管理连接

如果你的应用有超过100个使用事件触发的功能,可以考虑将应用拆分为一个或多个应用,每个应用的事件功能少于100个。

有关在 Python 中缩放和 Node.js的详细信息,请参阅 Azure Functions Python 开发人员指南缩放和性能部分以及 Azure Functions Node.js 开发人员指南缩放和并发部分。

后续步骤

若要了解详细信息,请参阅以下文章: