Мультисервер и масштабируемость
Определение мультисерверности в InstantMedia означает возможность хранения, конвертации и ретрансляции на серверах, отличных от расположения основного сайта.
Мультисерверность представлена так называемыми серверами обработки. Это обычные серверы, с необходимой конфигурацией и соответствующие техническим требованиям, на которых установлен скрипт обработки — InstantMedia Server.
InstantMedia Server — визуально — обычный веб-интерфейс управления. С демо вы можете ознакомиться тут.
Быстрое развертывание на подготовленный сервер занимает буквально 5 минут и скрипт готов к работе.
"Под капотом" у скрипта мощный движок конвертации, который использует ffmpeg, "умная" система хранения и удобный парсер для ретрансляции поддерживаемых провайдеров (парсеров) видеохостингов.
В админке основного сайта вы можете создать сколь угодно серверов и назначить им свои роли: как все сразу, так и каждую по отдельности. Т.е. один сервер у вас может выполнять, например, роль исключительно конвертации, другой роль хранения или же один сервер может выполнять все роли. И так далее.
Взаимодействие между серверами происходит посредством небольшого api, обмен файлами происходит по ftp.
Безопасность и отчеты
Безопасность доступа к InstantMedia Server и в целом к системе мультисерверности, как для взаимодействия с api, так и для доступа в интерфейс управления вы можете гарантировано обеспечить, задав доступ по ip адресу или списку ip адресов. Однако это не означает, что без этого ваши серверы будут незащищенным. Это скорее максимальная, дополнительная мера. Доступ в интерфейс управления запаролен, а все api запросы включают в себя защищенный ключ и ряд других контролирующих параметров.
Для каждой роли сервера ведутся логи. Посмотреть их можно в интерфейсе управления в удобном виде, как по ролям, так и по отдельным id роликов основного сайта.
Мультисерверное хранение видео — внешние хранилища
За распределение серверов хранения (внешние хранилища) отвечает основной сайт. Он хранит информацию по всем серверам и их загруженность. При выборе сервера хранения система вычисляет сервер с наибольшим свободным местом и отправляет файл туда.
После того, как файл будет загружен на сервер хранения по ftp (во входящую директорию, об этом ниже), уже конкретный InstantMedia сервер сам определит, в какое внутреннее хранилище его переместить.
Обмен конвертированными файлами выполняется напрямую между серверами, минуя сервер, где находится основной сайт.
Воспроизведение файлов с серверов хранения может быть реализовано:
- Apache (без стриминга), 302 редирект;
- Посредством Nginx (x-accel-redirect);
- Средствами PHP (но только для flv файлов).
Файлы защищены от "хотлинка", ссылки формируются динамически на скрипт раздачи, однако для конечного пользователя это все прозрачно.
Так же можно задать ограничения по ip при обращении к файлам. В настройках указывается количество запросов и за какой период. При превышении пользователю будет показан небольшой файл-заглушка.
Внутренние хранилища на отдельном InstantMedia сервере
Внутренние хранилища — это по сути поддиректории в корневой папке /storages. Главная суть их заключается в том, что:
- каждое хранилище желательно делать на отдельном жестком диске, примонтировав его к директории;
- хранилища можно добавлять динамически по мере их заполнения;
- на каждое хранилище можно назначать свои типы файлов для хранения;
- распределять файлы постепенно согласно опции "Схема размещения";
- если вы задали в опциях хранить исходные файлы, то можно задать отдельное хранилище для этого.
Система следит за свободным местом на всех хранилищах видео файлов и при достижении порога свободного места, заданного в настройках, автоматически закрывает хранилище и уведомляет администратора.
Структура каталогов для хранения и обработки организована таким образом, что вы сможете использовать разные жесткие диски для увеличения производительности. Поясним на примере.
Загрузка любых файлов происходит в отдельный каталог /storages/work_files/input_files/. В этом каталоге хранятся все файлы, требующие обработки и/или перемещения во внутреннее хранилище. Как правило, под эту директорию можно выделить отдельный небольшой жесткий диск, необязательно с высоким откликом и буфером.
В случае конвертации, файлы конвертируются в директорию /storages/work_files/video/output/. Ее тоже желательно вынести на отдельный жесткий диск, что даст большой прирост в производительности при конвертации.
После процесса конвертации файл переносится уже непосредственно во внутренне хранилище, откуда он далее будет воспроизводится. Управлять хранилищами вы можете в админке InstantMedia Server.
Роль конвертации
После загрузки файла пользователем, основной сайт выбирает сервер конвертации по принципу наименее загруженного в данный момент. Для каждого сервера фиксируется текущее количество выполняемых задач, а так же в настройках задается максимальное количество задач в очереди, при достижении которого, система будет пытаться искать другой сервер конвертации. Однако, если все сервера загружены в данный момент, файл все равно станет в очередь к одному из серверов.
После выбора сервера, система загружает исходный файл по ftp на сервер и уведомляет его по api о том, что появился новый файл, его имя, набор форматов, в которые нужно конвертировать и на какой сервер хранения посл конвертации его переместить. Задание становится в очередь.
InstantMedia Server обрабатывает очередь согласно схемы конвертации (одновременно или по очереди). За прогрессом конвертации можно следить как на основном сайте в админке (там будет виден только прогресс выполнения конвертации первого формата) или же в админке InstantMedia.
Как только файл конвертируется в первый формат, ролик на основном сайте сразу же станет доступным для просмотра, и по мере выполнения конвертации, будут появляться новые форматы (опция выбора качества в плеерах) для просмотра.
Роль ретрансляции
На основном сайте для провайдеров, поддерживающих ретрансляцию, для каждого в отдельности можно задать свой сервер ретрансляции. Это будет означать, что роль проксирования трафика от провайдера будет выполнять другой сервер, а не тот, на котором находится основной сайт. Что позволит существенно снять нагрузку с сайтов, в полной мере использующих данную функцию.
В настройках ретрансляции InstantMedia Server можно задать скорость отдачи, приоритет качества при воспроизведении, и самое интересное, это опция "Отвязывать от провайдера после воспроизведения".
Она позволяет после первого воспроизведения закешировать воспроизводимый файл у себя, а далее, в зависимости от опции "Менять провайдера на основном сайте после отвязки" соответственно выполнить заданное действие. В чем основная суть: вы можете не менять провайдера на основном сайте, система "будет думать", что ретранслирует файл, хотя по факту будет воспроизводиться уже из кеша вашего сервера. Это полезно при конфликтных ситуациях с хостингами, откуда у вас идет ретрансляция, т.к. в любой момент вы можете очистить кеш.
Требования к серверу ретрансляции самые минимальные: от 1 Гб ОЗУ (в зависимости от того, какие файлы будут ретранслироваться), минимум дискового пространства (если кеширование не будет включено). Но самое главное конечно для ретрансляции, это широкий канал.