如何在 Google Cloud Run 中处理长请求?

Cap*_*ero 4 google-cloud-platform google-cloud-run

我已在 Cloud Run 中托管了我的节点应用程序,并且我的所有请求都在 300 - 600 毫秒的时间内得到满足。但一个端点从第三方服务获取数据,因此请求需要 1.2 秒 - 2.5 秒才能完成请求。

我对此的疑问是

  1. 1.2s - 2.5s请求适合云运行吗?或者是否有任何规则要求请求应在 xx 毫秒内完成?

另请参阅屏幕截图,我在日志中收到一条消息以及请求“该请求导致启动新的容器实例,因此可能比典型请求花费更长的时间并使用更多的 CPU”

  1. 是什么导致新的容器实例启动?
  2. 是否有任何替代方法或解决方法来处理长请求?

任何意见/建议将不胜感激。

提前致谢。

Google Cloud 已开始运行新实例

Ame*_*meo 6

  1. 我认为这不会成为问题,除非您担心 CPU/内存时间的成本,老实说,只有当您每天收到 10k 以上的请求时,这才重要。所以,可能并不重要,云运行可以很好地处理这个问题(我自己的应用程序确实请求比这更长的时间,没有问题)

  2. 您的服务可能“缩放至零”,这意味着没有容器继续运行来服务请求。在这种情况下,有必要启动一个新实例并等待与该过程相关的任何初始化/启动成本。由于所有其他实例均达到其请求限制,它也可能会自动缩放。确保每个实例的最大并发请求设置大于 1 - Node/Express 可以一次处理多个请求。另外,您只需按总花费时间付费,而不是按请求付费:

  3. 在进行很长时间(30 秒、分钟以上)操作的情况下,切换到某种不同的数据传输方法可能是个好主意。您可以使用轮询,客户端每 5 秒发出一次请求并检查响应是否已准备好。您还可以切换到某种基于推送的系统,例如 WebSockets,但 Cloud Run 不支持这一点。

TL;DR 较长的请求(约 10-30 秒)应该没问题,除非您担心大规模发生的计算时间增加的成本。