39
Как мы строили аналитическую платформу на несколько миллиардов событии в месяц Михаил Табунов Coub

Как мы строили аналитическую платформу на несколько миллиардов событии в месяц

Embed Size (px)

DESCRIPTION

Слайды с highload2014

Citation preview

Page 1: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц

Как мы строили аналитическую платформу на несколько миллиардов событии в месяцМихаил ТабуновCoub

Page 2: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц
Page 3: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц

Что такое Coub

- Сервис про короткие зацикленные ролики

- 50M MAU - 400M просмотров

Page 4: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц

Что такое Coub

Page 5: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц

Что такое события

{

"type": "web_timeline_page_loaded",

"timestamp": "2014-09-09T09:15:00Z",

"ip": "91.203.67.55",

"page_number": 1,

"timeline_type": "profile"

}

Page 6: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц

События

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

- Четыре основных клиента: Web сайт, Flash Player, iOS и Android.

Page 7: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц

Клиенты

- Base64 транспорт - Batch отправка

Page 8: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц

Зачем это нужно

- Самая честная статистика, с доступом к сырым данным

- Для анализа и определения проблем компании

- Для анализа поведения пользователей в продуктах

Page 9: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц

Готовые решения

- Дорого на больших объемах (> 10K$) - Нет доверия к алгоритмам подсчета - Трудно работать с сырыми данными - Быстро и просто

Page 10: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц

Пишем свое

- Непредсказуемый результат: вдруг не заработает

- Неясные затраты - Покрывает абсолютно все возможные потребности в анализе данных

Page 11: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц

Требования

- Сделать что-то быстро и просто - Иметь возможность делать простые счетчики: считать количество событий какого-то типа

- Делать примитивную аналитику (фильтры, distinct) - Если ничего не выйдет - не страшно

Page 12: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц

Архитектура

Log CollectorNGINX Log

Storage

HTTP GET /rec.json?data=XXX

ces.coub.com

Page 13: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц

Архитектура

Log Storage

ces.coub.com

PostgresRuby worker

Page 14: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц

Как хранятся данные

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: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц

Старт эксплуатации

- От первой строчки до старта в продакшн - 2 недели

- Идея рабочая, пользоваться можно - Наконец появились требования и понимание что не так

Page 16: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц

Проблемы

- Медленная аналитика (120-180 секунд на запрос)

- Ненадежно (одна машина, ненадежный storage)

- Не масштабируемо (502, tcpconns, etc)

Page 17: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц

Требования v2

- Данные важны - потерять нельзя ни в коем случае

- Latency системы - не более 5 минут - Анализировать так быстро, как можем - Строить сложные группировки и нетипичные отчеты

Page 18: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц

Запись и хранение логов

Page 19: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц

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: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц

Log Fetching

AWS S3 Log Fetcher

Analysis DB

Solution

Web Frontend

Пользователи (Аналитики)

Page 21: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц

Чуть-чуть про node.js

Page 22: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц

Frontend логика- Добавляем ip, страну и всю meta через GeoIP (MaxMind)

- Ставим куки - ces_session_last_visit - ces_session_visit_num - ces_session_visit_page - ces_seswion_total_pageviews

Page 23: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц

Анализ логов

Page 24: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц

Что рассматривали

- HADOOP (+ Hive) - AWS Redshift - HP Vertica - Druid - Mongo - PG + hStore

Page 25: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц

Как выбирали

- Скорость работы - Простота эксплуатации:

- Просто поддерживать (комьюнити, узнаваемость)

- Понятно хранит данные на диске

Page 26: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц

Простота Скорость Сумма

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: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц

MongoDB

- Простая и понятная архитектура - Сильное комьюнити, на любой вопрос есть ответ

- Большой инструментарий для аналитики - Не навязывает какую-то определенную структуру данных

Page 28: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц

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: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц

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: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц

MongoDB

- 101 тысяча документов за день. - 3 млн в месяц - Поминутное хранение событий - Быстро делает примитивные агрегаты

- upsert для загрузки

Page 31: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц

Железо, нагрузки

- Xeon E5 6 cores - 128GB RAM - 4TB RAID - 9 mongo nodes на машину

2X

Page 32: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц

Железо, нагрузки

- 40 млн событий в день, 1.2 млрд в месяц - 750-1250 новых событий в секунду - ~8 млн объектов в коллекции - 1 месяц ~ 600ГБ данных в Mongo

Page 33: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц

Веб фронтэнд

Page 34: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц

Лучшая аналитика - Excel

Page 35: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц

Юзкейсы и скорость работы

- Сколько у нас загрузок плеера в украине вчера? - Интеграция аналитики в продукт - Куда пошли пользователи из фейсбука, попавшие на страницу коба?

- Как часто в неделю люди пользуются лентой?

Page 36: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц

Что плохо

- Когда данные не в памяти, все очень очень медленно

- Не для всех отчетов такая структура данных годится

- Mongo не может делать большие агрегаты в памяти (16MB limit)

Page 37: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц

Команда и цена

- Backend: один я парттайм - Разработчики клиентов (Android, iOS) - 1100$ железо, трафик - 300$/месяц Amazon S3

Page 38: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц

Планы

- Продуктовые Алерты - Real Realtime - Интеграция с Google Docs - Больше отчетов и user friendly

Page 39: Как мы строили аналитическую платформу на несколько миллиардов событии в месяц

coub.com