配置实例数上限
您可以通过设置 Cloud Run functions 函数实例数上限来控制函数的扩缩行为。设置实例数上限可控制成本,并防止下游资源因流量过多而超出负载。
Cloud Run 函数通过创建新函数实例进行扩容。 每个此类实例一次只能处理一个请求,因此请求数量达到高峰可能会导致创建许多实例。
大多数情况下,自动扩缩都是有利的,但在某些情况下,您可能需要限制在任何给定时间可能存在的实例总数。例如,与函数交互的数据库可能只能处理一定数量的打开连接。
Cloud Run 函数提供并发作为额外的扩缩机制。为并发配置的函数可以在单个实例上同时执行多个请求。您可以将函数配置为同时使用并发和多个实例,以优化其性能。如需了解有关配置并发的信息,请参阅 Cloud Run functions 并发。
设置实例数上限
您可以在部署期间为函数设置实例数上限。每个函数都有自己的实例数上限设置。各个函数彼此独立地进行扩缩。 Cloud Run 函数需要定义实例数量上限。
设置实例数上限
您可以使用 Google Cloud CLI 或 Google Cloud 控制台设置实例数上限。如果您未指定限制,Cloud Run 函数将设置默认值 100。
如需设置实例数上限,请执行以下操作:
控制台
点击创建函数。
填写函数的必填字段。
展开页面末尾的运行时、构建... 部分,然后点击运行时标签页。
在自动扩缩部分的实例数上限字段中,输入一个值或使用默认值。
gcloud
如需设置实例数上限,请运行带有 --max-instances
标志的 deploy
命令:
gcloud functions deploy FUNCTION_NAME --max-instances MAX_INSTANCE_LIMIT
替换以下内容:
FUNCTION_NAME:函数的名称。
MAX_INSTANCE_LIMIT:要设置为实例数上限的数字,例如 3000。
限制和最佳做法
本部分提供了有关使用实例数上限的指导信息。
选择实例上限值
实例数上限设置的最佳值取决于函数特性,包括调用执行时长、其预期平均和峰值调用频率,以及您的应用对调用失败的容忍度。一个很好的经验法则是,先将实例数量上限值设为 3,然后监控调用失败情况,并根据需要向上调整实例数量上限值。
当所有实例都在使用时的请求处理
正常情况下,函数的扩容方式是创建新实例以处理传入流量负载。但是,如果您设置了实例数上限,则可能会遇到没有足够的实例来满足传入流量负载需求的情况。
在这种情况下,Cloud Run functions 会尝试在长达 30 秒的时间内处理新的入站请求:
- 如果某个实例在此时间段内处理完其请求,则可能会开始处理这个新的入站请求。
- 如果没有可用的实例,则该请求将失败。
发送到过载 HTTP 函数的请求会失败,并返回响应代码 429 Too Many Requests
。
系统会自动保存发往事件驱动型函数的事件,直至有容量可用。
超出 Cloud Run functions 函数扩缩能力的实例数上限
在指定实例数上限时,您实际指定的是一个数量上限。设置较高的上限并不意味着您的函数一定会纵向扩容到指定的实例数量,它只意味着在任何时间点共存的实例数量不得超过此上限。
此外,设置实例数上限可能会影响 Cloud Run functions 用于满足流量需求的扩缩策略。通常,Cloud Run functions 会优先遵循您指定的上限,而不是扩容(可能超过您的上限)。
处理流量高峰
在某些情况下,例如流量快速激增时,Cloud Run functions 函数在短时间内创建的实例数量可能多于指定的实例数上限。如果您的函数无法承受此暂时性行为,您可能需要考虑安全边际因素,设置一个低于函数承受能力的实例数上限。
部署
部署新版函数时,Cloud Run functions 函数会将流量从较早版本迁移到新版本。因为实例数上限是针对每个函数版本独立设置的,所以部署后的一段时间内,实际的实例数可能会暂时超出指定的上限。
例如,某个函数的实例数上限可能是 5 个。正常情况下,该函数在处理请求时会纵向扩容到 5 个实例。部署新版函数后,新版本自身的实例数上限是 5 个。
部署新版函数后,该函数的上一版本已处理的请求不会中断。这些请求将继续得到处理。新的入站请求将由新部署的函数版本处理。
因此,在部署新版本后的一段时间内,上述示例中的函数最多可能有 10 个实例(每个函数版本各有 5 个实例)。上一版函数的实例终止运行所需的时间取决于这些实例处理完所有活跃请求所需的时间。这是在选择适当的实例数上限时需要考虑的一个额外因素。