Azure Functions 中的事件驱动缩放

在消耗和高级计划中,Azure Functions 通过添加 Functions 主机的更多实例来缩放 CPU 和内存资源。 实例数取决于触发函数的事件数。

消耗计划中 Functions 主机的每个实例通常仅限使用 1.5 GB 内存和 1 个 CPU。 主机实例是整个函数应用,这意味着函数应用中的所有函数共享某个实例中的资源并同时缩放。 共享同一消耗计划的函数应用单独缩放。 在高级计划中,计划大小决定该实例上该计划中所有应用的可用内存和 CPU。

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

运行时缩放

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

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

Scale controller monitoring events and creating instances

冷启动

当你的函数应用空闲一定的分钟数后,平台可能会将用于运行你的应用的实例数量缩减为零。 下次请求将存在从零扩展到一所增加的延迟。 此延迟称为“冷启动”。 函数应用所需的依赖项的数目可能会影响冷启动时间。 冷启动对于同步操作(例如,必须返回响应的 HTTP 触发器)来说更是一个问题。 如果冷启动会影响你的函数,请考虑在高级计划中运行,或在启用了始终可用设置的专用计划中运行。

了解缩放行为

缩放因多个因素而异,并且应用可根据所选的触发器和语言以不同的方式缩放。 需要注意缩放行为的以下几个细节:

  • 最大实例数:单个函数应用只能横向扩展到计划允许的最大数量。 不过,单个实例每次可以处理多个消息或请求,因此,对并发执行数没有规定的限制。 可根据需要指定一个较低的最大值来限制缩放。
  • 新实例率:对于 HTTP 触发器,将最多每隔 1 秒分配一次新实例。 对于非 HTTP 触发器,将最多每隔 30 秒分配一次新实例。 在高级计划中运行时,缩放速度会更快。
  • 基于目标的缩放:基于目标的缩放为客户提供快速直观的缩放模型,目前支持服务总线队列和主题、存储队列、事件中心和 Cosmos DB 扩展。 请务必查看基于目标的缩放以了解其缩放行为。

限制横向扩展

建议限制应用可用于横向扩展的最大实例数。最常见的情况是下游组件(如数据库)的吞吐量有限。 默认情况下,消耗计划函数可横向扩展到最多 200 个实例,高级计划函数可横向扩展到最多 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 中管理连接

有关使用 Python 和 Node.js 进行缩放的详细信息,请参阅 Azure Functions Python 开发人员指南 - 缩放和并发Azure Functions Node.js 开发人员指南 - 缩放和并发

计费模式

不同计划的计费在 Azure Functions 定价页中有详细介绍。 使用量在 Function App 级别聚合,只会统计函数代码的执行时间。 以下是计费单位:

  • 以千兆字节/秒 (GB-s) 计量的资源消耗量。 根据内存大小和函数应用中所有函数的执行时间组合计算得出。
  • 执行。 每次为响应事件触发而执行函数时记为一次。

帐单常见问题解答中可以找到有关如何了解消费帐单的有用查询和信息。

后续步骤

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