"The request was aborted because there was no available instance" - Google 云函数(PubSub 触发器)

"The request was aborted because there was no available instance" - Google Cloud Functions (PubSub trigger)

嘿,溢出来的人!

我正在开发一个小型应用程序,每次将消息发布到 PubSub 主题时都会触发 Cloud Functions。函数内的代码(显然)工作正常,但我正在尝试发布过程中的一些问题。

出于某种原因,当发布消息时,来自 Cloud Function returns 的警告日志:"POST 429 [...]由于没有可用实例而中止.

我想知道这意味着什么以及如何处理它,如果有人可以提供帮助。我不确定如何从我的代码中解决这个问题。

谢谢大家!

编辑:函数内存限制为 256MB,超时 60 秒。

编辑 2:我测试了删除实例限制,但服务一直失败(返回 POST 500 或 POST 429 错误)。

我还有一个问题,我的 Cloud Functions 有时会返回超时。我很确定问题的根源在于 PubSub,即之前提到的那个,这些 CF 对应于失败的 POST 请求。在大多数情况下,功能都在时间范围内正确执行。

我的问题:如果一开始没有正确发布消息,为什么要执行这些功能(也许重试?),更重要的是,为什么这些功能会达到超时限制(它们不应该触发直到消息被正确发布,对吧)?

编辑 3:我一直在阅读 Google Cloud Functions 文档,发现我的问题已记录在此处:https://cloud.google.com/functions/docs/troubleshooting#scalability

正如 Guillaume 所说(再次感谢!)这似乎是一个缩放问题。这些功能被触发得如此之快,以至于它们没有足够的时间来扩展实例。我将尝试处理传入消息的流量,使其在增加时变慢。

本节中的注释也有帮助: https://cloud.google.com/functions/docs/concepts/exec#auto-scaling_and_concurrency

Note: An extremely rapid increase in inbound traffic can intermittently cause some requests to fail with an HTTP code of 500. This is because the requests are timing out in the pending queue while waiting for new instances to be created. Configuring your workload so that it ramps traffic up gradually over the course of a minute can help with this issue. Also see Troubleshooting Cloud Functions for more information.

再次感谢大家!

您已将 Cloud Functions 创建限制为 4 个实例。 Cloud Functions 一次只能处理 1 个请求(在您的情况下是 1 条消息)。

因此,如果您在 PubSub 中同时有超过 4 条消息,则会出现此 429 HTTP 错误。

但是,如果您的用例对时间不敏感,这不是问题。 Activate the retry 在您的 Cloud Functions 部署中,稍后将重试该消息。

如果您希望尽快处理消息,请考虑增加 Cloud Functions 最大实例限制,或使用接受并行处理的产品(例如 Cloud 运行 和 App Engine)