Создание нескольких файловых серверов для файлового хостинга или файлообменника

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

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

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

Много часов я думал как сделать лучше, было много вариантов, безде были плюсы и минусы, но решил сделать всё в итоге так:

Файловый хостинг с несколькими серверами.

Схематичный рисунок:

 file-hosting-servers-of-files

В данном представлении многосерверного файлообменника всё состоит так:

База данных MySQL

Имеется всего 1 БД файлов, которая расположена на сервере сайта файлового хостинга. При скачивании все файловые сервера подключаются к ней удалённо. В одной из ячеек таблицы БД в которую записываются данные о загруженном файле, так же записывается сервер на котором он расположен, например "s1". Как вы получаете к нему доступ??? А вот как. Все ссылки на файлы, независимо от того на какой они сервер загружены, выглядят вида aaa.ru/file/blablabla, а не s1.aaa.ru/file/blablabla или s2.aaa.ru/file/blablabla, где blablabla - уникальное имя файла.

Допустим посетитель скачивает файл, расположенный на файловом сервере 2. Он переходит по ссылке aaa.ru/file/blablabla, на открывшейся странице появляется информация о скачиваемом файле и ещё допустим каптча, для большей защиты. Предполагается что после верного ввода каптчи должно начаться скачивание файла. Это осуществится тем, что мы опираясь на уникальное имя файла - blablabla выбираем из БД всю строчку и все данные о файле, в том числе и сервер на который он загружен. После чего с помощью PHP мы подставляем имя сервера (s1 или s2) в ссылку на которую нас перенаправит каптча в случае верного ввода ( например ссылка получится http://s1.aaa.ru/blablabla/) и после этого начнётся скачивания (ниже рассказано как оно началось)

Сайт

На сервере где стоит сайт с БД файлов, сами файлы не хранятся, в целях улучшения производительности сайта. Хранятся лишь страницы с каптчей для безопасного  доступа к скачиванию и самое главное тут же присутствует и страница с формой для загрузки файлов (!). Но маленький ньюанс в настройке формы, вот кусочек HTML кода формы:

<form enctype="multipart/form-data" action="http://s1.aaa.ru/upload.php" ...

Главное обратите внимание на то что файл данная форма передаёт не на один из локальных обработчиков как это обычно делают, а на один из наших файловых серверов, о настройке которого будет опять-таки ниже на странице. В данном случае файл отправляется на Первый файловый сервер, по мере заполнения его файлами, вы можете следить за средней коростью скачивания файлов, и когда она начнёт существенно снижаться, меняйте в форме загрузки файлов action="http://s1.aaa.ru/upload.php" на action="http://s2.aaa.ru/upload.php", предварительно настроив Второй файловый сервер для работы.

Файловые сервера

Ну и вот самое весёлое. Осталось последнее в схеме настройка файлового сервера. Как, надеюсь, стало уже понятно на файловых серверах хранятся файлы, так же именно на них расположен обработчик загрузки файлов с формы сайта нашего файлового хостинга и так же здесь у нас скрипт который выдаёт файл для скачивания. Но обо всём по порядку. Обработчик загрузки файлов представляет собой обычный PHP код, который записывает в базу данные о загружаемом файле, в том числе сервер на который он загружается (s2.aaa.ru запишет в строку с файлом в ячейке о сервере соответственно s2) и также обработчик копирует загружаемый файл к себе на файловый сервер.

Скачивание файлов происходит так: например, пользователь, как описывалось выше вводит верно каптчу и PHP его пересылает на адрес s1.aaa.ru/blablabla Поскольку blablabla - наш идентификатор файла, по нему мы находим все данные о файле в БД MySQL и PHP скрипт отдаёт пользователю файл.

Стоит также отметить, что файловый сервер НЕ ИМЕЕТ собственной БД, а поделючается к БД сайта файлового хостинга ( Т.е при подключении вместо привычного localhost используем IP адрес сервера на котором расположен сайт файлового хостинга.

Вероятно если не всё, то многое непонятно, но старался как мог.


You have no rights to post comments

Карта сайта