Как мы строили аналитическую платформу на несколько...
DESCRIPTION
Слайды с highload2014TRANSCRIPT
![Page 1: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц](https://reader034.vdocuments.us/reader034/viewer/2022042614/559b887d1a28ab62158b4616/html5/thumbnails/1.jpg)
Как мы строили аналитическую платформу на несколько миллиардов событии в месяцМихаил ТабуновCoub
![Page 2: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц](https://reader034.vdocuments.us/reader034/viewer/2022042614/559b887d1a28ab62158b4616/html5/thumbnails/2.jpg)
![Page 3: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц](https://reader034.vdocuments.us/reader034/viewer/2022042614/559b887d1a28ab62158b4616/html5/thumbnails/3.jpg)
Что такое Coub
- Сервис про короткие зацикленные ролики
- 50M MAU - 400M просмотров
![Page 4: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц](https://reader034.vdocuments.us/reader034/viewer/2022042614/559b887d1a28ab62158b4616/html5/thumbnails/4.jpg)
Что такое Coub
![Page 5: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц](https://reader034.vdocuments.us/reader034/viewer/2022042614/559b887d1a28ab62158b4616/html5/thumbnails/5.jpg)
Что такое события
{
"type": "web_timeline_page_loaded",
"timestamp": "2014-09-09T09:15:00Z",
"ip": "91.203.67.55",
"page_number": 1,
"timeline_type": "profile"
}
![Page 6: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц](https://reader034.vdocuments.us/reader034/viewer/2022042614/559b887d1a28ab62158b4616/html5/thumbnails/6.jpg)
События
- Нажал на кнопку - событие отправилось - У всех разная структура данных, трудно выделить какую-то четкую схему
- Четыре основных клиента: Web сайт, Flash Player, iOS и Android.
![Page 7: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц](https://reader034.vdocuments.us/reader034/viewer/2022042614/559b887d1a28ab62158b4616/html5/thumbnails/7.jpg)
Клиенты
- Base64 транспорт - Batch отправка
![Page 8: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц](https://reader034.vdocuments.us/reader034/viewer/2022042614/559b887d1a28ab62158b4616/html5/thumbnails/8.jpg)
Зачем это нужно
- Самая честная статистика, с доступом к сырым данным
- Для анализа и определения проблем компании
- Для анализа поведения пользователей в продуктах
![Page 9: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц](https://reader034.vdocuments.us/reader034/viewer/2022042614/559b887d1a28ab62158b4616/html5/thumbnails/9.jpg)
Готовые решения
- Дорого на больших объемах (> 10K$) - Нет доверия к алгоритмам подсчета - Трудно работать с сырыми данными - Быстро и просто
![Page 10: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц](https://reader034.vdocuments.us/reader034/viewer/2022042614/559b887d1a28ab62158b4616/html5/thumbnails/10.jpg)
Пишем свое
- Непредсказуемый результат: вдруг не заработает
- Неясные затраты - Покрывает абсолютно все возможные потребности в анализе данных
![Page 11: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц](https://reader034.vdocuments.us/reader034/viewer/2022042614/559b887d1a28ab62158b4616/html5/thumbnails/11.jpg)
Требования
- Сделать что-то быстро и просто - Иметь возможность делать простые счетчики: считать количество событий какого-то типа
- Делать примитивную аналитику (фильтры, distinct) - Если ничего не выйдет - не страшно
![Page 12: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц](https://reader034.vdocuments.us/reader034/viewer/2022042614/559b887d1a28ab62158b4616/html5/thumbnails/12.jpg)
Архитектура
Log CollectorNGINX Log
Storage
HTTP GET /rec.json?data=XXX
ces.coub.com
![Page 14: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц](https://reader034.vdocuments.us/reader034/viewer/2022042614/559b887d1a28ab62158b4616/html5/thumbnails/14.jpg)
Как хранятся данные
CREATE TABLE events_2014_04_18 (
type character varying(255),
datetime time without time zone,
data hstore
);
CREATE INDEX index_events_2014_04_18_on_type ON events_2014_04_18 USING btree (type);
![Page 15: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц](https://reader034.vdocuments.us/reader034/viewer/2022042614/559b887d1a28ab62158b4616/html5/thumbnails/15.jpg)
Старт эксплуатации
- От первой строчки до старта в продакшн - 2 недели
- Идея рабочая, пользоваться можно - Наконец появились требования и понимание что не так
![Page 16: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц](https://reader034.vdocuments.us/reader034/viewer/2022042614/559b887d1a28ab62158b4616/html5/thumbnails/16.jpg)
Проблемы
- Медленная аналитика (120-180 секунд на запрос)
- Ненадежно (одна машина, ненадежный storage)
- Не масштабируемо (502, tcpconns, etc)
![Page 17: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц](https://reader034.vdocuments.us/reader034/viewer/2022042614/559b887d1a28ab62158b4616/html5/thumbnails/17.jpg)
Требования v2
- Данные важны - потерять нельзя ни в коем случае
- Latency системы - не более 5 минут - Анализировать так быстро, как можем - Строить сложные группировки и нетипичные отчеты
![Page 18: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц](https://reader034.vdocuments.us/reader034/viewer/2022042614/559b887d1a28ab62158b4616/html5/thumbnails/18.jpg)
Запись и хранение логов
![Page 19: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц](https://reader034.vdocuments.us/reader034/viewer/2022042614/559b887d1a28ab62158b4616/html5/thumbnails/19.jpg)
Frontends
Log Collector & Log UploaderNGINX
HTTP GET /rec.json?data=XXX
AWS S3
f01.ces.coub.com; f02.ces.coub.com; f03.ces.coub.com
![Page 20: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц](https://reader034.vdocuments.us/reader034/viewer/2022042614/559b887d1a28ab62158b4616/html5/thumbnails/20.jpg)
Log Fetching
AWS S3 Log Fetcher
Analysis DB
Solution
Web Frontend
Пользователи (Аналитики)
![Page 21: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц](https://reader034.vdocuments.us/reader034/viewer/2022042614/559b887d1a28ab62158b4616/html5/thumbnails/21.jpg)
Чуть-чуть про node.js
![Page 22: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц](https://reader034.vdocuments.us/reader034/viewer/2022042614/559b887d1a28ab62158b4616/html5/thumbnails/22.jpg)
Frontend логика- Добавляем ip, страну и всю meta через GeoIP (MaxMind)
- Ставим куки - ces_session_last_visit - ces_session_visit_num - ces_session_visit_page - ces_seswion_total_pageviews
![Page 23: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц](https://reader034.vdocuments.us/reader034/viewer/2022042614/559b887d1a28ab62158b4616/html5/thumbnails/23.jpg)
Анализ логов
![Page 24: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц](https://reader034.vdocuments.us/reader034/viewer/2022042614/559b887d1a28ab62158b4616/html5/thumbnails/24.jpg)
Что рассматривали
- HADOOP (+ Hive) - AWS Redshift - HP Vertica - Druid - Mongo - PG + hStore
![Page 25: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц](https://reader034.vdocuments.us/reader034/viewer/2022042614/559b887d1a28ab62158b4616/html5/thumbnails/25.jpg)
Как выбирали
- Скорость работы - Простота эксплуатации:
- Просто поддерживать (комьюнити, узнаваемость)
- Понятно хранит данные на диске
![Page 26: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц](https://reader034.vdocuments.us/reader034/viewer/2022042614/559b887d1a28ab62158b4616/html5/thumbnails/26.jpg)
Простота Скорость Сумма
Hadoop, Hive 1 2 3
Redshift 3 5 8
Vertica 2 5 7
Druid 1 5 6
PG 4 5 9
Mongo 5 5 10
![Page 27: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц](https://reader034.vdocuments.us/reader034/viewer/2022042614/559b887d1a28ab62158b4616/html5/thumbnails/27.jpg)
MongoDB
- Простая и понятная архитектура - Сильное комьюнити, на любой вопрос есть ответ
- Большой инструментарий для аналитики - Не навязывает какую-то определенную структуру данных
![Page 28: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц](https://reader034.vdocuments.us/reader034/viewer/2022042614/559b887d1a28ab62158b4616/html5/thumbnails/28.jpg)
MongoDB: структура хранения[
{
"type": "web_timeline_page_loaded",
"timestamp": "2014-09-09T09:15:00Z",
},
{
"type": “fp_player_started”,
"timestamp": "2014-09-10T09:15:00Z",
},
{
"type": "fp_player_finished",
"timestamp": "2014-09-10T09:15:00Z",
}
]
- Тормозит пропорционально количеству событий
- Каждый запрос - аггрегация
![Page 29: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц](https://reader034.vdocuments.us/reader034/viewer/2022042614/559b887d1a28ab62158b4616/html5/thumbnails/29.jpg)
MongoDB: структура хранения
{
"_id": {"$oid": "5408881ef7ca2f7995415b36"},
"event_type": "ios_editor_music_choosed",
"is_full": false,
"timestamp_minute": "2014-09-04T15:00:00Z",
"events": [{…},{…}],
“events_count": 2
}
![Page 30: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц](https://reader034.vdocuments.us/reader034/viewer/2022042614/559b887d1a28ab62158b4616/html5/thumbnails/30.jpg)
MongoDB
- 101 тысяча документов за день. - 3 млн в месяц - Поминутное хранение событий - Быстро делает примитивные агрегаты
- upsert для загрузки
![Page 31: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц](https://reader034.vdocuments.us/reader034/viewer/2022042614/559b887d1a28ab62158b4616/html5/thumbnails/31.jpg)
Железо, нагрузки
- Xeon E5 6 cores - 128GB RAM - 4TB RAID - 9 mongo nodes на машину
2X
![Page 32: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц](https://reader034.vdocuments.us/reader034/viewer/2022042614/559b887d1a28ab62158b4616/html5/thumbnails/32.jpg)
Железо, нагрузки
- 40 млн событий в день, 1.2 млрд в месяц - 750-1250 новых событий в секунду - ~8 млн объектов в коллекции - 1 месяц ~ 600ГБ данных в Mongo
![Page 33: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц](https://reader034.vdocuments.us/reader034/viewer/2022042614/559b887d1a28ab62158b4616/html5/thumbnails/33.jpg)
Веб фронтэнд
![Page 34: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц](https://reader034.vdocuments.us/reader034/viewer/2022042614/559b887d1a28ab62158b4616/html5/thumbnails/34.jpg)
Лучшая аналитика - Excel
![Page 35: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц](https://reader034.vdocuments.us/reader034/viewer/2022042614/559b887d1a28ab62158b4616/html5/thumbnails/35.jpg)
Юзкейсы и скорость работы
- Сколько у нас загрузок плеера в украине вчера? - Интеграция аналитики в продукт - Куда пошли пользователи из фейсбука, попавшие на страницу коба?
- Как часто в неделю люди пользуются лентой?
![Page 36: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц](https://reader034.vdocuments.us/reader034/viewer/2022042614/559b887d1a28ab62158b4616/html5/thumbnails/36.jpg)
Что плохо
- Когда данные не в памяти, все очень очень медленно
- Не для всех отчетов такая структура данных годится
- Mongo не может делать большие агрегаты в памяти (16MB limit)
![Page 37: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц](https://reader034.vdocuments.us/reader034/viewer/2022042614/559b887d1a28ab62158b4616/html5/thumbnails/37.jpg)
Команда и цена
- Backend: один я парттайм - Разработчики клиентов (Android, iOS) - 1100$ железо, трафик - 300$/месяц Amazon S3
![Page 38: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц](https://reader034.vdocuments.us/reader034/viewer/2022042614/559b887d1a28ab62158b4616/html5/thumbnails/38.jpg)
Планы
- Продуктовые Алерты - Real Realtime - Интеграция с Google Docs - Больше отчетов и user friendly