Как сократить расходы на среду разработки в три раза: опыт Sports.ru

Компания Sports.ru развивает спортивные и киберспортивные медиа. Помимо основного портала, она поддерживает сайд-проекты, сотни мобильных приложений, снимает полнометражные фильмы и ведёт подкасты. Анатолий Безгубов, Head of DevOps Sports.ru, рассказывает, как компания работает с большими данными и зачем ей облака.

Чем мы занимаемся

Сайт Sports.ru был запущен в 1998 году, и тогда это был единственный интернет-ресурс для спортивных фанатов. За 25 лет проект вырос из сайта в полноценную IT-компанию, которая создаёт информационные продукты в области спорта и здоровья. Среди них — сам портал Sports.ru, сайты Бомбардир, Гол.ру и Кибер и мобильные приложения для разных категорий пользователей.

На портале можно найти материалы как со стороны редакции — с новостями, видео, аналитикой и спортивной статистикой с 1998 года, так и пользовательский контент — блоги и комментарии. Одни только посты в блогах набирают по 10 миллионов просмотров и комментариев в месяц и занимают больше 4 ТБ на серверах компании.

<p><i>Сравнение объёмов данных. Синие столбцы — материалы редакции, красные — пользовательский контент.</i></p>

Сравнение объёмов данных. Синие столбцы — материалы редакции, красные — пользовательский контент.

Как устроен трафик Sports.ru

В спокойные месяцы без пиковой нагрузки на площадки Sports.ru заходит 30 миллионов человек, в основном из России и стран СНГ. Из них около 20 миллионов в месяц просматривают сайты и 8 миллионов подписаны на каналы Sports.ru в соцсетях.

Большую часть времени посещаемость на сайте стабильная, но во время крупных инфоповодов число посетителей резко увеличивается. Такими событиями могут стать чемпионаты мира по футболу, Евро, Олимпиады и другие события.

Во время Олимпиад нагрузка обычно высокая, но ровная от начала до конца соревнований. А вот во время футбольных соревнований она становится пиковой. И если сначала нагрузка повышается плавно, то во время голов или других знаковых событий она может вырастать с 10 000 до 50 000 запросов в секунду. Активность на сайте может резко вырасти за 10 минут, и, если система не выдержит нагрузку, посетители начнут уходить с сайта.

Посещаемость растёт скачкообразно и во время обычных матчей, если возникает новостной повод. Таким поводом, например, стала произвольная программа у фигуристок на Зимней Олимпиаде 2022 года с выступлениями Анны Щербаковой, Камиллы Валиевой и Александры Трусовой.

Как сократить расходы на среду разработки в три раза: опыт Sports.ru
<p><i>Сравнение нагрузки. Первый график: 17 февраля, во время произвольной программы фигуристок на Зимней Олимпиаде 2022 года. Второй график: 1 марта, будни после окончания Олимпиады.</i></p>

Сравнение нагрузки. Первый график: 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 ускорилась доставка данных посетителям сайта.

<p><i>Схема работы сервисов, использующих CDN и Object Storage</i></p>

Схема работы сервисов, использующих CDN и Object Storage

При работе с облаком у нас появилась возможность использовать более актуальные процессоры — в результате улучшилась общая производительность системы и повысилась скорость передачи данных. Вне периодов пиковых нагрузок для разработки используются 30 ядер, а не 120, как было в физической инфраструктуре. А общее количество ядер, используемых для работы всех остальных виртуальных машин, приближается к 500. При этом расходы на поддержание среды разработки уменьшились более чем в три раза. Кроме того, переход в Yandex Cloud позволил повысить отказоустойчивость работы системы.

Что будем делать дальше

Мы продолжим переносить в облако сервисы портала Sports.ru и в ближайшее время будем оптимизировать их работу. В дальнейшем перенесём в Yandex Cloud все сервисы портала.

Также в планах увеличивать производительность продукта и переключаться на более свежие версии процессоров.

Улучшим работу с аналитикой: чтобы ускорить обработку аналитических данных, подключимся к облачному сервису Yandex DataLens. Это поможет повысить качество рекомендаций в персональных лентах пользователей и сделать премодерацию комментариев более точной.

Также наша команда рассматривает GPU-вычисления и YandexGPT для создания автоматических публикаций на сайте.

Подписывайтесь на Telegram-канал Yandex Cloud, чтобы узнавать еще больше новостей и историй об IT и бизнесе.

Другие истории наших партнеров и клиентов, которые активно читают наши подписчики:

66
3 комментария

Было бы неплохо увидеть разбивку расходов до и после, чтобы понять в чем облако яндекса действительно помогло сэкономить

Довольно сложно сделать детальную разбивку, иначе мы бы наверное сделали это в самой статье. Дело в том, что очень сильно отличаются стоимость владения и обновления своего железа в сравнении с поминутной тарификацией ресурсов в облаке. Мы очень грубо прикидывали все связанные финансовые метрики, в которые включались покупка и амортизация железных серверов, стоимость расходников(в первую очередь дисков), аренды стойки в ЦОД и прочего. Полученные результаты сравнивались с расходами в облаке, которые также пытаемся оптимизировать по ходу дела. К сожалению, не смогу дать точных цифр, но повторюсь, что при очень грубой оценке мы получили экономию в стоимости для разработческой инфраструктуры примерно в три раза. В основном за счет использования более мощных ядер и включения машин по запросу или расписанию.

2

Здравствуйте! Спасибо за обратную связь. Уже передали ваше пожелание команде :)