Мультисерверность в KVS

Введение

Для понимания необходимости масштабирования проекта с использованием мультисерверности опишем составляющие любого проекта на KVS:

- Программная логика работы сайта/админской части (ядро).
- Программная часть обработки контента.
- MySQL база данных.
- Основной контент (видео файлы либо файлы фотоальбомов).
- Вспомогательный контент:
     - Изображения используемые в дизайне страниц, css стили, js стили, рекламная информация.
     - Прочий динамический контент
         - Аватары пользователей и категорий.
         - Скриншоты видео.
         - Изображения контент провайдеров, двд, каналов, моделей.
- Системный контент (Исходники видео файлов и скриншотов).

Программная логика работы сайта / админской части является ядром проекта. Она занимает минимум места на дисках, требования к процессору на среднем либо ниже среднего уровня в случае корректной настройки кэширования, требования к оперативной памяти в среднем колеблются от 512Mb до 8Gb.

Программная часть обработки контента требовательна только к процессору, благодаря настройкам приоритета это отражается только на времени обработки контента.

MySQL база данных требовательна к процессору и в меньшей степени к жесткому диску.

Основной и вспомогательный контент требует правильной конфигурации дисков для того, что бы с одной стороны хватало места для его хранения, с другой – диски имели необходимую скорость для отдачи контента.

Системный контент требует только места для хранения.

Исходя из вышеприведенного разделения рассмотрим следующие возможности по масштабированию проектов на KVS:

- Хранение видео файлов и альбомов на удаленных серверах / CDN.
- Полное вынесение вспомогательного контента на удаленные сервера.
- Кодирование видео, нарезка скриншотов с помощью удаленных серверов.
- Вынесение поиска на удаленный сервер, поиск средствами Sphinx.
- Вынесение MySQL на удаленный сервер.

Хранение видео файлов и альбомов на удаленных серверах / CDN

KVS позволяет создавать группы серверов с произвольным количеством серверов внутри каждой группы. Группа серверов содержит одинаковый контент, таким образом наращивание серверов внутри группы служит для снижения нагрузки на данную группу серверов. Наращивание групп серверов соответственно необходимо для увеличения общего объема хранилища основного контента.

Каждый сервер может быть подключен либо как локальный, либо путем монтирования папки, либо с помощью FTP (рекомендуем).

Внутри группы возможно использование весов на сервер. К примеру, если на один сервер создать вес 10, а на второй 1, то на первый будет идти 90% траффика, на второй – 10%.

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

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

Отдельно стоит остановиться на удаленном хранении исходников видео в случае если такая необходимость существует. По умолчанию исходники хранятся не на группе серверов а на главном сервере, этого легко избежать изначально создав видео формат для загрузки исходников. При этом если формат будет одним из используемых на сайте – стоит правильно задать его постфикс (к примеру .avi, .mp4), если же это будет системный формат и он будет служить только для будущей нарезки других форматов – то строку ffmpeg и постфикс можно задать произвольными (как правило постфикс задается в этом случае как .dat). Также необходимо в данном формате включить опцию нарезки прочих форматов из данного и назначить его опциональным. После этого необходимо все новые видео загружать как этот формат. В результате и исходники (данный формат) и прочие форматы будут храниться с учетом мультисерверности.

Полное вынесение вспомогательного контента на удаленные сервера

Существует 2 пути вынесения такого контента на удаленные сервера:

- С помощью монтирования папки на удаленный сервер.
- С помощью синхронизации информации с удаленным сервером (sync).

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

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

Оба варианта наиболее легко вынести путем монтирования или синхронизации папки contents из корня (к этому времени видео и альбомов там уже быть не должно), и назначив отдачу с удаленного сервера по адресу http://contents.you_domain.com/. После этого в admin/include/setup.php необходимо сменить пути (url) для отдачи всего вынесенного контента.

Таким же образом можно вынести изображения и прочие элементы, используемые в верстке.

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

Кодирование видео, нарезка скриншотов с помощью удаленных серверов

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

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

Вынесение поиска на удаленный сервер, поиск средствами Sphinx

Существует три варианта оптимизации поиска:

- Поиск на удаленном сервере средствами KVS.
- Поиск на удаленном сервере средствами Sphinx.
- Поиск на главном сервере средствами Sphinx.

Первый путь наиболее простой для реализации, позволяет вынести необходимые таблицы MySQL путем синхронизации и производить поиск с помощью плагина удаленного поиска.

Оставшиеся пути значительно сложнее – но позволяет добиться значительно более высокой скорости работы, а также качества поиска.

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

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

Вынесение MySQL на удаленный сервер

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

Рекомендованные действия по развитию и масштабированию

Первоначальный запуск проекта обычно происходит либо на среднего уровня сервере (с целью вырастить проект до какого-то уровня на том же сервере) либо на сервере начального уровня / VDS. Стоит учитывать при наличии серьезных планов, что требуется время на натяжку своего дизайна, подготовку контента и ресурса в целом к запуску.

При дальнейшем росте проекта – наиболее типична задача в выносе видео на удаленных сервера хранения. Это обусловлено как большими объемами видео файлов и объективной необходимостью иметь отдельные сервера для их хранения и отдачи, так и тем, что сервера под эту задачу обычно специально сконфигурированы для такой работы и также имеют более низкую цену за обслуживание. KVS имеет весь необходимый функционал для подключения удаленного сервера или серверов или CDN на рабочем проекте.

При необходимости кодирования больших объемов данных либо с целью освободить процессор на главном сервере возможно настроить удаленный сервер или сервера конвертации. KVS позволяет провести эти операции за считанные минуты из зоны администрирования на рабочем проекте.

На значительном траффике, либо при тонкой первоначальной оптимизации имеет смысл также вынести вспомогательный контент на удаленный сервер.

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

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

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

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