Синхронизация изображений, загружаемых на разные веб-сервера

Контекст: Пишется сайт с API и Postgres'ом. Берется в расчет масштабируемость, когда одно веб приложение разворачивается на нескольких серверах с разными IP, а потом DNS каким-нибудь RoundRobin пересылает пользователя на один из них.

Вопрос: Как быть с изображениями, которые пользователи загружают на один из нескольких таких сайтов? Каким образом их синхронизировать между одинаковыми веб-серверами?

Догадка: Сейчас я предполагаю развернуть сервер для хранения на нем изображений и подключаться к одной из его папок по sshfs. Всеми серверами сразу. Так все будет синхронизировано, но вдруг sshfs упадет например, плюс нагрузка на сеть и необходимость в более дорогом железе для этого файлового сервера.

Догадка №2: Загружать изображение в Postgres. А когда сервер должен будет выдать изображение, сначала проверит есть ли оно у него в папке, если нет загрузит к себе на диск из PostgreSQL и спокойно выдаст. Минус метода очевиден: хранить изображения в рабочей бд очень очень плохо, я это понимаю

Как мне быть?


Ответы (1 шт):

Автор решения: eri

Прямая ссылка

Загружайте в базу ссылку на картинку вместе с доменом сервера куда она была загруженна. Выдавайте на фронт полный урл. При аплоаде картинок меняйте сервер. Так как загрузка изображений это отдельный запрос - то нагрузка размажется по всем серверам. Тут будет минимизация по трафику и диску.

Прокси

Проблема тут только в рейтинговой статье на которую большой трафик. Если такая проблема возникает, то можно немного улучшить верхний вариант. Картинки также загружаете на сервера по очереди. Пользователю выдаете ссылку вида http://server.ex/upload_server/images/00001.jpg на нгинксе делаете проксипасс с кешированием на http://upload_server.server.ex/images/00001.jpg.

Приложение может определять популярность картинки и выдавать ссылку через кеш или прямую.

→ Ссылка