繁体   English   中英

“请求已中止,因为没有可用实例”的根本原因和重试。 云函数错误

[英]Root cause and retry of "The request was aborted because there was no available instance." error in Cloud Functions

随着时间的推移,我们有时会在我们的 Cloud Functions 中看到错误的爆发——“请求被中止,因为没有可用的实例。” HTTP 响应 500,这表明 Cloud Functions 本质上无法管理流量速率。 对于由 Firestore、RTDB、PubSub 甚至计划函数的更改触发的 Cloud Functions,会发生这种情况。 根据故障排除指南,这可能是由于流量突然增加、冷启动时间长或请求处理时间长而导致的。 我们还了解到,在 Cloud Function 执行很重要的情况下,使用指数退避重试机制是一种很好的做法。 我们知道这不是最大实例问题,因为我们没有为这些函数设置一个,而且错误是 500 而不是 429。

问题:

  1. 我们能否确定根本原因 - 例如,它是冷启动吗? 是长时间运行的 function 导致的吗?
  2. 当功能因冷启动时间而失败时? 这个冷启动是否只包括提供实例并将代码放在那里所花费的时间,或者还包括运行时环境(例如node index.js )的初始执行,它也执行全局 scope 中的代码?
  3. 云 Function 有失败重试配置 它是否也涵盖了我们遇到的“无可用实例”案例?

此错误可能由以下原因之一引起:

  • 流量突然增加。
  • 冷启动时间长。
  • 请求处理时间长。
  • 归因于 Cloud Run 服务的瞬态因素

github中所述,Cloud Run 不会使用有关它们是否导致冷启动的信息标记请求日志。但是,Stackdriver 是一套监控工具(Stackdriver Logging、Stackdriver Error reporting、Stackdriver Monitoring),可帮助您了解您的云功能中发生了什么。 它具有用于记录、报告错误和监控的内置工具。除了 stackdriver,您还可以在 GCP 控制台中执行执行时间、执行计数和 memory 使用情况。您可以参考Stackdriver Logging 和 Stackdriver Trace for Cloud Functions & Error Reporting

冷启动包括提供实例所需的时间以及运行时环境的初始执行。 并且失败配置重试不涵盖“无可用实例”

我发现这个github & Issue tracker提出了一个类似的问题,它仍然是开放的。如果你仍然面临这个问题,你可以关注这个问题以获取未来的更新,并在那里添加你的疑虑。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM