程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Firebase 函数、冷启动和缓慢响应大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决Firebase 函数、冷启动和缓慢响应?

开发过程中遇到Firebase 函数、冷启动和缓慢响应的问题如何解决?下面主要结合日常开发的经验,给出你关于Firebase 函数、冷启动和缓慢响应的解决方法建议,希望对你解决Firebase 函数、冷启动和缓慢响应有所启发或帮助;

我正在使用 Firebase 托管和 Firebase 功能开发一个新的 React 网站。

我在 GCP Cloud sql 和 GCP Secret Manager 中使用 MysqL 数据库(大量数据报告需要 sql)来存放数据库用户名/密码。

Firebase 函数用于从数据库中提取数据并将结果发送回 React 应用。

在我的本地模拟器中,一切正常且响应迅速。 当它部署到 Firebase 时,我注意到对函数的第一个请求,有时第二个请求需要大约 6 秒才能响应。之后,它们的响应时间不到 1 秒。对于我在日志中看到的缓慢响应,数据库池已初始化。 所以缓慢的响应是对实例的第一次打击。我假设在我的情况下正在创建两个实例。 请注意,不需要数据库的函数无论是第 1 次调用还是第 2 次调用都会快速响应。

在不使用服务约 15 分钟后,我遇到了同样的问题。我假设正在回收实例并且正在创建一个新实例。

问题是每个函数都有自己独立的数据库池,所以每个函数最初都会提供一个缓慢的响应(第二次调用可能是两次)。 该网站的流量会很低,这意味着大多数用户都会遇到这种缓慢的响应。

通过删除对 Secret Manager 和硬编码用户名/密码的引用,响应时间已降至不到 3 秒。但这仍然不能接受。

有没有办法:

  1. 增加一个函数在不使用的情况下被回收的时间?
  2. 标记不应回收的实例?
  3. 有没有办法创建一个不会在回收之间关闭的全局数据库池?
  4. 是否有一种方法可以在 Firebase 函数中使用数据库连接来避免重新初始化数据库池?
  5. 这是函数的性质吗?我仅限于这种行为吗?

由于我处于早期开发阶段,迁移到 AppEngine/Node.Js(弹性计划)会解决回收问题吗?

解决方法

首先,您在第一个和第二个请求中遇到的耗时最长的问题称为 cold starts。

这完全有道理,因为新的实例已经启动。您可能会在以下情况下冷启动:

  1. 您的函数已部署但尚未触发。
  2. 您的函数已足够空闲(未处理请求),已被回收用于资源。
  3. 您的函数正在自动扩展以处理容量和创建新实例。

我了解您提出的五个问题旨在解决 Cloud Functions 回收实例的问题。

问题 1 到 4 的直接答案是 No,因为 Cloud Functions 实现了 serverless paradigm。

这意味着一次函数调用不应依赖于前一次调用设置的内存状态(数据库池)。

现在这并不意味着您不能改善冷启动启动时间。

一般来说,冷启动启动时间的第一大贡献者是依赖项的数量。

来自 Google Cloud Tech 频道的这篇 video 准确地讨论了您遇到的问题,并更详细地描述了为调整 Cloud Functions 而实施的做法。

如果在完成视频中的最佳实践后,您的冷启动显示不可接受的值,那么,正如您已经建议的那样,您需要使用一种产品,该产品允许您像应用程序一样启动 minimum set of instances引擎标准。

您可以通过稍后实施 warm up requests.

进一步提高 App Engine 标准实例的准备情况

预热请求会在任何实时请求到达该实例之前将您的应用代码加载到新实例中。最后一个文档讨论了加载请求,这类似于冷启动,即应用的代码加载到新创建的实例的时间。

我希望你觉得这很有用。

大佬总结

以上是大佬教程为你收集整理的Firebase 函数、冷启动和缓慢响应全部内容,希望文章能够帮你解决Firebase 函数、冷启动和缓慢响应所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: