Где лучше хранить статитку?

Вопрос заключается вот в чем:
есть некий сервис, который работает с кучей статических файлов (почти инстаграм, но не инстаграм).
и очень хочется вынести статику на отдельный сервер. Возможно облако.

Хотелось бы узнать - где бы вы разместили >1 миллиона картинок?
И как?
  • Вопрос задан
  • 3798 просмотров
Решения вопроса 3
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
CDN (CloudFlare CDN, MaxCDN например), amazon s3 и т.д. При заливке загружаете файл в хранилище и собственно все. Далее все зависит от типа хранилища и подробно описано в документации к сервисам.

по поводу eucalyptus, это разве не балансировщик нагрузки? Ежели вы про платформу облачных сервисов, вам это встанет дороже нежели оплачивать cdn/amazon, ибо придется платить за обслуживание системы.
Ответ написан
@inkvizitor68sl
Linux-сисадмин с 8 летним стажем.
Всё зависит от того, как вам с этими файлами взаимодействовать надо.
У облачных хранилищ, обычно, достаточно специфичные интерфейсы взаимодействия (то есть нужно будет переписывать код, который отвечает за "заливку файла"). Тем более, у Amazon S3.
У CDN в классическом понимании этого слова вообще нет интерфейса для заливки, они выступают кэширующим прокси над вашим ресурсом.

Файлы можно просто сложить на отдельный сервер, настроить их для отдачи файлов (nginx-а хватит), поменять ссылки на сайте на новый сервер.
В базе можно хранить id изображения, к диапазонам id привязать соответствующий сервер. И раздавать картинки с images1.domain.tld, images2.domain.tld и так далее.

Писать в эти стораджи можно по NFS или через gluster (у него есть режим standalone-сервера). Тогда код переписывать не придется, только класть файлы в другие каталоги. А читать файлы пользователи будут уже по ссылкам, ведущим на другой сервер.

Правда, сервер такой может упасть или стать недоступным. Если это беспокоит - то нужно заранее думать, как с этим бороться. В принципе, любой админ вам всё это расскажет.

То есть у вас 2 пути:
1) переписывать код под облачное хранилище (которое может закрыться через несколько лет).
2) найти админа, который поможет вам организовать отдельную отказоустойчивую схему для картинок (если нужна отказоустойчивая). Здесь можно либо по сетевым ФС складывать файлы, либо переписать на заливку файлов POST-запросами на соседний сервер. Из плюсов - никогда не закроется =)
3) если нужен только 1 сервер и сами хотя бы немного админить умеете - выносите на отдельный домен, монтируете по NFS/gluster, пишете через NFS, читаете по http с отдельного домена.
Ответ написан
ptchol
@ptchol
Linux system administrator
Если планируете расти, то сразу стоит задуматься над распредленной хранилкой.
Рано или поздно контент перестанет вмещаться на 1 сервер.
Выше уже советовали gluster, но лично я бы его врагу не посоветовал.
Elliptics от яндекса, работает хорошо и быстро, несколько "необычен" в архитектуре внутри, но когда разбираешься, понимаешь зачем это нужно.
В качестве "фронта", от них же уже запилена такая штука как rift которая позволяет реализовать систему бакетов аналогичную S3. Есть еще несколько надстроек позволяющих делать некоторую обработку данных "прямо в хранилище", не таская контент на другие хосты.

Касательно CDN, цены на них и объема хранимого у них контента.
Цены бывают очень гибкие, если посмотрите к примеру на CDN.net, при создании зоны они позволяют часть "дорогих" направлений исключить из обработки.

Касательно объема хранимого на cdn't вашего контента.
cdn77.com к примеру говорит что они хранят у себя до 50Гб вашего кэша, остальное по отдельному прайсу. Опять же они не гарантируют сохранность данных, а лишь позволяют увеличить объем кэша, если ваш активный dataset большего объема.
У остальных cdn провайдеров таже история, только часто эта информация доступна только после обращения в саппорт.

Отдавать напрямую с S3 дорого.
Если мы говорим о дешевых хостингах, таких как hetzner \ datashack \ DO, то отдавать с них не всегда эффективно, если вам важна скорость доставки контента до клиента. Возможно у какого нибудь phoenixnap лучше доставка, но и сервера там дороже.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
Дешевле будет взять несколько серверов с ssd и нормальными каналами. CDN выйдет раз в 50-10 дороже. Но все конечно зависит от количества трафика..
Ответ написан
купил бы дешевый сервер где выделенные каналы
Ответ написан
Комментировать
@PetrBeliy
Идеальный вариант - это аренда сервера, не майтесь дурью с "облаками"
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы