使用实例数上限

您可以通过设置 Cloud Functions 函数实例数上限来控制函数的扩缩行为。

Cloud Functions 通过创建新函数实例进行扩容。每个此类实例一次只能处理一个请求,因此请求数量达到高峰可能会导致创建许多实例。

大多数情况下,自动扩缩都是有利的,但在某些情况下,您可能需要限制在任何给定时间可能存在的实例总数。例如,您的函数可能会与只能处理一定数量的并发打开连接的数据库交互。

设置和清除实例数上限

您可以在部署期间为函数设置实例数上限。每个函数都有自己的实例数上限设置。各个函数彼此独立地进行扩缩。

设置实例数上限

您可以使用 gcloud 命令行工具或 Google Cloud Console 设置实例数上限。

控制台

如需为新函数设置实例数上限,请执行以下操作:

  1. 转到 Cloud Functions 概览页面

  2. 点击创建函数

  3. 填写函数的必填字段。

  4. 点击运行时、构建和连接设置

  5. 自动扩缩部分的实例数上限字段中,输入所需的值。建议的默认值为 3000。

gcloud

如需设置实例数上限,请运行带有 --max-instances 标志的 deploy 命令:

gcloud functions deploy FUNCTION_NAME --max-instances MAX_INSTANCE_LIMIT

替换以下内容:

  • FUNCTION_NAME:函数的名称。

  • MAX_INSTANCE_LIMIT:要设置为实例数上限的数字。例如,3000。

已设置实例数上限。

清除实例数上限

您可以使用 gcloud 命令行工具或 Google Cloud Console 清除实例数上限。

控制台

如需清除实例数上限,请执行以下操作:

  1. 转到 Cloud Functions 概览页面

  2. 点击现有函数以转至其详情页面。

  3. 点击修改

  4. 点击运行时、构建和连接设置

  5. 自动扩缩部分的实例数上限字段中,输入 0 或将该字段留空。

gcloud

如需清除实例数上限,请运行带有 --clear-max-instances 标志的 deploy 命令:

gcloud functions deploy FUNCTION_NAME --clear-max-instances

已清除实例数上限。

限制和最佳做法

本部分提供了有关使用实例数上限的指导信息。

防范过多扩容

如果没有指定 --max-instances 限制,则 Cloud Functions 旨在支持扩容以满足需求,而不是限制吞吐量。这意味着您的函数可能具有的并发实例数实际上是无限的,除非您已配置了这样的限制。

我们建议为任何将请求发送到吞吐量受限或不可伸缩的下游服务的函数分配一项 --max-instances 限制。实例数上限可提高整体系统稳定性,并有助于防范异常高的请求级别。

当所有实例都在使用时的请求处理

正常情况下,函数的扩容方式是创建新实例以处理传入流量负载。但是,如果您设置了实例数上限,则可能会遇到没有足够的实例来满足传入流量负载需求的情况。

在这种情况下,Cloud Functions 会尝试在长达 30 秒的时间内处理新的入站请求:

  • 如果某个实例在此时间段内处理完其请求,则可能会开始处理这个新的入站请求。
  • 如果没有可用的实例,则该请求将失败。

超出 Cloud Functions 函数扩缩能力的实例数上限

在指定实例数上限时,您实际指定的是一个数量上限。设置较高的上限并不意味着您的函数将纵向扩容到指定的实例数量,它只意味着在任何时间点共存的实例数量不得超过此上限。

此外,设置实例数上限可能会影响 Cloud Functions 用于满足流量需求的扩缩策略。通常,Cloud Functions 会优先遵循您指定的上限,而不是扩容(可能超过您的上限)。

处理流量高峰

在某些情况下,例如流量快速激增时,Cloud Functions 函数在短时间内创建的实例数量可能多于指定的实例数上限。如果您的函数无法承受此暂时性行为,您可能需要考虑安全边际因素,设置一个低于函数承受能力的实例数上限。

部署

部署新版函数时,Cloud Functions 会将流量从旧版本迁移到新版本。因为实例数上限是针对每个函数版本独立设置的,所以部署后的一段时间内,实际的实例数可能会暂时超出指定的上限。

例如,某个函数的实例数上限可能是 5 个。正常情况下,该函数在处理请求时会纵向扩容到 5 个实例。部署新版函数后,新版本自身的实例数上限是 5 个。

部署新版函数后,该函数的上一版本已处理的请求不会中断。这些请求将继续得到处理。新的入站请求将由新部署的函数版本处理。

因此,在部署新版本后的一段时间内,上述示例中的函数最多可能有 10 个实例(每个函数版本各有 5 个实例)。上一版函数的实例终止运行所需的时间取决于这些实例处理完所有活跃请求所需的时间。这是在选择适当的实例数上限时需要考虑的一个额外因素。

空闲实例和最大限度地减少冷启动

为最大限度地降低冷启动产生的影响,Cloud Functions 通常会保留为您的函数预留的空闲实例。如果突然遇到流量高峰,这些实例可以处理请求。

例如,某个实例处理完请求后,可能会在一段时间内保持空闲状态,以应对可能需要处理入站请求的情况。为了应对需要处理其他请求的情况,空闲实例可能会保留资源,例如打开的数据库连接。这些空闲实例会计入给定函数版本的实例数上限。您无需为这些空闲实例付费。

清除实例数上限

将实例数上限设置为 0 会导致现有的实例数上限被清除。设置 0 值不会暂停函数。