首页 > 解决方案 > Cloud Run 缩减到零对长时间计算作业或外部 API 请求有何影响?

问题描述

我是使用 Cloud Run 的新手,缩小到零的想法对我来说非常有吸引力,但我对其使用的一些场景有疑问:

  1. 如果我有一个 Cloud Run 实例查询外部 API 端点,如果没有其他请求进入,实例是否会在等待响应时结束(即我将查询超时设置为 60 分钟,并且在那 60 分钟内没有收到任何请求) ?

  2. 如果 Cloud Run 实例运行的计算持续时间超过 24 小时,甚至可能是几天,而没有收到请求,是否可以信任它执行计算,直到它完成而不被随机关闭或重新启动以进行服务或其他目的(我问这个问题是因为 Cloud Run 主要用于无状态应用程序,但我有不经常的计算作业,这些作业可能需要很长时间,在短期内可能被认为是“有状态的”)。

  3. CPU 利用率是否会影响自动扩展(例如,如果我有一个计算密集型作业未配置为在一个实例上运行分布式计算,这会触发 Cloud Run 生成其他实例吗?)

标签: google-cloud-platformgoogle-cloud-run

解决方案


如果您深入研究文档,我很确定您可以找到答案。所以,这里总结一下

  1. 有趣的阅读)。 Cloud Run 实例仅在不使用时才会关闭(通常为 15 分钟(可以随时更改,无需承诺,仅观察),无需处理请求)。在您的情况下,如果您在请求处理上下文中,不用担心,您的实例不会被杀死,它正在使用中!注意:在处理结束之前不要发送 HTTP 响应。在请求上下文中不考虑后台进程/作业。从收到请求到返回响应(OK 或 KO)都考虑上下文。接受部分响应/流式传输。

  2. 云运行实例可能存在超过 24 小时,但没有任何保证。而且,由于请求处理被限制为 1 小时,因此您不能运行更长时间的进程。我建议您查看GKE 自动驾驶仪在 Compute Engine 上运行容器并在处理结束时停止 VM 以节省资源和金钱(或在AI PLatform 自定义训练上运行容器的技巧;即使你什么都不训练,你在无服务器平台上运行一个自定义容器!)。如果可以,我建议您将工作负载设计为分成几个小型且可并行化的作业

  3. 是的,这里有描述。但请记住,在一个实例上只处理 1 个请求。如果您发送触发密集计算作业的请求,则该请求将仅在同一实例上处理(如果您的工作负载符合该实例,则该实例可以具有多个 CPU)。如果在密集处理过程中有另一个请求进来,另一个 Cloud Run 实例将被生成来处理它;只有新的请求。


推荐阅读