繁体   English   中英

Cloud Functions 中的 Firebase Firestore 冷启动缓慢

[英]Slow Firebase Firestore cold starts in Cloud Functions

在冷启动时(部署后或 3 小时后),从 Firestore 请求文档的功能需要花费大量时间,这与快速使用时不同。

冷启动:

Function execution took 4593 ms, finished with status code: 200

快速射击(我一遍又一遍地使用相同的功能发送):

Function execution took 437 ms, finished with status code: 200

我获取文档的代码非常简单:

function getWorkspaceDocument(teamSpaceId) {
    return new Promise((resolve, reject) => {
        var teamRef = db.instance.collection('teams').doc(teamSpaceId);
        teamRef.get().then(doc => {
            if (doc.exists) {
                resolve(doc.data());
                return;
            }
            else {
                reject(new Error("Document cant be found"));
                return;
            }
        }).catch(error => {
            reject(new Error("Document cant be found"));
        });
    });
}

我正在尝试制作一个 Slack 机器人,Firebase Firestore 的缓慢返回导致 Slacks API 超时。 Firebase 有没有办法阻止冷启动的发生并让它持续下去?

如果云功能需要启动新实例,则冷启动时间似乎很正常。 这是无服务器功能的一个缺点。

我认为您的实施存在问题。 您能显示更多详细信息吗?

这是关于这个主题的漂亮的小视频: https : //youtu.be/v3eG9xpzNXM

我建议检查的另一件事是分配给特定函数的内存量。 选择的每个级别不仅会增加 RAM,还会增加 CPU 频率(以及成本,请小心,不要忘记定价计算器!)。 函数的包大小与冷启动之间存在直接依赖关系(来源: https : //mikhail.io/serverless/coldstarts/gcp/ )。

我可以看到您正在使用 Firestore 管理包,它不被认为是轻量级的(来源: https : //github.com/firebase/firebase-admin-node/issues/238 )。 因此,128MB 的配置可能还不够。

对于我们的项目,将 RAM 从 128MB 增加到 512MB,将冷启动时间从 20 秒平均减少到 2.5 秒,减少了 10 倍。 如果您有多个依赖项(在我们的示例中为 7),请务必不要忽略这一点。

暂无
暂无

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

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