我在 Cloud Run 上运行媒体 API,虽然运行良好,但该服务的成本优化是灾难性的,因为每个实例的 CPU 利用率都不足。

以下是我的 CPU 利用率图表:

如您所见,虽然在某些峰值时 CPU 使用率达到了 100%,但在大多数情况下 (50% 四分位数和平均值) CPU 的使用率都低于 20%。

我的 API 包含高 CPU 操作(ffmpeg 转码),这些操作将占用所有可用的 CPU 资源,以及一些低 CPU 异步操作(下载和上传视频)。

这可以解释上面的图表:大多数时间,实例正在等待异步任务,CPU 使用率较低,处理视频时有时会飙升至接近 100%。

解决方案是增加每个实例的并发性。当一个进程可能在等待时,另一个进程可能在处理,反之亦然,从而导致 CPU 平均利用率更高。这也会增加响应延迟,但对于我的用例来说,这完全没问题。

除了我尝试增加并发性时,什么都没有改变。Cloud Run 似乎仍然会启动新实例来处理新请求。我的理论是,由于这些 CPU 峰值使用率,Cloud Run 认为这些实例已经达到容量上限,并启动新实例来处理请求,而不是将其路由到现有实例。

这似乎是一个相当常见的用例,但我还没有找到有关如何优化此类任务的任何资源。

我可以尝试什么吗?

我可以做出的权衡:

  • 延迟
  • 稳定性(如果实例偶尔崩溃,我可以重试)

1

  • 日志显示了什么?你收到任何错误消息了吗?另外,你能分享一下日志吗?另外,检查,确保。还可以看看这个


    – 

0