Каков наилучший способ управления несколькими медиа-серверами и распределения файлов между ними? - PullRequest
1 голос
/ 11 мая 2009

У меня есть сайт с файловым хостом, который прожигает до 2 ГБ полосы пропускания, поэтому мне нужно начать добавлять вторичные медиа-серверы для хранения файлов. Каков наилучший способ управления настройкой нескольких серверов с большим количеством файлов? Желательно только через php.

В настоящее время у меня есть только около 100 ГБ файлов ... так что я могу получить второй сервер, зеркалировать весь контент между ними, а затем округлить трафик 50/50, 33/33/33 и т. Д. общее количество файлов выходит за пределы емкости одного сервера, это не сработает.

Идея, которая у меня была, заключалась в том, чтобы иметь список медиасерверов, хранящихся в БД, с количеством свободного места, оставшегося на каждом сервере. Как только файл загружен, php выберет, на какой сервер файл действительно загружен, и равномерно распределит все файлы по серверам.

надеялся получить больше информации / вдохновения.

Не могу использовать любые сторонние сервисы, такие как Amazon. Файлы варьируются от нескольких байтов до гигабайта.

Спасибо

Ответы [ 5 ]

2 голосов
/ 14 мая 2009

Вы можете попробовать MogileFS . Это распределенная файловая система. Имеет хороший API для PHP. Вы можете создавать категории и загружать файлы в эту категорию. Для каждой категории вы можете определить, на скольких серверах она должна быть распределена. Вы можете использовать API для получения URL-адреса этого файла на случайном узле.

1 голос
/ 14 мая 2009

Если вы делаете столько передачи данных, сколько говорите, может показаться, что все, что вы делаете, растет довольно быстро.

Возможно, стоит потратить время на то, чтобы связаться с вашим хостинг-провайдером и узнать, предлагают ли они какие-либо решения для общего хранилища с помощью iscsi, nas или другими способами. В идеале, хранилище не только должно быть достаточно большим, чтобы в нем можно было хранить все, что у вас есть, но и динамически развиваться сверх ваших потребностей. Я знаю, что мой хостинг-провайдер предлагает подобное решение.

Если они этого не делают, вы можете рассмотреть возможность размещения ваших серверов где-нибудь, которое либо предлагает подобную услугу, либо позволит вам установить свой собственный сервер хранения данных (который может быть дешево создан из готовых компонентов и программного обеспечения, таких как Freenas или Openfiler ).

Получив платформу централизованного хранения, вы можете добавить веб-серверы к своему сердечному контенту и распределять их по нагрузке, одновременно обращаясь к одному и тому же центральному хранилищу хранилища.

Мало того, что это правильный способ сделать это, он даст вам гораздо больше избыточности и расширяемости в будущем, если ваши усилия будут продолжать расти такими же темпами, как в настоящее время.

Другие решения, предлагаемые с использованием хранилища базы данных того, что хранится где, будут работать, но это не только добавляет дополнительный уровень сложности в складку, но и дополнительный уровень обработки между вашими посетителями и данными, к которым они хотят получить доступ .

Что если вы потеряли жесткий диск, вы потеряете 1/3 или 1/2 всех ваших данных?

Должны ли тяжелые операции ввода-вывода статического содержимого быть на тех же шпинделях, что и остальная часть вашей операционной системы и данные приложений?

0 голосов
/ 11 мая 2009

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

плюсы:

  • использовать несколько серверов для одного файла. например for cutekitten.jpg: filepath="server1\cutekitten.jpg;server2\cutekitten.jpg", а затем выберите сервер в зависимости от нагрузки на сервер (или случайно, или поочередно, ...)

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

  • если вы добавляете новый сервер, это безболезненно (просто добавьте адрес в пул серверов)

минусы:

  • решения для домашнего пива всегда рискованны

  • ваш алгоритм распределения нагрузки должен быть хорошо протестирован, иначе могут случиться плохие вещи (все отражается везде)

  • постоянно перемещающиеся файлы для балансировки добавляют дополнительную нагрузку на сервер

* или используйте смешанный алгоритм взвешивания: свободное место, загрузка сервера, популярность файла

отказ от ответственности: я никогда не был в ситуации, просто догадывался.

0 голосов
/ 11 мая 2009

Рассмотрим HDFS, которая является частью Hadoop Apache. Это будет интегрировано с PHP, но вы будете настраивать второе приложение. Это также решит все ваши вопросы балансировки между серверами и обработки вещей, когда использование файлового пространства превышает возможности одного сервера. Хотя это не чисто в PHP, но я не думаю, что это то, что вы имели в виду, когда говорили «чистый».

См. http://hadoop.apache.org/core/docs/current/hdfs_design.html для идеи этого. Они охватывают всю идею о том, как он обрабатывает большие файлы, много файлов, репликацию и т. Д.

0 голосов
/ 11 мая 2009

Ваша лучшая ставка на самом деле - поместить ваши файлы в какое-то хранилище, которое масштабируется. Локальное хранение файлов должно выполняться только по уважительной причине (они конфиденциальные, конфиденциальные и т. Д.)

Лучше всего переместить ваш контент в облако. Облачные файлы Mosso или Amazon S3 позволят вам хранить почти бесконечное количество файлов. Весь ваш контент будет доступен через API. При желании вы можете использовать MySQL для отслеживания метаданных для упрощения поиска и позволить службе обрабатывать фактическое хранение файлов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...