Я создаю приложение в Rails, которое позволяет пользователям загружать изображения в свои галереи. Изображения отображаются в 3 размерах (на данный момент: оригинал, средний, большой палец) и меняются по размеру (я использую carrierwave и minimagick) по мере загрузки каждого файла, а новые размеры сохраняются на s3.
Первые пару созданных мною прототипов были мучительно медленными при тестировании с более чем 50 загруженными фотографиями одновременно или когда одновременно загружалось много людей.
Вот два возможных решения, о которых я думаю:
Попросите пользователей загрузить изображения оригинального размера в S3, а затем используйте прокси-сервер для изменения размера изображения, чтобы изменить размер изображений других размеров. Первоначально изменение размера выполняется на лету, затем кэшируется с использованием Squid или Varnish.
Загрузите исходные изображения пользователей на S3, затем установите приложение для изменения размера изображений (встроенное в sinatra или что-то маленькое и быстрое), которое может обрабатывать какие-либо очереди (возможно, с использованием delayed_job), обрабатывать изображения и сохранять их S3, и уведомлять основное приложение об обработке (чтобы пользователи были уведомлены о том, что они готовы и могут быть показаны на сайте).
Меня больше всего волнует пользовательский опыт, поэтому чем быстрее, тем лучше. Я склоняюсь к # 1, так как это означает, что люди могут получить доступ к галерее, как только они сделали загрузку.
Может ли кто-нибудь пролить какой-либо опыт / свет на то, что может быть лучше всего?