Обходной путь/альтернатива превышения времени ожидания облачной функции Google

# #google-cloud-platform #google-cloud-functions

Вопрос:

Моя функция должна выполняться один раз в день. Я подумал об использовании Google Cloud Functions сервиса вместе с Cloud Scheduler (для автоматизации его запуска) в этом случае. Проблема Cloud Functions в том, что максимальный тайм-аут установлен как 9 минут (после этого функция времени завершается). Моя функция не требует больших ресурсов процессора или памяти, но ~30 minutes для ее выполнения требуется время. Существуют ли какие-либо обходные пути/альтернативы для этого случая?

Немного контекста: функция, которую я хочу запускать один раз в день, — это простая синхронизация данных между двумя API REST. Это занимает так много времени из-за низкого лимита скорости одного API.

Ответ №1:

Поскольку вы знаете ограничение скорости API, вы должны быть в состоянии рассчитать, сколько звонков вы можете сделать за 8 минут. Затем, после того как вы сделали эти звонки , сохраните свой прогресс в Cloud Firestore в месте, отслеживаемом другой облачной функцией, прослушивающей его с помощью onCreate , например /_functionsAsyncTasks . В этой облачной функции продолжайте с того места, на котором вы остановились, и сделайте еще 8 минут звонков. Повторяйте до тех пор, пока не проработаете все свои звонки.

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

1. Спасибо! Мне это кажется лучшим решением , чем cloud run , но я слишком ленив, чтобы так сильно менять реализацию. В следующий раз я буду иметь это в виду

Ответ №2:

Альтернативой является использование Cloud Run (вам нужно только добавить веб-сервер и создать стандартный контейнер. Если вы поделитесь своим языком, я могу привести вам примеры). Облачный запуск ведет себя так же, как и Облачная функция (если вы установили параллелизм равным 1), и может обрабатывать запрос до 60 минут.

Однако будьте осторожны с облачным планировщиком. Он способен обрабатывать запрос только до 30 минут, после чего он считает запрос неудачным из-за тайм-аута. Но запрос на запуск в облаке может корректно выполняться до 60 минут (после того, как облачный запуск остановит обработку). В этом случае не устанавливайте политику повторных попыток в своем облачном планировщике и позвольте облачному запуску продолжать обработку в течение целого часа. Плохая сторона этого заключается в том, что вы не можете использовать политику повторных попыток облачного планировщика в случае реальной ошибки.

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

1. Спасибо! Облачный запуск, по-видимому, является самым простым решением этой проблемы