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

ufj5ltwl  于 2022-12-27  发布在  其他
关注(0)|答案(1)|浏览(135)

随着时间的推移,我们有时会在云函数中看到突发错误-"请求被中止,因为没有可用的示例。" HTTP响应500,这表明云函数本质上无法管理流量速率。这种情况发生在由Firestore、RTDB、PubSub甚至计划函数的更改触发的云函数中。根据故障排除指南,流量突然增加、长时间冷启动或长时间请求处理可能会导致这种情况。我们还了解,在云函数执行非常重要的情况下,使用指数回退重试机制是一种良好做法。我们知道这不是最大示例数问题,因为我们没有为这些函数设置最大示例数,并且误差是500而不是429。
问题:
1.我们能否确定根本原因-例如,是否是冷启动?是否是长时间运行的功能导致的?
1.当函数由于冷启动时间而失败时?此冷启动是否仅包括提供示例并将代码放入其中所花费的时间,或者还包括运行时环境(例如node index.js)的初始执行时间,该运行时环境也在全局范围内执行代码?
1.云函数在配置失败时重试。它是否也包括我们遇到的"无可用示例"的情况?

x4shl7ld

x4shl7ld1#

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

  • 交通量的突然剧增。
  • 冷启动时间长。
  • 请求处理时间较长。
  • 归因于云运行服务的瞬时因素

正如本文中提到的,Cloud Run并没有在请求日志中标记它们是否导致了冷启动,但是Stackdriver是一套监控工具(Stackdriver日志记录、Stackdriver错误报告、Stackdriver监控),帮助您了解云功能的运行情况。它内置了日志记录、错误报告和监控工具。除了stackdriver,您还可以执行时间、GCP控制台中的执行计数和内存使用情况。您可以参考此云函数的堆栈驱动程序日志记录和堆栈驱动程序跟踪& Error Reporting
冷启动包括提供示例所需的时间,也包括运行时环境的初始执行时间。我认为失败时重试配置不包括“无可用示例”
我发现这个github & Issue tracker是因为一个类似的问题而提出的,这个问题仍然没有解决。如果你仍然面临这个问题,你可以关注这个问题,以便将来更新,也可以在那里添加你的担忧。

相关问题