This post is also available in: Английский
В наших предыдущих статьях мы подробно рассматривали механизмы кеширования HTTP Dynamic Streaming контента средствами веб-сервера NGINX. Но в масштабах больших проектов одного такого подхода чаще всего бывает недостаточно. В этой статье мы поговорим о построении высокопроизводительных HTTP Dynamic Streaming систем доставки контента.
Проблемы, с которыми можно встретиться при построении HTTP Dynamic Streaming видео платформы (системы доставки контента — CDN):
- Если на вашем портале используется несколько кеширующих серверов и пользователи регулярно обращаются к разнообразным видеофайлам, то это неизбежно ведет к постоянной ротации кеша на веб серверах и как следствие общей потери производительности. При использовании аппаратного балансировщика методом Round Robin практически невозможно равномерно распределить нагрузку по серверам, так как пользователя смотрят контент в разных качествах.
- Постоянные обращения Origin-серверов (Apache+f4fhttp module) к Системе Хранения Данных негативно влияют на ее жизненный цикл, особенно в случае использования SSD дисков.
- Одной из важных задач при стриминге контента является выбор оптимальной для пользователя площадки. Это становится не тривиальной задачей, если серверы Вашего проекта разнесены по нескольким площадкам, которые имеют пиринговые стыки с разными провайдерами.
Для решения данных проблем специалистами необходима интеллектуальная балансировка пользователей по видео серверам HTTP Dynamic Streaming. Такое решение было разработано нашими специалистами на основании опыта построения крупных систем доставки контента при создании высокопроизводительной видео платформы, на базе собственного С++ серверного балансировщика нагрузки и веб сервера NGINX.
Основные функциональные возможности системы:
- Балансировка запросов между серверами на основании информации о наличии контента в кеше (content aware load balancing)
- Балансировка между распределенными площадками на основании geo-расположения пользователя (возможность использования внешней базы IP адресов) и маршрутов
- Балансировка на основе данных о загруженности каналов до видео серверов
- Возможность приоритезации трафика для vip-пользователей и premium-контента (балансировка на основании типа контента и типа пользователей)
Система состоит из двух основных компонентов: Balancer Daemon (балансировщик) и Edge Daemon (видео сервер).
Edge Daemon – приложение, в фоновом режиме отслеживающее изменения в директории кеша NGINX. Информация о сегментах видео, находящихся в кеше сервера отсылается на Balancer Daemon по протоколу HTTP. Для оценки уровня загруженности сервера edge собирает и передает на балансировщик:
• Load Average загрузки системы
• Свободная оперативная память
• Загрузка сетевых интерфейсов и агрегатов
• Статистика модуля NGINX HttpStubStatusModule
Приложение Edge daemon запускается на каждом кеширующем сервере NGINX, для простоты конфигурации демона используется xml-файл.
Balancer Daemon – приложение, запускаемое на выделенном сервере. Производит сбор и анализ данных о нагрузке на кеширующие сервера. На основе анализируемых данных для каждого клиента подбирается оптимальный сервер с HTTP DS контентом. Если приложение не может получить статистику с сервиса Edge Daemon, то оно временно перестает отправлять запросы на данный сервер. Таким образом это дает простой и гибкий способ вывода кеширующих серверов из ротации (например, для проведения плановых технических работ) без деградации функциональных возможностей системы в целом.
Для повышения отказоустойчивости комплекса мы использовали несколько серверов с Balancer Daemon в связке с аппаратным балансировщиком нагрузки, поддерживающим технологию HealthCheck. В случае выхода из строя одного из балансировщиков, он просто выводится из ротации на сетевом уровне.
Для пользователя портала механизм балансировки абсолютно прозрачен и не вызывает задержек при загрузке видео.
Подробнее рассмотрим процесс взаимодействия клиентского приложения (Flash/AIR) и систему балансировки нагрузки HTTP DS:
1) Плеер посылает запрос на Virtual IP адрес аппаратного балансировщика, который пересылает на один из HTTP DS балансировщиков
2) Балансировщик анализирует на каком из NGINX-серверов данный контент уже имеется в кеше, анализирует IP-адрес клиента и загруженность серверов в целом. На основе этих данных для каждого клиента подбирается оптимальный сервер NGINX для отдачи контента.
3) Балансировщик возвращает ответ плееру, в ответе содержится адрес сервера с которого будет загружаться контент
Для управления пулом кеширующих серверов NGINX специалистами нашей компании было разработано AIR-приложения с помощью которого возможно в режиме on-line получать статистику о работе серверов и общей загруженности комплекса. Для управления системой предусмотрена возможность быстрого вывода серверов из ротации, добавление и удаление серверов.
Таким образом, использование HTTP DS Load Balancer позволяет существенно повысить долю контента, доставляемую из кеша веб серверов, повысить надежность и отказоустойчивость системы в целом, при этом обеспечивая более высокий уровень сервиса для пользователей.