Узел 6 работает значительно быстрее, чем узел 8 в облачных функциях Google, обращающихся к Google Cloud Storage - PullRequest
2 голосов
/ 26 октября 2019

Я пытаюсь обновить свой бэкэнд облачных функций до узла 8, потому что узел 6 не поддерживается GCP. Я обнаружил, что узел 8 на значительно медленнее, чем узел 6, до такой степени, что мои функции иногда отключаются. Приложение, над которым я работаю, позволяет пользователю загружать фотографии в облачное хранилище, которое запускает облачную функцию, которая извлекает exif-данные из фотографий и сохраняет их в БД.

Чтобы упростить задачу, я написал облачную функцию тестера, которая показывает несоответствие между узлами 6 и 8. Тестер запускается при загрузке фотографий, а затем просто загружает файл из другого сегмента. Ниже приведены программы и команды, которые я использовал для их развертывания:

Проверка узла 6:

const Storage = require('@google-cloud/storage');

bucketName = 'MY_BUCKET_NAME'
fileName = 'db-config.json'

/**
 * Generic background Cloud Function to be triggered by Cloud Storage.
 *
 * @param {object} event The Cloud Functions event.
 * @param {function} callback The callback function.
 */
exports.node8Test = (event, callback) => {

    const storage = new Storage({
        projectId: process.env.GCP_PROJECT
    });

    var start = Date.now()
    storage.bucket(bucketName).file(fileName).download().then((config) => {
        console.log(Date.now() - start)
        callback()
    });
  };

Команда развертывания узла 6:

gcloud functions deploy node8Test --trigger-resource MY_BUCKET_NAME --trigger-event google.storage.object.finalize  --runtime=nodejs6 --timeout=450s

Проверка узла 8:

const Storage = require('@google-cloud/storage');

bucketName = 'MY_BUCKET_NAME'
fileName = 'db-config.json'

/**
 * Generic background Cloud Function to be triggered by Cloud Storage.
 *
 * @param {object} data The event payload.
 * @param {object} context The event metadata.
 */
exports.node8Test = (data, context) => {

    const storage = new Storage({
        projectId: process.env.GCP_PROJECT
    });

    var start = Date.now()
    storage.bucket(bucketName).file(fileName).download().then((config) => {
        console.log(Date.now() - start)
    });
  };

Команда развертывания узла 8:

gcloud functions deploy node8Test --trigger-resource MY_BUCKET_NAME --trigger-event google.storage.object.finalize  --runtime=nodejs8 --timeout=450s

Вот мои результаты:

  • Проверка узла 6 завершилась со средним временем 273 мс (загружено 10 элементов и усреднено время)
  • Тест узла 6 никогда не занимал больше времени, чем 550 мс
  • Тест узла 8 завершился со среднимвремя 17,160 мс , более 17 секунд (загружено 10 элементов и усреднено время)
  • Все тесты узла 8 заняли 6000 мс при самом длительном прохождении теста в течение 26 секунд

Как это исправить?

РЕДАКТИРОВАТЬ: добавлены fileName и bucketName вверху. Этот файл представляет собой крошечный простой текстовый файл, который содержит один объект json с 4 свойствами, и все они являются строками, которые определяют конфигурации подключения к базе данных.

ОБНОВЛЕНИЕ: Исходные данные теста, полученные выше, были получены с использованием облачного хранилища nodejs версии 1.7. 0. После этого я снова запустил тест узла 8 после обновления до последней версии облачного хранилища nodejs (версия 4.0.0) и все еще наблюдаю такое же медленное время отклика. Еще одна вещь, которую нужно добавить: файл 'db-config.json' загружается во все мои другие 20-некоторые бэкенд-облачные функции. Однако эти облачные функции запускаются по протоколу http и работают на узле 8 так же быстро, как и на узле 6. Кажется, что замедление узла 8 происходит только в облачных функциях, запускаемых загрузкой облачного хранилища.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...