Миграция CDN с nginx на Angie: кейс RUTUBE

Всем привет! Давно планировали рассказать пару сценариев использования нашего веб-сервера с открытым кодом Angie. Сегодня речь пойдет о том, как Angie используется в инфраструктуре такого большого проекта, как RUTUBE.

Совместно с командой RUTUBE мы разобрали весь процесс от целеполагания до результата. Со стороны RUTUBE собрать статью нам помогал Дмитрий Иванов (@abvgd) руководитель отдела эксплуатации инфраструктуры.

RUTUBE:

В своей инфраструктуре RUTUBE использует веб-сервер nginx на большом количестве сервисов. При этом с nginx есть несколько проблем:

  1. Зоопарк сторонних модулей. Дело в том, что open source nginx не обеспечивает всей нужной нам функциональности.Дополнительно нам нужны: kaltura для ds-origin, rtmp, geoip2 модуль, brotli на frontend/innerend/cdn, vts на frontend/innerend/cdn и т.д. В результате рискуем попасть в ситуацию, когда одни модули не совместимы с другими.

  2. HTTP 4xx и 5xx ошибки мониторятся очень кривым способом: nginx → access_log → Rsyslog → Kafka → ClickHouse → metric. При этом терялась часть информации, например, было сложно понять, в каком виртуалхосте-локейшенепроизошла проблема. Хотелось бы использовать другой подход, чтобы собирать статистику HTTP 2xx/4xx/5xx по сервисам, т.е. per server/location.

В итоге команда RUTUBE решила протестировать гипотезу, что с этими затруднениями может помочь Angie. Сработало!

Собственно, переход

Собственно, переход

Для справки:  сегодня RUTUBE — это сотни миллионов загруженных и раздаваемых видео, 4000 серверов, 200 CDN серверов, 25 городов присутствия, 7 Тбит/с трафика.

Миграция с nginx на Angie

Angie Software:

RUTUBE использует Angie как in-place замену nginx, при этом все файлы/конфиги/ пути остаются на месте. Логи по-прежнему пишутся в /var/log /nginx (если такой путь был определён в конфиге), сам конфиг находится в etc/nginx/nginx.conf и т.д. Сервис Angie доступен по имени nginx, т.е. чтобы сделать, например, reload, можно подавать команду systemctl reload nginx. Команда systemctl reload angie также работает. В целом мы описали процесс бесшовной миграции с nginx на Angie в нашей инструкции.

RUTUBE:

В нашей инфраструктуре много что выстроено вокруг nginx. Достаточно сказать, что наши конфиги nginx настолько большие, что вынесены в отдельные репозитории, для которых написаны отдельные пайплайны доставки. Чтобы не переделывать вообще всё и везде, выбрали решение in-place замены одного веб-сервера на другой. Для этого адаптировали конфиги nginx для Angie, добавив переключатель nginx_angie, и вписали подобные конструкции, например:

error_log /var/log/nginx/error.log crit;
pid /var/run/nginx.pid;
{% if nginx_angie %}
load_module modules/ngx_http_brotli_static_module.so;
load_module modules/ngx_http_brotli_filter_module.so;
{% endif %}
events {

или

server_name example.com;
{% if nginx_angie %}
status_zone example_com;
{% endif %}

Сам переход вышел беcпроблемным. Сейчас у RUTUBE весь CDN работает на Angie и с легкостью может раздавать 7 Тбит/c с почти 200 мощных серверов.

Архитектура национального видеохостинга RUTUBE: как мы раздаем 7 Тбит/с со своего CDN

Архитектура национального видеохостинга RUTUBE: как мы раздаем 7 Тбит/с со своего CDN

Angie Software:

Коллеги подошли к процессу миграции разумно и профессионально, не только подложив соломку там, где это необходимо, но и использовав во благо все вшитые в Angie возможности.

Вот, к примеру, типовой CDN-сервер. На текущий момент этот красавец раздал 12 Пбайт, в частности 231 Гбайт плейлистов и 11 Пбайт чанков видео.

Вот, к примеру, типовой CDN-сервер. На текущий момент этот красавец раздал 12 Пбайт, в частности 231 Гбайт плейлистов и 11 Пбайт чанков видео.

Команда Angie сама собирает модули и пользователям нет необходимости с этим возиться. Перед переходом с nginx на Angie коллеги из RUTUBE собрали все используемые модули и проверили, что они есть у Angie. Не нашли legacy GeoIP v1, только GeoIP v2, но это решили совсем просто — наконец-то мигрировали на GeoIP v2 везде, где был GeoIP v1.

В итоге команда RUTUBE с помощью Angie решила обе проблемы: разобралась и с зоопарком модулей, и с мониторингом.

Мониторинг, который смог

Angie Software:

С мониторингом у Angie всё ещё проще. В случае RUTUBE выгодным отличием Angie от nginx оказалось наличие всевозможных метрик, которые можно смотреть в веб-приложении Angie Console Light, экспортироовать в Zabbix или Prometheus. С nginx коллеги из RUTUBE, к примеру, не могли мониторить статистику per server/location. С Angie просто определили разные зоны и мониторят себе спокойно.

Кстати, про возможности по мониторингу Angie (с помощью Console Light и не только) мы написали на Хабре огромную статью.

RUTUBE:

Там, где установлен Angie, установлено и веб-приложение Angie Console Light. Штука оказалась очень полезная. Console Light — это облегченный интерфейс мониторинга активности в реальном времени, который отображает ключевыепоказатели нагрузки и производительности сервера. Консоль основана на возможностях API-интерфейса Angie; данные мониторинга активности генерируются в реальном времени, в отличие от других решений для мониторинга,  опирающихся на логи.

Возможности Angie по мониторингу помогли нам:

  • через метрики API найти локейшены/виртуалхосты, в которых давно нет трафика;

  • через метрики API найти виртуалхосты, в которых была паразитная активность (Sic!);

  • через метрики API найти провайдеров, которые блокировали нашли BGP-анонсы;

  • после перехода на Angie у нас появились метрики эффективности кеширования,  до этого были только косвенные (типа, чтение/запись на диск). С тех пор мы довольно неплохо повысили эффективность кеширования.

Более того, при помощи Angie мы нашли потенциальную проблему на оборудовании для сетевой фильтрации, которое стоит между веб-сервером и апстримами. Выглядело это очень по-новогоднему: в консоли Angie одномоментно все апстримы (или большая их часть) загорались красными, а потом сразу же зелёными.

Есть проблема

Есть проблема

Нет проблемы

Нет проблемы

Angie Software:

Нам особенно зашло, как коллеги из RUTUBE создали в Zabbix шаблон Angie by Zabbix agent, который выступал заменой шаблону Nginx by Zabbix agent. Шаблон обеспечивал обнаружение HTTP-зон и зон location из модуля API. Кстати, зоны в location должны называться без знака «минус», иначе LLD в Zabbix их не обнаружит (либо часть с минусами надо брать в кавычки).

Более того, со временем коллеги из RUTUBE разработали замену этому шаблону на основе HTTP-агента Zabbix’а: Angie by HTTP. Его плюс в том, что метрики собираются по HTTP, а значит, можно использовать сжатие, так как на большомколичестве виртуалхостов и /или апстримов метрики занимают заметный объём. Скажем кратко — красавцы.

И ещё одну вещь надо отметить — коллеги из RUTUBE неоднократно обращались к нам и предлагали добавить ту или иную функциональность в Angie. К примеру, они обратили наше внимание на то,  что в метриках resolver’а нет возможности понять, сколько запросов ушло в сеть. В итоге сделали отдельную метрику cached, которая показывает количество ответов именно из кэша resolver«а. 

По возможности мы стараемся интегрировать все разумные и полезные предложения от сообщества. Опыт RUTUBE и обратная связь от инженеров компании очень ценны для нас. Будь как инженеры RUTUBE — пробуй Angie и делись результатом с другими.

© Habrahabr.ru