Сеть экономит 21 000 $ в год на системе управления рекламой

Кейс смены языка PHP на Go

Сеть экономит 21 000 $ в год на системе управления рекламой

Сеть отвечает за показатели рекламы сервиса с развлекательным контентом, для этого она использует разные решения, в том числе систему управления рекламой Orbitsoft.

Мы решили повысить производительность системы и при этом снизить расходы на ее обслуживание и развитие. Одно из решений — смена языка на Gо. Рассказываем, как решали задачу и что из этого вышло.

Коротко о проекте

  • 01
    Клиент

    Сеть, которая управляет рекламой сервиса с развлекательным контентом

  • 02
    Бизнес-задачи

    Снизить расходы на серверы для обслуживания системы управления рекламой

    Сэкономить ресурсы для обновления системы

    Повысить производительность

    Снизить время обработки запросов на показ рекламы

  • 03
    Решение

    Сменить язык с PHP на Go

  • 04
    Результаты

    ~ 21 600 $ — экономия на обслуживании системы в год

    150 миллисекунд на отклик вместо 250

    3 сервера вместо 6 для показа рекламы

Рост показов с 30 млн в сутки до 800 млн

Сеть отвечает за эффективность рекламы, которую показывает сервис с развлекательным контентом. Мы работаем с ней 11 лет.

Для сети разработали систему управления и показа рекламы, ее можно разделить на три большие части:

  • панель управления, где работают рекламодатели и владельцы рекламных площадок;
  • набор сервисов, которые отвечают за показ рекламы;
  • служебные инструменты.

Нагрузка на систему постоянно растет. Когда мы только стартовали, у сервиса было от 20 до 30 млн рекламы в сутки, через год — 100 млн, а в начале 2021 года — 800 млн. Чтобы обеспечивать максимальную работоспособность системы, мы регулярно обновляем процессы, внутренние решения и все, что помогает сети и сервису больше зарабатывать на рекламе.

Проблема: ограничение языка PHP и высокая стоимость обслуживания системы

До 2020 года система для управления рекламой работала на языке PHP 5.6. Мы выбрали PHP для экономии ресурсов заказчиков. Например, стоимость разработки и услуг специалистов для PHP ниже, чем для Javа и C++. Доработка системы на этом языке требует меньше времени, чем на том же Javа.

Дорогое обслуживание. Какое-то время система справлялась с задачами, но с ростом нагрузки на нее появились проблемы. Первая — обслуживание стало дороже и сложнее.

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

Недостаточная скорость отклика. Запрос и обработка рекламы занимает какое-то время, и если это происходит слишком долго, рекламная сеть рискует репутацией и доходами.

Допустим, рекламный баннер расположен вверху страницы. Если система для управления рекламой медленно отвечает, на сайте не сразу появится баннер. И пока система реагирует, пользователь проскроллит страницу и уйдет без рекламы.

Формально рекламу показали, поэтому рекламодатель должен платить. На деле он платит за воздух, а такое никому не нравится.

Низкая скорость отклика влияет на отношения с партнерами. Если система долго отвечает, сайты медленнее загружаются, а это снижает доходы. Скорее всего, партнер выберет другую рекламную сеть.

От откликов зависит стоимость обслуживания системы. Чем быстрее система обрабатывает один запрос, тем быстрее освобождаются серверные ресурсы для обработки следующего запроса, поэтому на одном и тот же железе можно обрабатывать больше запросов. Для заказчика это экономия на серверах и обслуживании.

Технический блок: показатели системы на PHP

6 серверов, без учета хранилищ.

Потребление в пиковые часы: CPU — на уровне 75%, RAM — 90%.

Отклик за 250 мс.

Конфигурация серверов: Dual Hexa-core Xeon E5−2620 v3 2.4 GHz 48.00 GB RAM 2x SSD 256 GB.

Решение: перейти с языка PHP на Go

За 11 лет работы мы максимально оптимизировали систему, поэтому единственным способом увеличить производительность было сменить язык. Мы рассматривали Go и Java, в работе с обоими языками у нас есть опыт и знания, но остановились на Go. По нашей оценке, так выгоднее и проще для заказчика.

Мы проанализировали особенности языков и выбрали Go: он поможет увеличить производительность, при этом заказчик будет меньше платить за обслуживание системы

Кроме смены платформы мы реализовали еще несколько изменений:

  • отказались от монолитного приложения и перешли к микросервисной архитектуре;
  • внедрили полноценный CI/CD;
  • обеспечили высокое покрытие кода unit и интеграционными тестами;
  • разработали скрипты для автоматического развертывания обновлений.

Благодаря этому команда может отдельно масштабировать каждый компонент, быстрее разворачивать обновления и экономить ресурсы серверов. Все это тоже помогает экономить бюджет заказчика и повышает эффективность рекламы.

При разработке и запуске новой системы мы не отключали действующие сервера и систему, поэтому заказчик избежал простоев: все работало как обычно. Для этого команда последовательно выносила функции в отдельные сервисы и уже их запускала.

Процесс: выделяли компоненты из монолитной структуры и выводили в отдельные сервисы

  • Анализ
    • Состояние кода
    • Наличие зависимостей
  • Подготовка
    • План по выделению функции компонента в отдельный сервис
  • Разработка
  • Тестирование
    • Автоматизированное
    • Нагрузочное
  • Оптимизация узких мест
  • Разработка и запуск
    • Скрипты для автоматического развертывания сервиса
    • Внедрение сервиса и мониторинг показателей работы

Результаты: сократили расходы заказчика и ускорили отклик

Перед обновлением системы мы договорились с заказчиком о двух задачах: снизить стоимость обслуживания системы и добиться лучших показателей для закупки на аукционе. Вот чего мы достигли.

~ 21 600 $ 3 сервера 150 мс
Экономия на обслуживании системы в годВместо 6 для показа рекламыСкорость отклика вместо 250 мс

Проект занял 8 месяцев. За это время мы решали текущие задачи заказчика как постоянная внешняя команда и полностью перестроили систему.

Технический блок проекта

Технологии:

  • язык: Go 1.13;
  • протокол взаимодействия сервисов: GRPC;
  • Service Discovery: Consul;
  • сбор метрик и мониторинг: Prometheus;
  • CI/CD: Bamboo;
  • развертывание: Ansible.

Влияние смены языка
После того как мы переписали все компоненты сервера на Go, показатели нагрузки упали до значений:

  • CPU — 30%;
  • RAM — 40%.

Что еще изменили кроме языка:

  • отказались от монолитного приложения и перешли к микросервисной архитектуре;
  • внедрили полноценный CI/CD;
  • обеспечили высокое покрытие кода unit и интеграционными тестами;
  • разработали скрипты для автоматического развертывания обновлений.

В чем бы вы ни нуждались, мы можем помочь!

Расскажите нам, с какими проблемами вы сталкиваетесь в своем бизнесе. Мы с нетерпением ждем вашего ответа.

Получите ответ по смс

Ваше сообщение успешно отправлено!
Представьтесь пожалуйста
Укажите номер, на который придет ответ
Нажимая на кнопку, вы даете согласие
на обработку персональных данных.