Azure Functions 高级计划

Azure Functions 弹性高级计划是函数应用的一个动态缩放托管选项。 有关其他托管计划选项,请参阅 Azure Functions 托管选项

重要

Azure Functions 可在 Azure 应用服务平台上运行。 在应用服务平台中,托管高级计划函数应用的计划称为弹性高级计划,其 SKU 名称类似于 。 如果选择在高级计划上运行函数应用,请确保创建一个 SKU 名称以“E”开头的计划,例如 EP1。 以“P”开头的应用服务计划 SKU 名称,例如 P1V2(高级 V2 小型计划),实际上是专用托管计划。 由于它们是专用计划而不是弹性高级计划,因此 SKU 名称以“P”开头的计划不会动态缩放,可能会增加你的成本。

高级计划托管为函数提供了以下好处:

使用高级计划时,可以根据传入事件数添加和删除 Azure Functions 主机的实例,就像弹性消耗计划和消耗计划一样。 可以将多个函数应用部署到同一高级计划。 可以配置计算实例大小、基本计划大小和最大计划大小。

计费

根据跨实例分配的核心秒数和内存数,为高级计划付费。 此计费模型不同于消耗计划,根据每秒资源消耗和执行量向你计费。 高级计划不收取执行费用。 此计费模型会导致对每个活跃计划的每月最低成本,不论函数是活跃的还是空闲的。 所有在高级计划中的函数应用共享分配的实例。 有关详细信息,请参阅 Azure Functions 定价

注意

每项高级计划始终至少包含一个活跃的(计费的)实例。

创建高级计划

在 Azure 门户中创建函数应用时,消耗计划为默认值。 若要创建在高级计划中运行的函数应用,必须使用 弹性高级 版本之一显式创建或选择 Azure Functions Premium 托管计划。 您将创建的函数应用托管在此计划中。 可以使用 Azure 门户轻松地同时创建高级计划和函数应用。 可以在同一高级计划中运行多个函数应用,但它们必须在相同的操作系统(Windows 或 Linux)上运行。

以下文章说明了如何通过编程方式创建采用高级计划的函数应用:

消除冷启动

当消耗计划中没有发生任何事件或执行任何操作时,你的应用可以缩减到零个实例。 新事件到达时,系统必须创建运行应用的新实例。 将新实例专用化需要一些时间,具体取决于应用。 首次调用的这种额外延迟通常称为 冷启动

高级计划提供了两个功能,这些功能协同工作以有效地消除函数中的冷启动:“始终就绪实例”和“预热实例”。 始终就绪的实例是不受缩放影响的预分配实例类别,而预热实例则为因 HTTP 事件导致的扩展提供缓冲。

当事件开始触发应用时,系统首先将它们路由到始终就绪的实例。 由于 HTTP 事件,函数被激活,其他实例作为缓冲区进行预热。 这些缓冲的实例称为预热实例。 此缓冲区可减少缩放过程中所需的新实例的冷启动。

始终就绪实例

在高级计划中,你可以让应用在指定数量的实例上始终处于就绪状态。 无论负载情况如何,应用都会在这些实例上持续运行。 如果负载超出了始终就绪的实例可以处理的内容,则应用会根据需要添加更多实例,最多达到指定的最大值。

此应用级设置还可控制计划的最小实例数。 例如,考虑同一高级计划中的三个函数应用。 当两个应用始终准备好实例计数设置为 1,第三个应用设置为 5 时,整个计划的最小数量为 5。 此数字还反映了计划计费的最小实例数。 每个应用支持的最大始终就绪实例数为 20。

可以在 Azure 门户中选择您的函数应用,然后转到左侧的应用服务计划>应用横向扩展菜单选项,并编辑应用横向扩展选项,配置始终就绪实例的数量。 在函数应用编辑窗口中,始终就绪实例是该应用特有的。

预热实例

预热实例计数设置在 HTTP 缩放和激活事件期间提供预热实例作为缓冲区。 预热实例将持续提供缓冲,直至达到最大横向扩展限制。 默认预热实例计数为 1,在大多数情况下,请将此值保留为 1。

请考虑不太常见的方案,例如在自定义容器中运行的应用。 由于自定义容器的预热时间很长,因此可以考虑增加预热实例的此缓冲区。 仅在使用所有活动实例后,预热实例才会变为活动状态。

还可以定义预热触发器,该触发器在预热过程中运行。 你可以在预热过程中使用预热触发器来预加载自定义依赖项,使你的函数能够准备就绪,以便立即开始处理请求。 若要了解详情,请参阅 Azure Functions 预热触发器

请考虑此示例,了解始终就绪实例和预热实例如何协同工作。 高级函数应用配置了两个始终就绪实例和一个默认的预热实例。

显示横向扩展图的屏幕截图。

  1. 当应用处于空闲状态且未触发任何事件时,应用将通过两个实例进行预配并运行。 此时,需为两个始终就绪实例付费,但无需为预热实例付费,因为未分配预热实例。
  2. 当应用程序开始接收 HTTP 流量时,请求在两个始终就绪的实例之间进行负载均衡。 一旦这两个实例开始处理事件,就会添加一个实例来填充预热缓冲区。 应用现在运行时有三个预配的实例:两个始终就绪实例,以及第三个预热的处于非活动状态的缓冲区。 你需为这三个实例付费。
  3. 随着负载的增加,应用需要更多实例来处理 HTTP 流量,该预热实例将交换到活动实例。 HTTP 负载现在会路由到所有三个实例,并且会立即预配第四个实例以填充预热缓冲区。
  4. 会持续采用这种缩放和预热顺序,直至达到应用的最大实例计数或负载减少而导致平台在一段时间后缩减。 不会预热或激活超出最大值的实例。

无法在门户中更改预热实例计数设置。 必须改用 Azure CLI 或 Azure PowerShell。

最大函数应用实例数

除了计划最大突发计数,还可以配置每个应用的最大值。 使用 应用规模限制配置应用最大值。 最大应用扩展限制不能超过计划的最大突发实例数量。

专用网络连接

部署到高级计划的函数应用可以利用针对 Web 应用的虚拟网络集成。 配置后,你的应用可以与虚拟网络中的资源通信,或通过服务终结点获得保护。 还可以对应用使用 IP 限制来限制传入流量。

在高级计划中向函数应用分配子网时,你需要有一个具有足够 IP 地址的子网,用于每个潜在的实例。 需要具有至少 100 个可用地址的 IP 块。

有关详细信息,请参阅 将 Azure Functions 与虚拟网络集成

快速弹性缩放

与 Flex Consumption 和 Consumption 计划相同的快速缩放逻辑会自动为您的应用程序添加更多计算实例。 同一应用服务计划中的应用会基于单个应用的需求彼此独立地进行缩放。 但是,如果可能,同一应用服务计划中的 Functions 应用会共享 VM 资源,以便降低成本。 与某个 VM 关联的应用数取决于每个应用的资源占用情况和 VM 大小。

若要详细了解缩放工作原理,请参阅 Azure Functions 中事件驱动的缩放

更长的运行持续时间

消耗计划中的 Functions 限制为单次执行 10 分钟。 在高级计划中,运行持续时间默认为 30 分钟,以防止执行失控。 不过,你可以修改 host.json 配置,使高级计划应用的持续时间无限长,但具有以下限制:

  • 平台升级可能会触发受控关机,并在 10 分钟宽限期内暂停功能执行。
  • 空闲计时器在 60 分钟没有新的执行任务后停止工作线程。
  • 横向缩减行为可能会导致 60 分钟后关闭辅助角色。
  • 槽交换可能会在交换期间终止源槽和目标槽上的执行。

迁移

如果你有现有的函数应用,可以使用 Azure CLI 命令在 Windows 上的消耗计划和高级计划之间迁移该应用。 具体的命令取决于迁移方向。 有关详细信息,请参阅规划迁移

Linux 不支持此迁移。

高级计划设置

创建计划时,可以设置两个计划大小设置:最小实例数(或计划大小)和最大突发限制。

如果应用需要超出始终就绪实例的更多实例,它可以继续横向扩展,直到实例数达到计划最大突发限制,或者应用最大横向扩展限制(如果设置)。 仅当实例正在运行并分配给您时,您才按秒付费。 平台会尽最大努力将你的应用横向扩展到所定义的最大限制。

可以在 Azure 门户中配置计划大小,方法是选择部署到该计划的 Function App ,转到左侧 的应用服务计划>纵向扩展 菜单选项,然后选择更大的计划大小。 若要增加最大突发限制,请选择“横向扩展”菜单选项,并编辑“计划横向扩展”>的“最大突发”选项。

每个高级计划的最小值至少为 1 个实例。 实际的最小实例数量是基于计划中应用请求的始终就绪的实例来确定的。 例如,如果应用 A 请求五个始终就绪实例,而应用 B 请求同一计划中两个始终就绪的实例,则最小计划大小确定为 5。 应用 A 在所有五个实例上运行,应用 B 在两个实例上运行。

重要

无论函数是否执行,都会对在最低实例数中分配的每个实例进行收费。

在大多数情况下,此自动计算的最小值可以满足需要。 但是,系统会尽力进行超出最小值的缩放。 如果其他实例不可用,则在特定的时间,横向扩展可能会延迟,虽然这种情况不太可能发生。 通过将最小值设置为高于自动算出的最小值,可以在横向扩展之前预留实例。

可以在 Azure 门户中配置最小实例,方法是选择部署到该计划的 Function App ,转到左侧 的应用服务计划>Scale Out 菜单选项,然后编辑 “计划横向扩展>最小实例 ”选项。

可用的实例 SKU

创建或缩放计划时,请从三个实例大小中进行选择。 对于分配给你的每个实例,将按每秒预配的核心数和内存数计费。 你的应用可以根据需要自动横向扩展到多个实例。

SKU 核心数 内存 存储
EP1 1 3.5 GB 250 GB
EP2 2 7 GB 250 GB
EP3 4 14 GB 250 GB

内存使用情况注意事项

在具有更多内存的计算机上运行并不一定意味着函数应用会使用所有可用内存。

例如,JavaScript 函数应用受 Node.js 中的默认内存限制约束。 若要增大此固定内存限制,请添加值为 languageWorkers:node:arguments 的应用设置 --max-old-space-size=<max memory in MB>

对于内存超过 4 GB 的计划,请在‘常规设置’选项中将“位宽平台设置”设置为 64 Bit

区域最大横向扩展

下表列出了每个区域和 OS 配置中单个计划的当前支持最大横向扩展值:

区域 Windows操作系统 Linux
中国东部 2 20 20
中国北部 2 20 20
中国北部 3 20 20