# #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. Спасибо! Облачный запуск, по-видимому, является самым простым решением этой проблемы