Google Cloud Function 由于没有可用实例,请求被中止

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

运行一些云函数时,有时会出现错误:

由于没有可用实例,请求被中止。

我见过其他问题也有类似的错误,但对于 Cloud Run,您可以指定可用实例的数量,但 Cloud Function 似乎没有这样的事情。那么如何解决这个问题呢?

我可以在配额页面看到后台功能有限制,但HTTP功能没有限制。我通过 HTTP 调用 lambda 函数,它部署在

us-central1

google-cloud-platform google-cloud-functions
2个回答
7
投票

此问题同时发生在 Google Cloud FunctionsFirebase Cloud Functions 上。我们 Taskworld 每天都会多次面临这个问题。人们已经报告了可靠性问题这里,Google 正在跟踪该问题这里。这些问题是最近才出现的(在该问题发布到 StackOverflow 后大约 1-3 个月内创建。)

我们通过混沌工程解决了这个问题。具体来说,我们将此代码添加到我们的函数 HTTP 端点中:

  if (Math.random() < 0.1) {
    res.status(500).send('firebase is funny')
    return
  }

这实际上会导致 10% 的请求失败,并显示 500 错误代码 当 Cloud Functions 本质上无法管理流量速率时,这与行为相同。如此高的错误率迫使消费者建立弹性并向客户端本身添加一些重试逻辑。


5
投票

根据 GCP 仪表板

us-central1
europe-west1
区域当前都存在部署失败的情况。目前,我可以想到错误背后有两个原因:

  1. 当前问题会产生间接影响,即当前没有实例可以处理请求。
  2. 最初出现大量请求,尽管没有达到
    max_instances
    ,但 Cloud Functions 仍无法足够快地扩展。

#1 的解决方案是暂时将您的函数重新部署到另一个区域。 #2 的解决方案是在您的函数中实现某种重试逻辑。请注意,自动重试在 HTTP 函数中不可用,因此您必须使用自己的逻辑来实现它。

如果它不适合您,那么还有另一种选择,即使用 Cloud Tasks 实现排队机制,以处理突然爆发的流量并在请求失败时处理重试。

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