Как я могу хранить 1 миллиард изображений на серверах, загруженных из веб-приложения?
Каков наилучший способ хранения 1 миллиарда изображений? (загружено пользователями сайта через PHP или Javascript)
Поскольку все знают, что хранить тонны изображений (в данном случае загружаемые ими пользователи сайта) плохо в одном каталоге или NFS и т. Д., Каков наилучший способ, архитектура, конфигурация решения для хранения 1 миллиарда изображений?
Как мы будем организовывать изображения пользователей, если у одного пользователя будет не более 20 изображений? Пожалуйста, учтите, что это должно быть организовано структурно, чтобы мы могли получать изображения одного пользователя с помощью php/javascript или API программно через некоторый тип уникального идентификатора (ов) пользователя или хеш.
Любое решение с открытым исходным кодом будет предпочтительным. Возможные решения: glusterFS, MongoDB, WeedFS и т. Д.
Предположим следующее:
Веб-сайт будет иметь 1 миллиард просмотров страниц в месяц, используя дистрибутивы Linux Debian
Максимум 20 фотографий на пользователя (10 миниатюр размером 90 на 90 пикселей и 10 больших, изображения с измененным размером сценария, имеющие максимальную ширину 500 пикселей или максимальную высоту 500 пикселей в зависимости от формы изображения, то есть квадрат, прямоугольник, горизонтальный, вертикальный и т. Д.).
LEMP-стек (Linux Nginx MySQL PHP) приложение для социальных сетей, содержимое которого будет состоять из текста и изображений.
Нет стороннего облачного хранилища, такого как S3 и т. Д. Оно должно быть в частном центре обработки данных с использованием нашего собственного оборудования и ресурсов.
Решение должно включать в себя как решение для хранения, так и организацию изображений, загружаемых пользователями.
Во время моего исследования я также подготовил две замечательные статьи на случай, если это поможет вам прояснить мой вопрос.
1 ответ
Что касается хранилища проекта, я бы сказал, что вам понадобится нечто иное, чем обычная файловая система, смонтированная на выделенных или внешних дисках (SATA, SAS или оптоволоконный /SSD).
Распределенная файловая система Glusterfs была бы идеальной для использования механизма хранения, поскольку она может поддерживать реплицированные конфигурации (для HA), а также распределенную (и смешанную) конфигурацию для увеличения скорости ввода-вывода.
Что касается организационной части проекта, я бы подумал, что у вас должна быть основная файловая система (смонтированная на всех клиентах / веб-серверах), и в этой файловой системе у вас должны быть отдельные каталоги для каждого пользователя с двумя подкаталогами (один для высокое разрешение и один для небольших фотографий разрешения).
Наконец, одни и те же серверы хранения могут использоваться одновременно как веб-серверы, или мы можем использовать разные серверы (возможно, виртуальные машины XEN, KVM или Vmware). Подключение тома gluster к веб-серверам следует выполнять с помощью клиентского модуля fuse и glusterfs (из /etc/fstab). Это необходимо для работы функций glusterfs.