“请求被中止,因为没有可用的实例” - Google Cloud Functions(PubSub 触发器)

Posted

技术标签:

【中文标题】“请求被中止,因为没有可用的实例” - Google Cloud Functions(PubSub 触发器)【英文标题】:"The request was aborted because there was no available instance" - Google Cloud Functions (PubSub trigger) 【发布时间】:2021-11-28 08:43:20 【问题描述】:

嘿,溢出者!

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

由于某种原因,当发布消息时,来自 Cloud Function 的警告日志返回:“POST 429 [...] The request was aborted because there is no available instance” em>。

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

谢谢大家!

编辑:函数内存限制为 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

注意:入站流量的极快增长可能会导致 间歇性地导致某些请求失败,HTTP 代码为 500。 这是因为请求在挂起队列中超时,而 等待创建新实例。配置您的工作负载 它可以在一分钟内逐渐增加流量 帮助解决这个问题。另请参阅对云功能进行故障排除 更多信息。

再次感谢大家!

【问题讨论】:

您的 Cloud Functions 参数是什么?特别是,您是否设置了最大实例值? 函数内存限制为 256MB,超时时间为 60 秒,最大实例数为 4。 【参考方案1】:

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

因此,如果您在 PubSub 中同时有 4 条以上的消息,就会出现这个 429 HTTP 错误。

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

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

【讨论】:

感谢您的回复纪尧姆!我已经测试了删除最大实例限制,但它仍然无法正常工作。我收到相同的 PubSub 错误(一些 POST 500 和 429)。 这不是魔法!!它可以扩展到 1000 个实例,但需要几秒钟/几分钟才能达到这个水平。如果您的 PubSub 消息流量突然激增,可能会导致 429 问题。 500 个错误很奇怪。你有数据库连接吗?您是否达到数据库连接限制?

以上是关于“请求被中止,因为没有可用的实例” - Google Cloud Functions(PubSub 触发器)的主要内容,如果未能解决你的问题,请参考以下文章

text 为Raspberry Pi添加SSMTP支持。如果使用谷歌Gmail,您需要访问此页面以允许更少的安全应用程序:https://myaccount.googl

JSON锛?JavaScript Object Notation

5.15心得

Grails spring-security-oauth-google:如何设置

grpc.go

如何使用googlehttp地理编码