Google Cloud Run 与本地机器相比非常慢

sud*_*cha 12 google-cloud-run

我们有一个小脚本,可以抓取网页(约 17 个条目),并将它们写入 Firestore 集合。为此,我们在 Google Cloud Run 上部署了一项服务。

使用 Docker 容器镜像在本地测试时,此代码的执行需要约 5 秒。部署到 Cloud Run 的同一映像需要 1 多分钟。

即使是“删除集合中的所有文档”这样的简单命令,在本地需要 2-3 秒,而在 Cloud Run 上部署时需要 10 多秒。

我们知道冷启动,所以我们在第三次、第四次和第五次运行中测试了 Cloud Run 的性能,但它仍然很慢。

我们还尝试了 CPU 数、实例数、并发数、内存数,使用两端的默认值和极值,但 Cloud Run 的性能很慢。

这是预期的吗?Cloud Run 的单个实例真的这么弱吗?我们可以做些什么来让它更快吗?

这种缓慢的问题在于,如果我们为大量条目运行我们的代码,Cloud Run 最终会超时(更不用说每秒 Cloud Run 的成本)

sud*_*cha 9

在我们对此进行了大量实验时,发布了我自己的问题的答案,并在我们自己的实现中发现了问题。

在我们的例子中,性能超慢的原因是没有 Promise 或回调的异步调用。

我们最初错过的是这一节:避免后台活动

我们的代码没有等待异步操作结束,并立即响应请求。异步操作然后转移到后台活动并花费很长时间才能完成。


回应发布的评论或可能出现的类似问题: 1. 我们没有尝试通过设置具有相同配置的 VM 来尝试本地实验,因为我们更快地找出了原因。

  1. 我们还没有在文件系统上写任何东西(还),操作是简单的调用。但这是个好问题,我们在存储/写入数据时会牢记这一点