ݺߣ

ݺߣShare a Scribd company logo
Построение системы аналитики
в условиях agile разработки
Кто я? Что делаю?
О чем поговорим
• Зачем строить свою дата платформу
• Архитектура «типового» решения для сбора и обработки данных
• Как построить систему аналитики без штата data-engineer
• Про наш опыт наращивания экспертизы и итеративного
внедрения
Какая задача стояла
• Сбор данных о действиях пользователей с «вечным» хранением
• Проводить детальный анализ результатов АБ-тестов
Какие решения существуют
• Google Analy+cs, Я.Метрика и т.д.
Какие решения существуют
• Google Analy+cs, Я.Метрика и т.д.
• Быстрый старт в продуктовой аналитике для проекта
• Семплирование, но можно бороться
• Сложно строить гибкие агрегации
• Сложность анализа доходности
• 5-10% данных терялось
Какие решения существуют
• Google Analy+cs, Я.Метрика и т.д.
• Платные SaaS решения
Google Analy+cs 360, Op+mizely, MixPanel, SnowPlow
• Писать в логи или RDBMS
• Платформа для обработки данных
Clickstream, Data-pipeline, Data lake и другие Data*
Чего не хватало
• Простоты работы с данными для аналитиков
• Надежная доставка данных
• Валидация
• Контроль потерь
• Анализ действий пользователей по каждой сессии
• Проводить аналитику АБ-тестов на «сырых» данных
• Источника данных для рекомендательной системы
Какие решения существуют
• Google Analy+cs, Я.Метрика и т.д.
• Платные SaaS решения
Google Analy+cs 360, Op+mizely, MixPanel, SnowPlow
• Писать в логи или RDBMS
• Платформа для обработки данных
Clickstream, Data-pipeline, Data lake и другие Data*
А как делают другие?
Типовая платформа для обработки данных
Или такая….
Построение системы аналитики
С чего начать?
Компоненты платформы обработки данных
Компоненты платформы обработки данных
• Data WareHouse (DWH)
• Долгосрочное хранилище данных
• Распределенность
• Масштабирование
• Низкие требования к скорости выборок
Примеры: Amazon S3, HDFS, HP Vertica
Компоненты платформы обработки данных
• Быстрый доступ к данным
• Гибкие условия выборок
• Источник данных для отчетов
• Доступно ограниченное окно
исторических данных
• Ненормализованные данные
Примеры: MySQL, PostgreSQL, Clickhouse и
пр.
Компоненты платформы обработки данных
• Extract, Transform, Load (ETL)
• Валидация
• Обогащение данных
• Сбор метрик о качестве данных
Пример: NiFi, Spark Streaming,
Gobblin и т.д.
Компоненты платформы обработки данных
• Высокие требования к скорости
записи
• Резервирование
• Подушка безопасности
Пример: Kafka, RabbitMQ, Redis
и другие *MQ
Компоненты платформы обработки данных
Клиентские библиотеки для отправки
данных в API платформы.
Пример: JS-код Яндекс.Метрики,
PHP-клиент для отправки данных в
REST API.
Без чего не может существовать система?
Без хранилища!
О данных
• Цепочки действий пользователей с привязкой к дате
• Вопрос на которые хотим получать ответы:
• Сколько действий совершили за период?
• Сколько уникальных пользователей совершило действие за период?
• Какая конверсия была в воронке продаж?
Дополнительные требования к хранилищу
• Получить наиболее универсальное решение
• Возможность получить все действия одного
пользователя или сегмента пользователей
(фасетный поиск)
• Запрос данных о прохождении пользователей по
воронке без выгрузки всех данных
• Простота внедрения и эксплуатации
Выбор хранилища
• MySQL или другие RDBMS - сложность в
построении real>me-отчетов, сложно
масштабировать
• Аналитические базы Ver>ca - хорошо, но дорого
• Clickhouse – еще был слишком мал
• Greenplum
• Elas>cSearch
Elas%cSearch
• Документно-ориентированное хранилище
• Near Real Time (NRT)
• Распределенное решения для полнотекстового поиска ... а еще
аналитическое хранилище
• Гибкие возможности для партиционирования
• Экосистема kibana, logstash и прочие
• Разработан на базе Lucene и написан на Java
• Free + Open source. Аналоги: Solr, Sphinx
Построение системы аналитики
Ограничения Elas/cSearch
• Нет транзакций
• Медленная консистентная запись
• Нет контроля связей
• Нет JOINов, в классическом понимании
Хранилище же уже есть, давайте писать!
Осторожно, прототип!
• Подготовка структуры в основном процессе
Осторожно, прототип!
• Подготовка структуры в основном процессе
Осторожно, прототип!
• Подготовка структуры в основном процессе
• … и тут пришли аналитики
Мы знаем что делать…нам нужна очередь!
• RabbitMQ
• Ka)a, *MQ
• Redis
Чем будем «грузить» данные?
• Logstash
• ETL-framework
• Решили задачу на PHP J
Первая тестовая эксплуатация
Построение системы аналитики
Начали получать пользу
Поработаем над надежностью?
Сделали хранилище надежнее
• Кластер из 3-ех нод
• Но есть проблемка…скорость записи упала
больше чем в 2 раза
Ускоряем запись
• Запись через Bulk API – возможны потери
• 3-и бекенда + pcntl_fork
Обновление данных
Частичное изменение документов через script в Update API
Построение системы аналитики
Надежность очереди
• НЕ использовали кластер
• Несколько попыток на подключение
Готовое решение
С какими проблемами столкнулись
• Redis уже не хватает, с появлением нескольких точек назначения
Организация очередей внутри redis
Организация очередей внутри redis
С какими проблемами столкнулись
• Redis уже не хватает, с появлением нескольких точек назначения
• Индекс «распух» и нам пришлось переиндексировать данные
Была такая структура данных
Как сделать правильно
С какими проблемами столкнулись
• Redis уже не хватает, с появлением нескольких точек назначения
• Индекс «распух» и нам пришлось переиндексировать данные
• Хранилище без гарантированного SLA, но должно пониматься
быстро
Что имеем сейчас
Наша система сбора данных для анализа (ClickStream):
• ~ 7.5TB данных
• 12 млрд. документов
• В среднем 20 т. записей в минуту, бывают пики до 40 т.
(23 млн. в месяц)
• Кластер с данными: 9 node, 8 CPU, 64 RAM, SSD 12 TB
Команда:
• 5 продуктовых команд
• 10+ аналитиков
• 2 data-инженера
К чему пришли
• Имеем рабочую платформу для сбора данных
• Прожили на такой платформе ~3 года
• Понимание наших потребностей по работе с данными
• Итеративный подход - работает!
• Любая инфраструктура временная
• Приступили к построению новой версии платформы…
weberdever
weberdever
sereda@tutu.ru
Илья Середа
Спасибо за внимание!
weberdever
weberdever

More Related Content

Построение системы аналитики