【问题标题】:cloud run is closing the container even if my script is still running即使我的脚本仍在运行,云运行也会关闭容器
【发布时间】:2019-11-05 13:31:44
【问题描述】:

我想在云上运行一个长时间运行的作业。此任务可能执行超过 30 分钟,并且主要发送 API 请求。 云运行在大约 20 分钟后停止执行,从指标来看,它似乎没有识别出我的任务仍处于运行状态。所以它可能认为它正在空转并关闭容器。我想我可以在作业运行时对服务器进行调用以保持容器处于活动状态,但是有没有办法从容器向云运行发出信号,表明作业仍然处于活动状态而不是关闭容器?

我可以说它正在关闭容器,因为日志刚刚停止。然后,我对云运行端点的下一次调用,我可以再次从 NodeJS express 中看到“监听”日志。

【问题讨论】:

    标签: google-cloud-run


    【解决方案1】:

    我想在云上运行一个长时间运行的作业。

    这是一条红鲱鱼。

    在 Cloud Run 上,不能保证会使用相同的容器。这是最好的努力。

    虽然您不处理请求,但您的 CPU 将被限制在接近 0 的水平,因此您现在尝试做的事情(运行后台任务并尝试通过发送请求来保持容器活动)并不是一件好事主意。您的应用模型很可能不适合 Cloud Run,我推荐其他可以让您运行长时间运行的进程的计算产品。

    【讨论】:

    • 对于每天几次运行带有 nodejs 脚本的 docker 的 cron 作业,您有什么建议,完成后会缩放到零?
    • 在这种情况下,您可以从 Cloud Scheduler(或其他 cron)调用 Cloud Run。如果您将计算限制在请求的持续时间内,并在 Cloud Run 的请求超时时间内完成,应该没问题。
    • 那么谷歌有没有像 Fargates 那样按 CPU 和内存使用付费的无服务器容器引擎?可以让您运行后台线程并扩大或缩小它们的东西。
    【解决方案2】:

    根据documentation,Cloud Run 将在 15 分钟后超时,并且该限制无法增加。因此,对于长时间运行的任务,Cloud Run 并不是一个很好的解决方案。如果您的工作需要长时间运行,请考虑将工作委托给 Compute Engine 或其他没有时间限制的产品。

    【讨论】:

    • 我相信这次超时是为了请求。因此,如果服务器没有响应,它将发送 408 或 5XX 响应。还有文档指定如果服务器没有收到请求,它将关闭所有容器。如果我每 15 - 20 分钟执行一次简单的 get 请求,即使一个小时后容器仍会运行并完成工作。
    • @nabulaer - 除非您启动后台线程,否则您的代码不会在 HTTP 请求/响应之间运行。当最后一个 HTTP 响应返回并使容器符合关闭条件时,CPU 空闲为零。 Cloud Run 专为无状态 HTTP 服务而设计。运行后台线程会创建违反容器合同的“状态”。
    【解决方案3】:

    是的,您可以使用。您可以创建一个计时器,在 5 分钟后调用您自己的 api,因此 15 分钟后不会超时。每当计时器执行时,它都会在您的服务器上创建一个虚拟请求。

    【讨论】:

      【解决方案4】:

      如果您的后端请求在 1 小时内完成,您可以将容器的请求超时从 5 分钟增加到 1 小时

      【讨论】:

        猜你喜欢
        • 2018-05-29
        • 2021-01-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多