В своем докладе я расскажу о том, как мы перезапускали Рамблер/топ-100, доступных инструментах на рынке и о нашем опыте переезда с архитектуры батч-обсчета данных на обсчет данных в реальном времени. Расскажу об архитектуре двух решений и их компонентах. Кратко обсудим особенности обработки данных с помощью Python в Hive, фундаментальные проблемы хранения агрегатов, кратко рассмотрим преимущества и недостатки альтернативного подхода. Подробно разберем способ обработки меняющихся событий с помощью PySpark, способы работы с различными компонентами системы из PySpark, возникающие при этом проблемы и их решение. Плюс посмотрим на результаты, скорость работы новой системы и некоторые подводные камни.
5. հ-ОБСЧЕТ
• Обсчет раз в сутки
• Hive-скрипты
• Предопределенный набор
агрегатов
• HBase
• Суммирование на стороне
flask
6. ФУНДАМЕНТАЛЬНЫЕ ПРОБЛЕМЫ ХРАНЕНИЯ АГРЕГАТОВ
• Заранее определенные отчеты
• Чтобы добавить отчет нужно
писать код
• Данные для нового отчета
доступны только с момента
добавления отчета
• Комбинаторный взрыв
• Количество данных после
агрегации может быть больше
чем, до агрегации
Подробнее https://goo.gl/pfrRTR
8. ПРОБЛЕМЫ
• Изменяющиеся сущности
• Реалтайм
• Произвольная сегментация
• Скорость работы
• Масштабируемость
• Большое количество
одновременных запросов
10. ОБРАБОТКА ВХОДНЫХ ДАННЫХ, ТРЕБОВАНИЯ
• Механизм хранения сессий
• Механизм потоковой обработки
• Скорость обработки (1 млрд
событий на старте)
• Горизонтальная
масштабируемость
11. БАЗА ДАННЫХ, ТРЕБОВАНИЯ
• Хранение слабоагрегированных сущностей
• Построение отчетов на лету
• Механизм сэмплирования
• Эффективное хранение данных,
сжатие (1.0 - 1.5TB в день на старте)
• Горизонтальное масштабирование
• Склейка / изменение загруженных данных
• Быстрая вставка в базу данных
19. БАЗА ДАННЫХ
•Скорость работы и сжатие
данных
•Хранение
неагрегированных
сущностей и аналитика на
лету
•Горизонтальная
масштабируемость
•Сэмплирование
•Быстрая вставка данных
•Возможность изменения
уже записанных событий
•SQL
20. СИСТЕМА ПОТОКОВОЙ ОБРАБОТКИ ДАННЫХ
• Поддерживается большим
количеством людей
• Удобный механизм
потоковой обработки
данных
• Нативный коннектор к
Kafka
• Есть механизм
тестирования
имитирующий кластер
локально
• Python
25. MERGE TREE
•У каждой строки в базе есть
параметр sign
•Как только приходит новая запись -
мы пишем ее в базу со знаком (+)
•Когда нужно обновить значение -
пишем старое значение со знаком (-)
•И новое значение со знаком (+)
•Движок в конечном итоге удаляет
строки по определенному правилу
27. ГРАБЛИ
• Нет восстановления с
offset’ов из коробки
• Не слишком
информативные логи
• Нет нормального
механизма gracefull
shutdown для наших задач
29. ГРАБЛИ
•Нет автоматизации DDL
для кластера
•Большое количество
недокументированных
функций
•Слабо автоматизирована
работа с репликами и
шардами
•Партиционирование только
по месяцам
32. ВПЕЧАТЛЕНИЯ
•Kafka - не напрягается
•Spark - работает
достаточно быстро
•ClickHouse - хорошо
сжимает данные
•ClickHouse - держит
нагрузку на запись / чтение