2014-11-04 2 views
1

У моего веб-приложения heroku есть функция для загрузки изображений с S3. Он работает следующим образом:Heroku dynos не делит файловую систему

  1. Существует одна конечная точка (A) для запроса загрузки массива изображений, который возвращает идентификатор задачи.
  2. Эти изображения загружаются A в папку tmp Heroku моего приложения. И когда все изображения загружаются, создается zip-файл.
  3. Пока изображения все еще загружаются, веб-клиент вызывает другую конечную точку (B) с идентификатором задачи из пункта 1. Эта вторая конечная точка проверяет, сколько изображений уже загружено, чтобы вернуть процент прогресса. Когда zip уже создан, он «возвращает» zip-файл, и изображения загружаются.

Этот подход отлично работал в Heroku с 1 динозавром. К сожалению, после масштабирования до 2 динамиков мы поняли, что он больше не работает. Причина в том, что dynos в Heroku не использует одну и ту же файловую систему, а конечные точки A и B управляются разными динамиками. Поэтому dyno в конечной точке B не находит никакого файла.

Есть ли простой способ заставить мой подход работать с несколькими динозаврами?

Если нет, как следует реализовать описанную функцию? (загрузка нескольких изображений из S3 в zip-файле)

ответ

1

Вы можете создать второе ведро S3 и нажать zip-файл на второй ведро S3 после его загрузки. Затем вы можете перенаправить клиента для загрузки zip-файла непосредственно из S3.

Затем настройте процесс для периодического запуска, чтобы очистить все, что было старым в этом ведре S3.

+0

Да, это может быть один подход! Как мы могли отслеживать ход загрузки кучи изображений? В моем решении я «подсчитывал» количество уже загруженных изображений, чтобы вернуть процесс загрузки. –

+0

Для отчета о ходе работы вы должны использовать Redis или Memcached. Динозагрузка изображений приведет к продвижению к ключу, и любые другие динозаторы могут добиться этого прогресса с помощью значения ключа. Redis и memcached отлично подходят для синхронизации данных между динамиками. – Daniel

+0

Спасибо за эти идеи. Завтра я подумаю об этом и при необходимости приму ответ. –

Смежные вопросы