38
Михаил Табунов HDCONF HDCONF «Аналитическая платформа на несколько миллиардов событий в месяц» @chainslash

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

Embed Size (px)

DESCRIPTION

Доклад про: – развитие архитектуры этой системы, как менялись и как будут меняться требования к такого рода системам – анализ подходящих под эту систему БД, с их проблемами, и опытом реальной эксплуатации – почему мы остановились на MongoDB, со всеми минусами и плюсами – немного про команду, трудозатраты и поддержку – как мы используем эту систему и как она помогает растить наши продукты

Citation preview

Page 1: Михаил Табунов, Аналитическая платформа на несколько миллиардов событий в месяц

Михаил Табунов

HDCONFHDCONF

«Аналитическая платформа на несколько миллиардов событий в месяц»

@chainslash

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": [{…},{…}]!

}

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 новых событий в секунду

- 1 месяц ~ 600ГБ данных в Mongo

Page 33: Михаил Табунов, Аналитическая платформа на несколько миллиардов событий в месяц

Веб фронтэнд

Page 34: Михаил Табунов, Аналитическая платформа на несколько миллиардов событий в месяц

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

- Сколько у нас загрузок плеера в украине вчера?

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

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

Page 35: Михаил Табунов, Аналитическая платформа на несколько миллиардов событий в месяц

Что плохо!

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

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

- Mongo 16MB aggregation limit - Задержка в три минуты (иногда мешает)

Page 36: Михаил Табунов, Аналитическая платформа на несколько миллиардов событий в месяц

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

- Backend: один я парттайм, очень редко что-то ломается

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

Page 37: Михаил Табунов, Аналитическая платформа на несколько миллиардов событий в месяц

Планы

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

Page 38: Михаил Табунов, Аналитическая платформа на несколько миллиардов событий в месяц

coub.com