【发布时间】:2021-03-29 17:52:01
【问题描述】:
我正在使用 Firebase 托管和 firebase 功能开发一个新的 React 网站。
我在 GCP Cloud Sql 和 GCP Secret Manager 中使用 MySQL 数据库(大量数据报告需要 SQL)来存放数据库用户名/密码。
Firebase 函数用于从数据库中提取数据并将结果发送回 React 应用。
在我的本地模拟器中,一切正常且响应迅速。 当它部署到 Firebase 时,我注意到对函数的第一个请求,有时是第二个请求大约需要 6 秒才能响应。之后,他们的反应不到 1 秒。对于我可以在日志中看到的缓慢响应,数据库池已初始化。 因此,缓慢的响应是实例的第一个打击。我假设在我的情况下正在创建两个实例。 请注意,无论是第一次调用还是第二次调用,不需要数据库的函数都会快速响应。
大约 15 分钟未使用服务后,我遇到了同样的问题。我假设正在回收实例并正在创建一个新实例。
问题是每个函数都有自己独立的数据库池,因此每个函数最初都会提供缓慢的响应(可能第二次调用两次)。 该网站将看到低流量,这意味着大多数用户会遇到这种缓慢的响应。
通过删除对 Secret Manager 的引用并对用户名/密码进行硬编码,响应时间已降至 3 秒以内。但这仍然是不可接受的。
有没有办法:
- 增加函数如果不使用则回收的时间?
- 标记不应回收的实例?
- 有没有办法创建一个在循环之间不会关闭的全局数据库池?
- 是否有一种方法可以在 Firebase Functions 中使用数据库连接以避免重新初始化数据库池?
- 这是函数的本质吗?我仅限于这种行为吗?
由于我处于早期开发阶段,迁移到 AppEngine/Node.js(灵活计划)能否解决回收问题?
【问题讨论】:
标签: firebase google-cloud-platform google-cloud-functions