我正在考虑对Google Cloud Run执行一些我需要执行的类似cron的操作。它们将由HTTP调用触发。调用将返回(可能使用202),并继续通过golang goroutine在后台运行。
但是,我担心Google Cloud Run容器在不处理HTTP请求时会被破坏。我可能会在处理过程中半途而废。
有没有办法告诉GCR保持容器存活直到完成?
答案 0 :(得分:1)
Cloud Run在不处理任何请求时会将您的CPU缩减至几乎为零,因为您仅在处理请求时才付款。 (已记录为here)。
因此,在后台启动goroutine的应用程序不适用于Cloud Run 。如果这样做,您的goroutines很可能会饿死CPU时间份额,并且您的程序可能开始表现得很奇怪(因为它将在非常慢的CPU上运行,如果有的话)。
不活动的Cloud Run应用程序获得的微不足道的数量可能仅对垃圾收集有用,而运行时将为您做这些事情。
如果您想在请求的上下文中等待goroutine完成,则应使用chan
或sync.WaitGroup#Done()
的阻塞接收来阻止请求返回