{"id":14277,"url":"\/distributions\/14277\/click?bit=1&hash=17ce698c744183890278e5e72fb5473eaa8dd0a28fac1d357bd91d8537b18c22","title":"\u041e\u0446\u0438\u0444\u0440\u043e\u0432\u0430\u0442\u044c \u043b\u0438\u0442\u0440\u044b \u0431\u0435\u043d\u0437\u0438\u043d\u0430 \u0438\u043b\u0438 \u0437\u043e\u043b\u043e\u0442\u044b\u0435 \u0443\u043a\u0440\u0430\u0448\u0435\u043d\u0438\u044f","buttonText":"\u041a\u0430\u043a?","imageUuid":"771ad34a-9f50-5b0b-bc84-204d36a20025"}

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

Чтобы развивать свой продукт в интернете, бизнес собирает и анализирует данные: какие карточки товаров смотрят пользователи, а какие нет, с каких устройств пользователи заходят на сайт, из каких стран. Рассказываем, как проектируем решения, которые могут обрабатывать большие данные — за апрель наша система обработала 2,4 млрд показов и 408 млн кликов, и все обошлось без сбоев.

Задача бизнеса — повысить конверсию с показа контента

Один из способов заработать для интернет-бизнеса — управлять контентом так, чтобы пользователи как можно чаще совершали целевые действия. Контент в этом случае — общее обозначение, это могут быть:

  • ролики;
  • новости;
  • карточки товаров или услуг;
  • и что угодно еще.

Что будет целевым действием, тоже зависит от бизнеса. В одном случае — просмотр энного количества роликов, в другом — подписка на пробные уроки из рассылки.

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

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

  • собирать статистические отчеты по срезам и метрикам;

  • сравнивать эти же метрики за разные периоды;
  • группировать данные по категориям: странам, городам, типам устройств или времени суток.

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

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

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

Опыт OrbitSoft: как устроена система сбора и анализа данных

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

О проекте. Каждый день рекламная сеть регистрирует события: ставки, которые делают пользователи на аукционах, просмотры рекламы, клики по объявлениям. Чтобы аналитики могли работать с данными, их нужно привести в читаемый формат — обработать и загрузить в программу с понятным интерфейсом.

Нагрузка системы. В апреле 2021 года система рекламной сети обработала:

  • 2,4 млрд показов;
  • 408 млн кликов;
  • 1240 конверсий.

Анализ. Чтобы спроектировать систему, мы изучили тип и объем данных, прогнозируемый рост нагрузки, результат, который нужно получить, и ограничения по бюджету и ресурсам. После этого приступили уже к самой разработке.

Система собирает сырые данные пользователей и преобразует их в читаемый формат в MySQL

Схема работы системы:

  • Рекламная платформа регистрирует события в Apache Kafka.
  • Collector Service следит за очередью событий в Apache Kafka, обогащает информацию о событии дополнительными данными и записывает информацию о событиях в файлы .csv.
  • После завершения записи в файл Collector Service сжимает его и загружает этот файл в HDFS, в специальную директорию для входных данных.
  • Каждые 5 минут Stats Service проверяет наличие новых необработанных файлов в директории входных данных на HDSF и формирует задачу для Apache Hadoop для расчета агрегированной статистики.
  • Apache Hadoop рассчитывает статистику на основании входных данных и записывает полученные результаты в файлы в специальной директории на HDFS.
  • Stats Server забирает результаты расчета статистики с HDFS и экспортирует данные в MySQL.
  • Stats Server перемещает обработанные входные файлы в архив, расположенный также на HDFS. Файлы группируются по дням — это нужно для того, чтобы можно было пересчитать статистику за определенный период, если были какие-то ошибки в скриптах.
Такую систему можно использовать как в железе, так и в облаке

Результаты. Все компоненты архитектуры горизонтально масштабируются и обеспечивают отказоустойчивость.

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

Поделитесь опытом: разрабатывали ли вы высоконагруженые системы?

Олег Белеменко, Разработчик Orbitsoft
0
Комментарии
-3 комментариев
Раскрывать всегда