#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 в нашем случае).