Лучший способ приблизиться к долгосрочным задачам (но не процессору, интенсивному использованию памяти) в GCP - PullRequest
0 голосов
/ 06 января 2020

Мы создали веб-приложение, в котором мы использовали функции Firebase для таких легких работ, как вход в систему, обновление профиля и т. Д. c. и мы развернули 2 функции в App Engine с Nodejs.

Функция 1: Загрузка аудио / видео файла из хранилища Firebase и преобразование его с помощью ffmpeg и загрузка преобразованной версии обратно в хранилище. Но App Engine завершает работу с сигналом в середине процесса загрузки (через ~ 40 секунд), если файл больше (> 500 МБ)

Функция 2. Вызов API Google (ASR) и ожидание ответа (прогресс% ) и запись этого ответа в пожарное хранилище до его завершения (100%). Этот процесс может занять от 1 до 20 минут, в зависимости от длины файла. Но здесь мы получаем две разные проблемы.

  1. Либо App Engine создает новый экземпляр в середине процесса вызова API и убивает текущий экземпляр (так как мы устанавливаем экземпляры # в 1), даже если нет параллельных запросов , Я не понимаю этого поведения, так как это не требует интенсивного использования процессора или памяти. App Engine выдает следующую информацию в журналах:

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

Или App Engine завершает работу из-за idle_timeout, даже если он ожидает asyn c ответа API и записывает его в дб. Похоже, что когда нет входящих запросов, App Engine считает себя бездействующим и завершает работу через некоторое время (~ 10 минут)

Мы новички в GCP и App Engine, поэтому, возможно, мы используем неправильный продукт (например, Compute Engine?) или неправильная реализация. Также мы видели PubSub, Cloud Tasks et c. который выглядит как решение для нашего случая. Таким образом, мне интересно, что может быть самым элегантным способом подойти к проблеме и реализовать решение? Любые комментарии, отзывы приветствуются.

С уважением А. Фарук Акар

App Engine app.yaml Конфигурация

runtime: nodejs10
manual_scaling:
    instances: 1

1 Ответ

0 голосов
/ 07 января 2020

App Engine имеет максимальное время ожидания для запроса

  • 10 минут для App Engine Standard
  • 60 минут для App Engine Flex

в обоих случаях значения по умолчанию меньше.

Так что для того, что вы называете своим процессом, это не оптимальное решение.

Облачные задачи имеют те же ограничения, что и App Engine, поэтому вы можете столкнуться с похожими проблемами.

Compute Engine может работать для вас, так как это виртуальные машины, где вы управляете конфигурацией. Чтобы обеспечить рентабельность, посмотрите, какой компьютер наименьшего размера может работать с вашим приложением.

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