【问题标题】:Google Cloud Run and golang goroutinesGoogle Cloud Run 和 golang 协程
【发布时间】:2019-07-29 16:27:09
【问题描述】:

我正在考虑使用 Google Cloud Run 来执行一些类似 cron 的操作。它们将由 HTTP 调用触发。调用将返回(可能带有 202)并通过 golang goroutine 在后台继续运行。

但是,我担心 Google Cloud Run 容器在不处理 HTTP 请求时会被破坏。我可以在我的处理过程中完成并获得收获。

有没有办法告诉 GCR 在我完成之前让容器保持活动状态?

【问题讨论】:

    标签: google-cloud-run


    【解决方案1】:

    Cloud Run 在不处理任何请求时会将您的 CPU 缩减到几乎为零,因为您只在处理请求时付费。 (记录在案here)。

    因此,在后台启动 goroutine 的应用程序不适合 Cloud Run。如果你这样做,你的 goroutine 很可能会因为 CPU 时间份额而饿死,你的程序可能会开始表现得很奇怪(因为它会在一个非常慢的 CPU 上运行,如果有的话)。

    不活动的 Cloud Run 应用程序获得的极少量可能仅对垃圾收集有用,而 Go 运行时将为您完成。

    如果您想在请求上下文期间等待您的 goroutine 完成,您应该阻止请求返回,方法是使用来自 chansync.WaitGroup#Done() 的阻塞接收。

    【讨论】:

      猜你喜欢
      • 2020-02-10
      • 1970-01-01
      • 2020-11-05
      • 2020-03-28
      • 2021-12-22
      • 2019-09-01
      • 2020-09-13
      • 2020-05-27
      • 1970-01-01
      相关资源
      最近更新 更多