У моего веб-приложения heroku есть функция для загрузки изображений с S3. Он работает следующим образом:Heroku dynos не делит файловую систему
- Существует одна конечная точка (A) для запроса загрузки массива изображений, который возвращает идентификатор задачи.
- Эти изображения загружаются A в папку
tmp
Heroku моего приложения. И когда все изображения загружаются, создается zip-файл. - Пока изображения все еще загружаются, веб-клиент вызывает другую конечную точку (B) с идентификатором задачи из пункта 1. Эта вторая конечная точка проверяет, сколько изображений уже загружено, чтобы вернуть процент прогресса. Когда zip уже создан, он «возвращает» zip-файл, и изображения загружаются.
Этот подход отлично работал в Heroku с 1 динозавром. К сожалению, после масштабирования до 2 динамиков мы поняли, что он больше не работает. Причина в том, что dynos в Heroku не использует одну и ту же файловую систему, а конечные точки A и B управляются разными динамиками. Поэтому dyno в конечной точке B не находит никакого файла.
Есть ли простой способ заставить мой подход работать с несколькими динозаврами?
Если нет, как следует реализовать описанную функцию? (загрузка нескольких изображений из S3 в zip-файле)
Да, это может быть один подход! Как мы могли отслеживать ход загрузки кучи изображений? В моем решении я «подсчитывал» количество уже загруженных изображений, чтобы вернуть процесс загрузки. –
Для отчета о ходе работы вы должны использовать Redis или Memcached. Динозагрузка изображений приведет к продвижению к ключу, и любые другие динозаторы могут добиться этого прогресса с помощью значения ключа. Redis и memcached отлично подходят для синхронизации данных между динамиками. – Daniel
Спасибо за эти идеи. Завтра я подумаю об этом и при необходимости приму ответ. –