Как сократить расходы на среду разработки в три раза: опыт Sports.ru
Компания Sports.ru развивает спортивные и киберспортивные медиа. Помимо основного портала, она поддерживает сайд-проекты, сотни мобильных приложений, снимает полнометражные фильмы и ведёт подкасты. Анатолий Безгубов, Head of DevOps Sports.ru, рассказывает, как компания работает с большими данными и зачем ей облака.
Чем мы занимаемся
Сайт Sports.ru был запущен в 1998 году, и тогда это был единственный интернет-ресурс для спортивных фанатов. За 25 лет проект вырос из сайта в полноценную IT-компанию, которая создаёт информационные продукты в области спорта и здоровья. Среди них — сам портал Sports.ru, сайты Бомбардир, Гол.ру и Кибер и мобильные приложения для разных категорий пользователей.
На портале можно найти материалы как со стороны редакции — с новостями, видео, аналитикой и спортивной статистикой с 1998 года, так и пользовательский контент — блоги и комментарии. Одни только посты в блогах набирают по 10 миллионов просмотров и комментариев в месяц и занимают больше 4 ТБ на серверах компании.
Сравнение объёмов данных. Синие столбцы — материалы редакции, красные — пользовательский контент.
Как устроен трафик Sports.ru
В спокойные месяцы без пиковой нагрузки на площадки Sports.ru заходит 30 миллионов человек, в основном из России и стран СНГ. Из них около 20 миллионов в месяц просматривают сайты и 8 миллионов подписаны на каналы Sports.ru в соцсетях.
Большую часть времени посещаемость на сайте стабильная, но во время крупных инфоповодов число посетителей резко увеличивается. Такими событиями могут стать чемпионаты мира по футболу, Евро, Олимпиады и другие события.
Во время Олимпиад нагрузка обычно высокая, но ровная от начала до конца соревнований. А вот во время футбольных соревнований она становится пиковой. И если сначала нагрузка повышается плавно, то во время голов или других знаковых событий она может вырастать с 10 000 до 50 000 запросов в секунду. Активность на сайте может резко вырасти за 10 минут, и, если система не выдержит нагрузку, посетители начнут уходить с сайта.
Посещаемость растёт скачкообразно и во время обычных матчей, если возникает новостной повод. Таким поводом, например, стала произвольная программа у фигуристок на Зимней Олимпиаде 2022 года с выступлениями Анны Щербаковой, Камиллы Валиевой и Александры Трусовой.
Сравнение нагрузки. Первый график: 17 февраля, во время произвольной программы фигуристок на Зимней Олимпиаде 2022 года. Второй график: 1 марта, будни после окончания Олимпиады.
Как прогнозируем нагрузку
Обычно крупные соревнования проходят каждые два года. Раз в два года проходит Чемпионат мира или чемпионат Европы по футболу — самые большие по охвату события в футболе для России. В эти же годы проводятся Олимпиады — зимняя и летняя.
Мы знаем, когда начинаются и заканчиваются матчи, и можем подготовиться к пику нагрузки заранее. Примерно за месяц начинаем наращивать производительность: добавляем реплики для баз данных и ноды для Kubernetes, увеличиваем количество инстансов сервисов и проверяем работоспособность системы с помощью нагрузочного тестирования.
Оборудование всегда закупалось так, чтобы можно было обеспечить даже десятикратное увеличение нагрузки. В любую секунду матча могут резко понадобиться дополнительные ресурсы, чтобы отдавать пользователям информацию без задержек.
При расчёте нужного объёма мощностей мы учитываем ежегодный прирост пользователей и другие факторы. Если во время соревнований поступало 30 000 запросов в секунду, то в следующем году нужно обеспечить стабильное время ответа уже для 40 000 запросов. Но на всякий случай мы готовим инфраструктуру, которая бы справилась и с 60 000 запросов в секунду.
Зачем нам облако
Проблему с высокой нагрузкой мы решали с помощью резервирования собственной физической инфраструктуры. Но большую часть времени оборудование простаивало из-за избыточного резервирования для пиковых нагрузок. С облаком резервированием можно управлять динамически.
Поддержка большого объёма данных требует полноценной разработки. Сейчас в ней участвует несколько направлений: фронтенд, бэкенд, аналитика, DevOps и тестирование. Каждому инженеру нужно собственное окружение в виде отдельных виртуальных машин. Таких ВМ несколько десятков, и на момент миграции они занимали более 10 железных серверов. При этом виртуальные машины используются разработчиками не постоянно. В нерабочее время ресурсы простаивали.
Чтобы гибко управлять инфраструктурой и масштабироваться, в 2022 году мы начали переносить среду разработки в Yandex Cloud.
Важно было найти надёжное облако, которое может гарантировать отказоустойчивость и предлагает большое количество инструментов и сервисов. Чтобы наладить систему с гибким масштабированием ресурсов, нужно было развитое IaC-управление с поддержкой Terraform. При этом мы искали и возможности автоматического масштабирования мощностей, чтобы выдерживать резкое увеличение нагрузки. Всем этим требованиям соответствовал Yandex Cloud.
Во время переезда для нас возникли сложности из-за специфики работы с облачными системами. Стало понятно, что переносить инфраструктуру с помощью простого копирования исходной конфигурации может быть невыгодно и неудобно. Чтобы сделать свою модель более эффективной, мы предварительно продумали новую конфигурацию инфраструктуры.
Yandex Cloud довольно быстро развивается, и выбранные подходы могут становиться неактуальными. Чтобы использовать только актуальные технологии, наша команда регулярно пересматривает выбранные решения и используемые технологии.
Как устроена работа с Yandex Cloud
В текущей итерации мы перевезли в облако часть сервисов, среды разработки, часть продакшен-серверов и данных. Чтобы связать облачную и физическую инфраструктуру, использовали Yandex Cloud Interconnect.
Среду разработки Sports.ru развернули на 30 виртуальных машинах Yandex Compute Cloud. Все они прерываемые: запускаются по требованию и работают ограниченное время. Для запуска и остановки ВМ использовали Yandex Cloud Functions и чат-бот. Благодаря такой схеме работы общее время использования машин сократилось в два раза.
Данные с текстом и фотографиями разместили в специализированном хранилище Yandex Object Storage и подключили сервис Yandex Cloud CDN. За счёт работы с CDN ускорилась доставка данных посетителям сайта.
Схема работы сервисов, использующих CDN и Object Storage
При работе с облаком у нас появилась возможность использовать более актуальные процессоры — в результате улучшилась общая производительность системы и повысилась скорость передачи данных. Вне периодов пиковых нагрузок для разработки используются 30 ядер, а не 120, как было в физической инфраструктуре. А общее количество ядер, используемых для работы всех остальных виртуальных машин, приближается к 500. При этом расходы на поддержание среды разработки уменьшились более чем в три раза. Кроме того, переход в Yandex Cloud позволил повысить отказоустойчивость работы системы.
Что будем делать дальше
Мы продолжим переносить в облако сервисы портала Sports.ru и в ближайшее время будем оптимизировать их работу. В дальнейшем перенесём в Yandex Cloud все сервисы портала.
Также в планах увеличивать производительность продукта и переключаться на более свежие версии процессоров.
Улучшим работу с аналитикой: чтобы ускорить обработку аналитических данных, подключимся к облачному сервису Yandex DataLens. Это поможет повысить качество рекомендаций в персональных лентах пользователей и сделать премодерацию комментариев более точной.
Также наша команда рассматривает GPU-вычисления и YandexGPT для создания автоматических публикаций на сайте.
Подписывайтесь на Telegram-канал Yandex Cloud, чтобы узнавать еще больше новостей и историй об IT и бизнесе.
Другие истории наших партнеров и клиентов, которые активно читают наши подписчики: