# #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 изображений одновременно.