具有云功能的 GCP PubSub => 中止请求

问题描述 投票:0回答:1

我将相当大量的小项目(大约 100k)推送到 PubSub 队列中。然后,云功能会处理手头的任务。此设置导致我出现以下错误。

enter image description here

有谁知道为什么我会特别遇到这个错误?对我来说,GCP 试图扩展到遇到错误的程度是没有意义的。它可能只是在其限制范围内工作,并需要更多时间来完成工作。如果不是,分离消息生产者和消费者的意义何在?

firebase google-cloud-functions google-cloud-pubsub
1个回答
0
投票

云函数背后的概念是,您编写函数的主体,而 Google 负责在进行呼叫/消息/准备就绪时触发您的代码。 Cloud Functions 有两个实现/代,称为 Gen1 和 Gen2。 Gen2 是您应该使用的,并且是默认的,并且很可能是您正在使用的。 Cloud Functions Gen2 实际上是构建在 Cloud Run 之上的。 因此,为了获得最佳效果,您还应该检查 Cloud Run 文档。

当我们看Cloud Run时,我们会发现它是基于Docker镜像的。 当 Cloud Functions 运行时,Docker 镜像会为您构建并封装您的 Cloud Function 函数代码。

通过这个序言,我们现在可以深入了解故事的实质和您的问题。 配置 Cloud Run 实例时(由 Cloud Functions Gen2 隐式完成),有两个与容量相关的主要属性。

  1. 实例数量
  2. 并发线程数

实例的数量可以被认为是可用于运行工作的计算实例的数量。 将它们视为虚拟机。 当请求到达 Cloud Run 以运行某些工作时,Cloud Run 将启动一台虚拟机(如果尚未运行),然后在该虚拟机中运行您的逻辑。 运行结束时,VM 仍保持就绪状态,可以立即处理下一个请求。 如果一段时间内(我认为是 15 分钟)没有新请求到达,那么 VM 就会消失。 您需要为处理请求时所花费的时间付费……而不是为虚拟机启动或请求之间的空闲时间付费。

配置 Cloud Run 时,您可以指定希望允许的最大实例数。 达到此数量后,不会创建新实例。 之后运行工作的请求要么排队,要么您可能会收到类似于您列出的错误......即没有可用的实例。

我想我们现在已经解释了故事的核心了。 您应该检查您的 Cloud Function 配置及其到 Cloud Run 的映射。 查看您允许的实例数量,并查看遇到错误时实际运行的实例数量。

还有很多可以说的……但我只是简单地谈谈并发。 并发性是指一个虚拟机实例可以执行的并行请求的数量。 如果并发值 > 1,则定义了单个 VM 实例中可以处理的并发请求数。

© www.soinside.com 2019 - 2024. All rights reserved.