- Как начать развивать систему аналитики в компании, не имея армию data-инженеров.
- Как перейти из состояния «я не понимаю какие квадратики на этой схеме нужны для моих задач» и при этом не уйти в R&D на несколько месяцев.
- Как реализовать потоковую обработку данных на PHP (~40К записей в минуту).
- Какие технические решения применяли в нашем решении и какие факторы учитывали в принятии решений.
Презентация с мероприятия https://habr.com/ru/company/tuturu/blog/426059/
3. О чем поговорим
• Зачем строить свою дата платформу
• Архитектура «типового» решения для сбора и обработки данных
• Как построить систему аналитики без штата data-engineer
• Про наш опыт наращивания экспертизы и итеративного
внедрения
4. Какая задача стояла
• Сбор данных о действиях пользователей с «вечным» хранением
• Проводить детальный анализ результатов АБ-тестов
6. Какие решения существуют
• Google Analy+cs, Я.Метрика и т.д.
• Быстрый старт в продуктовой аналитике для проекта
• Семплирование, но можно бороться
• Сложно строить гибкие агрегации
• Сложность анализа доходности
• 5-10% данных терялось
7. Какие решения существуют
• Google Analy+cs, Я.Метрика и т.д.
• Платные SaaS решения
Google Analy+cs 360, Op+mizely, MixPanel, SnowPlow
• Писать в логи или RDBMS
• Платформа для обработки данных
Clickstream, Data-pipeline, Data lake и другие Data*
8. Чего не хватало
• Простоты работы с данными для аналитиков
• Надежная доставка данных
• Валидация
• Контроль потерь
• Анализ действий пользователей по каждой сессии
• Проводить аналитику АБ-тестов на «сырых» данных
• Источника данных для рекомендательной системы
9. Какие решения существуют
• Google Analy+cs, Я.Метрика и т.д.
• Платные SaaS решения
Google Analy+cs 360, Op+mizely, MixPanel, SnowPlow
• Писать в логи или RDBMS
• Платформа для обработки данных
Clickstream, Data-pipeline, Data lake и другие Data*
16. Компоненты платформы обработки данных
• Data WareHouse (DWH)
• Долгосрочное хранилище данных
• Распределенность
• Масштабирование
• Низкие требования к скорости выборок
Примеры: Amazon S3, HDFS, HP Vertica
17. Компоненты платформы обработки данных
• Быстрый доступ к данным
• Гибкие условия выборок
• Источник данных для отчетов
• Доступно ограниченное окно
исторических данных
• Ненормализованные данные
Примеры: MySQL, PostgreSQL, Clickhouse и
пр.
18. Компоненты платформы обработки данных
• Extract, Transform, Load (ETL)
• Валидация
• Обогащение данных
• Сбор метрик о качестве данных
Пример: NiFi, Spark Streaming,
Gobblin и т.д.
19. Компоненты платформы обработки данных
• Высокие требования к скорости
записи
• Резервирование
• Подушка безопасности
Пример: Kafka, RabbitMQ, Redis
и другие *MQ
20. Компоненты платформы обработки данных
Клиентские библиотеки для отправки
данных в API платформы.
Пример: JS-код Яндекс.Метрики,
PHP-клиент для отправки данных в
REST API.
23. О данных
• Цепочки действий пользователей с привязкой к дате
• Вопрос на которые хотим получать ответы:
• Сколько действий совершили за период?
• Сколько уникальных пользователей совершило действие за период?
• Какая конверсия была в воронке продаж?
24. Дополнительные требования к хранилищу
• Получить наиболее универсальное решение
• Возможность получить все действия одного
пользователя или сегмента пользователей
(фасетный поиск)
• Запрос данных о прохождении пользователей по
воронке без выгрузки всех данных
• Простота внедрения и эксплуатации
25. Выбор хранилища
• MySQL или другие RDBMS - сложность в
построении real>me-отчетов, сложно
масштабировать
• Аналитические базы Ver>ca - хорошо, но дорого
• Clickhouse – еще был слишком мал
• Greenplum
• Elas>cSearch
26. Elas%cSearch
• Документно-ориентированное хранилище
• Near Real Time (NRT)
• Распределенное решения для полнотекстового поиска ... а еще
аналитическое хранилище
• Гибкие возможности для партиционирования
• Экосистема kibana, logstash и прочие
• Разработан на базе Lucene и написан на Java
• Free + Open source. Аналоги: Solr, Sphinx
28. Ограничения Elas/cSearch
• Нет транзакций
• Медленная консистентная запись
• Нет контроля связей
• Нет JOINов, в классическом понимании
48. С какими проблемами столкнулись
• Redis уже не хватает, с появлением нескольких точек назначения
• Индекс «распух» и нам пришлось переиндексировать данные
51. С какими проблемами столкнулись
• Redis уже не хватает, с появлением нескольких точек назначения
• Индекс «распух» и нам пришлось переиндексировать данные
• Хранилище без гарантированного SLA, но должно пониматься
быстро
52. Что имеем сейчас
Наша система сбора данных для анализа (ClickStream):
• ~ 7.5TB данных
• 12 млрд. документов
• В среднем 20 т. записей в минуту, бывают пики до 40 т.
(23 млн. в месяц)
• Кластер с данными: 9 node, 8 CPU, 64 RAM, SSD 12 TB
Команда:
• 5 продуктовых команд
• 10+ аналитиков
• 2 data-инженера
53. К чему пришли
• Имеем рабочую платформу для сбора данных
• Прожили на такой платформе ~3 года
• Понимание наших потребностей по работе с данными
• Итеративный подход - работает!
• Любая инфраструктура временная
• Приступили к построению новой версии платформы…