Медленный запуск Firebase Firestore в облачных функциях

#node.js #firebase #google-cloud-firestore #google-cloud-functions

# #node.js #firebase #google-cloud-firestore #google-cloud-функции

Вопрос:

При холодном запуске (после развертывания или через 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 способ остановить холодные запуски и позволить им сохраняться до конца?

Комментарии:

1. Запускаете ли вы свои функции firestore из правильного географического местоположения?? *

Ответ №1:

Если облачной функции необходимо запустить новый экземпляр, время холодного запуска кажется нормальным. Это один из недостатков бессерверной функции.

Я думаю, что есть проблема с вашей реализацией. Не могли бы вы показать более подробную информацию?

Вот небольшое видео на эту тему: https://youtu.be/v3eG9xpzNXM

Ответ №2:

Еще одна вещь, которую я бы посоветовал проверить, — это объем памяти, выделенный для конкретной функции. Каждый выбранный уровень увеличивает не только объем оперативной памяти, но и частоту процессора (и затраты, будьте осторожны и не забывайте о калькуляторе цен!). Существует прямая зависимость между размером пакета вашей функции и холодным запуском (источник: https://mikhail.io/serverless/coldstarts/gcp /).

Я вижу, что вы используете пакет администратора Firestore, который не считается легковесным (источник: https://github.com/firebase/firebase-admin-node/issues/238 ). Таким образом, конфигурации 128 МБ может быть недостаточно.

Для нашего проекта увеличение ОЗУ со 128 МБ до 512 МБ сократило время холодной загрузки в 10 раз с 20 секунд до 2,5 секунд в среднем. Обязательно не забывайте об этом, если у вас есть несколько зависимостей (7 в нашем случае).