- PVSM.RU - https://www.pvsm.ru -

Прошедший Чемпионат мира по футболу FIFA 2018 в России принёс большие нагрузки не только на транспортные узлы страны, но и на ИТ-инфраструктуру крупнейшего российского телевещателя, что помогла многочисленным пользователям смотреть матчи в формате онлайн-трансляций. Мы с интересом взялись за новый вызов, пришедший на обслуживаемые серверы вместе с футбольной лихорадкой.
Разговоры про highload зачастую начинаются с размышлений на тему, какие нагрузки можно по праву считать «высокими»: тысячи запросов в секунду на динамику? Или даже небольшое количество запросов в отношении к имеющимся ресурсам? Миллионы посетителей в сутки? Сотни загруженных работой узлов в кластере?..
Для получения представления о «масштабах бедствия» должно быть достаточно того факта, что речь идёт об одновременно просматривающих трансляцию пользователях, количество которых достигало отметки в 2 миллиона. Что же происходило, если посмотреть на трансляции матчей «изнутри», и как удалось справиться с небывалым трафиком?
Общая схема взаимодействия конечного пользователя с системой трансляций сводится к следующей схеме:
Архитектура для непосредственной раздачи видео была спроектирована и реализована внутренними силами инженеров заказчика ещё до начала нашего сотрудничества. Уже позже, помимо собственно обслуживания, мы занимались проектированием и вводом в эксплуатацию инфраструктуры для некоторых её компонентов, а также самого сайта, занимающего важную роль в общей схеме.
Сайт, запущенный в production несколько лет назад, ориентирован на горизонтальную масштабируемость — в том числе и на множество дата-центров:

Представленная здесь схема является упрощённой и предназначена для демонстрации природы масштабируемости сайта, компоненты которого распределены по разным дата-центрам.
Возвращаясь же собственно к просмотру видео, очевидно, что основная нагрузка приходится на CDN-серверы. В цифрах для минувшего ЧМ по футболу речь идёт о постоянном трафике, который измеряется терабитами в секунду. И во многом успех работы трансляций с пиковыми нагрузками обусловлен кэшированием на CDN всего, что может быть на них вынесено, и минимизацией ресурсных (сетевых, CPU, RAM, …) затрат на остальные операции.
Кроме того, важный момент в работе с CDN — взаимодействие с их API для получения актуальных сведений по общей и доступной пропускной способности. В системе трансляций эти данные используются для распределения новых зрителей и перераспределения текущих.
Итак, если CDN-серверы способны обеспечить достаточную пропускную способность для миллионов интернет-зрителей, то когда же вообще могут случаться проблемы? За время чемпионата мы наблюдали два основных сценария:
Например, настройки системы так «сыграли» на одном из матчей чемпионата, что сервис DDoS-защиты, не ожидавший внезапной нагрузки, начал расценивать происходящее как атаку, блокируя доступность CDN-серверов один за другим… пока его не уведомили о том, что ситуация в некотором смысле экстремальная, но всё-таки штатная (необходимые выводы были сделаны — в следующих трансляциях ситуация не повторялась).
В такие моменты все пользователи, которых настигла массовая проблема, начинают обновлять страницу с плеером.
Если говорить о более конкретных числах, то такой приток составлял сотни тысяч пользователей за 1—1,5 минуты.
Оба этих случая генерировали резкие всплески запросов на динамический контент сайта, которые необходимо было обработать имеющимися ресурсами. Как вообще подобные проблемы отслеживались и решались?
Можно с существенной долей правды пошутить, что на время всего чемпионата у нас была введена специальная должность, в обязанности которой входил внимательный просмотр футбола на рабочем месте. Конечно, речь шла не столько о футболе как таковом, сколько об оперативной реакции на любые инциденты, провоцируемые ходом матчей или иных обстоятельств…
Что за «иные обстоятельства»? На таких массовых мероприятиях заметно даже влияние погоды. Вот два примера с чемпионата, с которыми мы столкнулись:
Возвращаясь же к теме собственно мониторинга — на время всего чемпионата была принята за норму практика регулярных (после каждой пиковой трансляции) встреч вместе с разработчиками, на которых анализировались все критичные ситуации (или близкие к таковым) и их последствия — с целью минимизировать потенциальные проблемы в следующий раз. Какие серверы/сервисы были на пределе? Какие запросы оказались особенно требовательными? Какие запросы можно убрать (перенести на CDN, чтобы закэшировать на несколько секунд)? Какие запросы можно кэшировать дольше (раз в 3 минуты, а не в минуту)? Что произойдёт при прогнозируемом росте числа зрителей, потому что играть будет Россия?..
Кстати о России. Как легко догадаться, на матчи с участием сборной России в среднем приходило в несколько раз больше людей, чем на другие. И чем дальше наша сборная продвигалась по турнирной сетке, тем сложнее было совмещать свою радость по этому поводу с исполнением непосредственных обязанностей — ведь всё усложнялось неустанным ростом аудитории. Несмотря на то, что система была спроектирована так, чтобы выдерживать огромные нагрузки, в нормальном рабочем графике они случаются не так часто (менее 10 раз в год)… а в случае чемпионата мира по футболу мы наблюдали практически ежедневные highload-пики на протяжении месяца. Плюсом такого режима, впрочем, были широкие возможности по обнаружению актуальных узких мест, которые выявляются только в моменты подобных нагрузок.
Итак, если часть чисто технических вопросов снималась стандартными графиками от систем мониторинга, то в решении более сложных и/или ориентированных на бизнес-логику проблем большую роль сыграли наработки проекта под говорящим внутренним названием «Статистика реального времени».
Этот важный компонент инфраструктуры интернет-вещания был спроектирован и реализован нашими усилиями с целью предоставить инструмент бизнес-аналитики технических данных, собираемых с плееров, в которых пользователи просматривают видео. По своей сути это система логирования, которая:
Последний пункт — самый интересный, потому что:
Поскольку у подобных событий наблюдается одинаковый профиль графиков, то сам график позволяет прогнозировать рост количества пользователей на ближайшие несколько минут и принимать проактивные действия при необходимости.
Поскольку эта статистика работает в реальном времени и является критичной для качественной работы всего сервиса, даже простой по своей природе просмотр видео миллионами пользователей не сводится к раздаче им контента через CDN. Добиться быстрой записи новых данных от многочисленных плееров (речь идёт о десятках тысяч запросов в секунду на запись на каждый сервер) помогает СУБД ClickHouse, а для графиков используется привычная Grafana.

Иллюстрация соотношения количества зрителей онлайн-видео до, во время и после матча
Кстати: Интересным workaround'ом на время пиковых нагрузок стало отключение HTTPS (в пользу HTTP) для запросов от системы статистики, что приводило к двукратному снижению нагрузки на CPU на некоторых из серверов.
Успех онлайн-трансляций такого масштабного события (а с нагрузками не всегда справлялся [1] даже YouTube TV!) был обеспечен тремя ключевыми факторами:
Хотя факторов на самом деле было больше… и один из них, пожалуй, способен превзойти все технические — человеческий. Важнейшую роль сыграли специалисты, которые не только смогли сделать и связать всё необходимое технически, но и неустанно добиваться результата, в чём особенно хочу отметить заслуги руководства заказчика.
P.S. об упомянутом Kubernetes… рассказа о котором, возможно, ожидали увидеть многие читатели нашего блога. Процесс миграции системы трансляции на него уже начался, но во время чемпионата мира по футболу эти наработки ещё не были задействованы.
Автор: jambo
Источник [2]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/vy-sokaya-proizvoditel-nost/286242
Ссылки в тексте:
[1] не всегда справлялся: https://techcrunch.com/2018/07/11/youtube-tv-goes-down-during-the-world-cup/
[2] Источник: https://habr.com/post/417083/?utm_campaign=417083
Нажмите здесь для печати.