Как реализовать распределенную загрузку файлов? - PullRequest
2 голосов
/ 12 декабря 2011

У меня есть сайт для загрузки файлов, который в настоящее время находится на одном сервере, т. Е. Используется один и тот же сервер для пользователей для загрузки файлов и один и тот же сервер для доставки контента.

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

Однако у меня есть несколько вопросовотносительно этого:

Предполагая, что моя серверная ферма состоит из 10 серверов для доставки контента,

  1. Поскольку на стороне пользователя скрипт для загрузки файлов будет находиться только в одном месте,то есть <form action=upload.php>, он должен находиться на одном сервере, правильно?Как я могу продублировать скрипт на нескольких серверах и направить данные о загрузке файлов пользователя на сервер с наименьшей нагрузкой?

  2. Как мне определить, какие файлы отправлять на какой сервер?В процессе загрузки я должен рандомизировать все файлы для перехода на случайные серверы?Если пользователь отправляет 10 файлов, я должен отправить их на случайный сервер?Есть ли механизм отправки их на сервер с наименьшей нагрузкой?Есть ли другой алгоритм, который может помочь определить, на какой сервер файлы должны быть отправлены?

  3. Как файлы будут отправлены с сервера загрузки на CDN?Используете FTP?Не приведет ли это к дополнительным накладным расходам и потребностям в возможности проверки ошибок для проверки разрыва FTP-соединения и проверки успешной передачи файла и т. Д .?

1 Ответ

3 голосов
/ 13 декабря 2011

Если вы используете сервер Apache, существует модуль с именем mod_proxy_balancer . Он выполняет всю работу по балансировке нагрузки за кулисами. Пользователь никогда не узнает разницу - за исключением случаев, когда его загрузки и выгрузки происходят в 10 раз быстрее.

  1. Если вы используете это, вы можете иметь полную копию на каждом сервере.

  2. mod_proxy_balancer справится с этим за вас.

  3. Каждый сервер может иметь свой собственный поддомен. У вас будет база данных на вашем «главном» сервере, которая сопоставляет все ваши страницы загрузки с физическими серверами, на которых они расположены. Затем URL-адрес «на лету» передается на основе некоторого алгоритма хеширования, который предотвращает использование жесткой ссылки на загрузку и увеличивает количество посещений вашей страницы. Это может быть смесь личной и разной информации, например, IP-адреса пользователя и времени суток. Затем сервер загрузки проверяет хэши и принимает или отклоняет запрос.

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

примечание: Я занимался администрированием и веб-разработкой Apache. Я никогда не управлял большим CDN, так что это основано на том, что я видел на других сайтах и ​​других знаниях. Любой, кому есть что добавить здесь или внести исправления, пожалуйста, сделайте.

Обновление

Есть также компании, которые управляют этим для вас. Простой поиск Google выдаст вам список.

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