次の方法で共有

Azure Functions 中的事件驱动缩放

在消耗计划和高级计划中,Azure Functions 根据触发函数的事件数量添加更多实例来扩展资源。

函数应用缩放的方式取决于托管计划:

  • 消耗计划:消耗计划中 Functions 主机的每个实例通常仅限使用 1.5 GB 内存和 1 个 CPU。 一个主机实例支持整个函数应用。 因此,在共享资源的一个实例内,函数应用程序中的所有函数都会在同一时间进行缩放。 当函数应用共享同一消费计划时,它们仍然独立缩放。

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

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

运行时缩放

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

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

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

冷启动

如果你的函数应用闲置了几分钟,平台可能会决定将用于运行应用的实例数量缩减为零。 下一个请求将因从无到有的扩展而增加延迟。 此延迟称为“冷启动”。 函数应用所需的依赖项的数目可能会影响冷启动时间。 冷启动对于同步操作(例如,必须返回响应的 HTTP 触发器)来说更是一个问题。 如果冷启动影响您的函数,请考虑使用其他除消费计划以外的方案。 其他计划会提供以下策略来缓解或排除冷启动问题。

  • 高级计划:同时支持预热实例和持续就绪实例,至少包含一个实例。

  • 专用计划:计划本身不会动态缩放,但可以在启用 Always on 设置时持续运行应用。

了解缩放行为

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

  • 最大实例数:单个函数应用只能横向扩展到计划允许的最大数量。 但是,单个实例一次可以处理多个消息或请求。 您可以根据需要指定一个较低的最大值来调节缩放速率。
  • 新实例率:对于 HTTP 触发器,将最多每隔 1 秒分配一次新实例。 对于非 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 开发人员指南缩放和并发部分。

后续步骤

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