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

How to handle long requests in Google Cloud Run?

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

我对此的疑虑是

  1. 1.2s - 2.5s 请求是否适合云 运行?或者有什么规则要求请求必须在xx毫秒内完成?

另请参阅屏幕截图,我在日志中收到一条消息以及请求 "The request caused a new container instance to be started and may thus take longer and use more CPU than a typical request"

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

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

提前致谢。

  1. 我不认为这会是个问题,除非你担心 CPU/memory 时间的成本,老实说,只有当你得到 10k+ 时,这才重要 requests/day。所以,可能没关系,云 运行 可以很好地处理(我自己的应用程序请求的时间比这更长,没有问题)

  2. 您的服务可能 "scaled to zero" 意味着没有剩余的容器 运行 服务请求。在这种情况下,有必要启动一个新实例并等待与该过程相关的任何 initializing/startup 成本。也有可能是由于所有其他实例都达到了它们的请求限制而自动缩放。确保将每个实例的最大并发请求数设置为大于 1 - Node/Express 可以一次处理多个请求。另外,您只需按总时间付费,而不是按请求付费:

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

TL;DR 更长的请求(~10-30 秒)应该没问题,除非您担心它们可能会大规模发生而增加计算时间的成本。