CPU 分配(服务)

使用集合让一切井井有条 根据您的偏好保存内容并对其进行分类。

默认情况下,系统仅在请求处理、容器启动和关停期间为 Cloud Run 容器实例分配 CPU。(请参阅容器实例生命周期)。您可以更改此行为,以便 CPU 始终会分配并且可用,即使没有传入请求也是如此。设置“始终分配 CPU”有助于运行短期有效的后台任务和其他异步处理任务。

CPU 分配模式图示

请注意,即使始终分配 CPU,Cloud Run 自动扩缩也仍然有效,如果不需要处理传入的流量,则可能会终止容器实例。实例在处理请求后绝不会保持空闲状态超过 15 分钟,除非它使用实例数下限保持活跃状态。

将“始终分配 CPU”与实例数下限数值搭配使用,可以让一定数量的容器实例保持运行并可以完全访问 CPU 资源,从而实现后台处理。

价格影响

如果您选择仅在请求处理期间分配 CPU,则需要按请求付费,并且只能在容器实例处理请求时付费。 如果您选择“始终分配 CPU”设置,则需要为容器实例的整个生命周期付费。如需了解详情,请参阅 Cloud Run 价格表

如何选择合适的 CPU 分配方案

根据多种因素为您的使用场景选择适当的 CPU 分配,例如流量模式、后台执行和费用,下面的部分将对每种因素进行介绍。

流量模式注意事项

  • 如果传入的流量是零星、突发或峰值,则建议仅在请求处理期间分配 CPU
  • 如果传入流量稳定且缓慢变化,则建议始终分配 CPU

后台执行注意事项

选择始终分配 CPU 后,您可以在返回响应后执行短期有效的后台任务和其他异步处理工作。例如:

  • 利用可能假定能够在后台运行的 OpenTelemetry 等功能来监控代理。
  • 使用 Go 的 Goroutine、Node.js 异步、Java 线程和 Kotlin 协同程序。
  • 使用依赖于内置调度/后台功能的应用框架。

空闲实例(包括通过实例数下限保持备用状态的实例)可以随时关停。如果您需要在容器终止之前完成未完成的任务,则可以捕获 SIGTERM 以在容器实例停止之前留出 10 秒的宽限期。

请考虑使用 Cloud Tasks 来执行异步任务。Cloud Tasks 会自动重试失败的任务,并且支持最长 30 分钟的运行时间。

费用注意事项

如果您目前使用的是仅在处理请求期间分配 CPU,那么在以下情况下,始终分配 CPU 可能更经济实惠:

  • 您的 Cloud Run 服务以相当稳定的速率处理大量当前请求。
  • 在查看容器实例计数指标时,您不会看到许多“空闲”的容器实例。

您可以使用价格计算器来估算费用差异。

自动扩缩注意事项

仅在请求处理期间才分配 CPU始终分配 CPU 都应用于请求驱动的服务。

只有在请求处理期间的 CPU 利用率超过 60% 时,Cloud Run 横向扩容

如果您选择始终分配 CPU 并执行无请求的后台活动,则即使 CPU 使用率超过 60% 的阈值,Cloud Run 也不会横向扩容。在某些情况下,容器实例可能过于繁忙,无法接受传入请求。

设置和更新 CPU 分配

任何配置更改都会导致新修订版本的创建。后续修订版本也将自动采用此配置设置,除非您进行了明确更新。

如果您要选择“始终分配 CPU”这一选项,则必须至少指定 512MiB 的内存

默认情况下,对于每个容器实例而言,只会在处理请求期间分配 CPU。您可以在创建新服务部署新修订版本时使用 Google Cloud 控制台、gcloud 命令行或 YAML 文件更改此值:

控制台

  1. 转到 Cloud Run

  2. 如果您是要配置一个新服务来作为部署目标,请点击创建服务。如果您要配置现有服务,请点击该服务,然后点击修改和部署新的修订版本

  3. 如果您要配置新服务,请根据需要填写初始服务设置页面,然后点击容器、连接、安全性以展开服务配置页面。

  4. 点击容器标签页。

    图片

  5. 在“CPU 分配和价格”下选择所需的 CPU 分配。针对实例选择仅在处理请求期间分配 CPU后,实例只会在收到请求时才会收到 CPU。选择始终分配 CPU 为容器实例的整个生命周期分配 CPU。

  6. 点击创建部署

命令行

您可以更新 CPU 分配。如需为给定服务设置始终分配 CPU,请运行以下命令:

gcloud run services update SERVICE --no-cpu-throttling 

SERVICE 替换为服务的名称。

如需设置仅在处理请求期间分配 CPU,请执行以下操作:

gcloud run services update SERVICE --cpu-throttling 

您还可以设置在部署期间分配 CPU。如需设置始终分配 CPU,请执行以下操作:

gcloud run deploy --image IMAGE_URL --no-cpu-throttling

如需设置仅在处理请求期间分配 CPU,请执行以下操作:

gcloud run deploy --image IMAGE_URL --cpu-throttling

IMAGE_URL 替换为对容器映像的引用,例如 us-docker.pkg.dev/cloudrun/container/hello:latest

YAML

您可以使用 gcloud run services describe --format export 命令下载并查看现有服务配置,该命令会生成清理后的 YAML 格式的结果。然后按照后续说明修改字段,最后使用 gcloud run services replace 命令上传修改后的 YAML。请务必严格按照说明修改字段。

  1. 要查看和下载配置,请运行以下命令:

    gcloud run services describe SERVICE --format export > service.yaml
  2. 更新 cpu 特性:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
          annotations:
            run.googleapis.com/cpu-throttling: 'BOOLEAN'
          name: REVISION

    替换

    • SERVICE 替换为您的 Cloud Run 服务的名称
    • BOOLEAN 替换为 true(以设置仅在处理请求期间分配 CPU)或 false(以设置始终分配 CPU)。
    • REVISION 替换为新的修订版本名称或者将其删除(如果存在)。如果您提供新的修订版本名称,则该名称必须满足以下条件:
      • 开头为 SERVICE-
      • 仅包含小写字母、数字和 -
      • 不以 - 结尾
      • 不超过 63 个字符
  3. 使用以下命令将服务替换为其新配置:

    gcloud run services replace service.yaml

查看 CPU 分配设置

如需查看 Cloud Run 服务的当前 CPU 分配设置,请按照以下所述操作:

控制台

  1. 转到 Cloud Run

  2. 点击您感兴趣的服务以打开“服务详细信息”页面。

  3. 点击修订版本标签页。

  4. 在右侧的详细信息面板中,“容器”标签页下列出了 CPU 分配设置。

命令行

  1. 使用以下命令:

    gcloud run services describe SERVICE
  2. 在返回的配置中找到 CPU 分配设置。