Облачные функции для множественных файлов события gcp в корзине

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

Вопрос:

Я создаю облачную функцию в GCP для автоматического изменения размера изображений, загруженных в корзину, и переноса их в другую корзину. Поскольку изображения поступают партиями, и одна папка может содержать сотни или тысячи изображений, лучше ли включить в код возможность работы с несколькими файлами или лучше разрешить запуск облачных функций при каждой загрузке изображения.

Ответ №1:

finalize Событие отправляется при создании нового объекта (или перезаписи существующего объекта и создании нового поколения этого объекта) в корзине.

Для каждого загруженного объекта будет запускаться новая функция. Вы можете попробовать сжать все эти изображения в ZIP файл на клиенте, загрузить его так, чтобы он запускал только 1 функцию, а затем загрузить изображения обратно в хранилище после их распаковки. Но убедитесь, что вы не достигли никаких ограничений, указанных в документации.

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

1. Спасибо за понимание! Было бы лучше вместо этого использовать Cloud Run?

2. @Чуваки, я не совсем понимаю, что вы пытаетесь сделать. Если мне нужно обработать все изображения перед загрузкой в хранилище, я обычно запускаю их через сервер, работающий на облачных вычислениях (вы можете использовать Cloud Run). Это также помогает предотвратить загрузку пользователем большого объема данных непосредственно в хранилище, и нет тайм-аутов, таких как облачные функции.

3. Кроме того, я могу вызывать функцию только 1000 раз или 1000 вызовов одновременно?

4. @Чуваки, что вы имеете в виду под этим? Эти функции будут запущены, когда объекты будут полностью загружены.

5. Мой вопрос больше касался квоты на 1000 звонков. Предел 1000 — это одновременные вызовы или 1000 раз с момента создания функции?

Ответ №2:

Параллельная обработка действительно эффективна в бессерверном продукте, поскольку она автоматически масштабируется вверх и вниз в соответствии с вашими рабочими нагрузками.

Если вы можете получать тысячи изображений за несколько секунд, масштабируемость продукта без сервера может вызвать трудности, и вы можете потерять некоторые сообщения (без сервера быстро масштабируется, но это не волшебство!!)

Лучшим решением является публикация события облачного хранилища в PubSub. Например, вы можете легко повторить неудачные сообщения.

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

Вы можете подключить PubSub push-подписку к облачному запуску. Мощь облачного запуска заключается в способности обрабатывать несколько HTTP-запросов (push-сообщение PubSub — > События облачного хранилища) в одном экземпляре и, следовательно, обрабатывать одновременно несколько изображений в одном экземпляре. Если процесс преобразования требует больших вычислительных ресурсов, в облачном экземпляре может быть до 4 процессоров.

И, как облачные функции, вы платите только за количество активных (обрабатывающих запрос) экземпляров. С помощью облачных функций вы можете обрабатывать 1 запрос за раз, следовательно, 1 экземпляр на файл. С помощью Cloud Run вы можете обрабатывать до 1000 одновременных запросов, и, следовательно, вы можете сократить до 1000 раз количество экземпляров и, следовательно, ваши затраты. Однако позаботьтесь о процессоре, необходимом для обработки, если он требует больших вычислительных ресурсов, вы не сможете обрабатывать 1000 изображений одновременно.