运行在 Google 云 运行 中宁后台进程

Running background processes in Google Cloud Run

我有一个在给定时间运行 cron 作业的轻型服务器。据我了解 Google Cloud 运行 仅处理传入请求,如果没有其他请求要处理,则在短时间后变为空闲状态。因此,不建议将该 cron 服务部署到云 运行。

出于好奇,我部署了以下服务器,该服务器启动后每小时打印一次日志。

const express = require('express');
const app = express();

setInterval(() => console.log('ping!'), 1000 * 60 * 60);

app.listen(process.env.PORT, () => {
  console.log('server listening');
})

我用最小和最大实例数 1 部署了它。它没有收到任何请求,当我第二天检查时,它正好每小时打印一次日志。这是巧合还是我可以将此设置用于生产?

据我了解没有。

根据文档 here,Google 表示空闲实例的 CPU 被限制为几乎为零。我想这意味着仍然可以执行非常简单的操作(例如,每小时记录一个字符串)。我猜你可以通过做一些更复杂的操作来更广泛地测试它,并评估这些操作的处理时间。

无论哪种方式,我都不会在生产环境中指望它。无法保证CPU“节流到接近零”将能够在合理的时间延迟内完成您需要的操作。

如果您将最小实例设置为 1 并将 CPU 始终打开设置为 true,是的,您可以在没有 CPU 节流的情况下执行后台计算密集型处理(在您的 hello world 案例中,您可以在没有 CPU always on 选项的情况下使用空闲实例允许的少数 CPU %。

BUT,但是非常重要,您将支付 1 个 Cloud 运行 实例的费用。此外,如果您收到请求,您可以扩大规模并拥有超过 1 个实例和 运行。让多个实例具有相同的 CRON 调度有意义吗? (除非您将最大实例设置为 1)。


最后,最好的模式是在 Cloud Scheduler 外部托管调度,然后查询您的实例以执行任务。它是无服务器的,您可以并行处理多个任务,它是可扩展的。