SlideShare a Scribd company logo
Михаил Табунов 
HHDDCCOONNFF 
«Аналитическая платформа 
на несколько миллиардов 
событий в месяц» 
@chainslash
Михаил Табунов, Аналитическая платформа на несколько миллиардов событий в месяц
Что такое Coub 
- Сервис про короткие зацикленные 
ролики 
- 50M MAU 
- 400M просмотров
Что такое Coub
Что такое события 
{! 
"type": "web_timeline_page_loaded",! 
"timestamp": "2014-09-09T09:15:00Z",! 
"ip": "91.203.67.55",! 
"page_number": 1,! 
"timeline_type": "profile"! 
}
События 
- Нажал на кнопку - событие отправилось 
- У всех разная структура данных, трудно 
выделить какую-то четкую схему 
- Четыре основных клиента: Web сайт, Flash 
Player, iOS и Android.
Клиенты 
- Base64 транспорт 
- Batch отправка
Зачем это нужно 
- Самая честная статистика, с доступом к 
сырым данным 
- Для анализа и определения проблем 
компании 
- Для анализа поведения пользователей в 
продуктах
Готовые решения 
- Дорого на больших объемах (> 10K$) 
- Нет доверия к алгоритмам подсчета 
- Трудно работать с сырыми данными 
- Быстро и просто
Пишем свое 
- Непредсказуемый результат: вдруг 
не заработает 
- Неясные затраты 
- Покрывает абсолютно все 
возможные потребности в анализе 
данных
Требования 
- Сделать что-то быстро и просто 
- Иметь возможность делать простые счетчики: 
считать количество событий какого-то типа 
- Делать примитивную аналитику (фильтры, distinct) 
- Если ничего не выйдет - не страшно
Архитектура 
Log 
Collector 
NGINX 
Log 
Storage 
HTTP GET ! 
/rec.json?data=XXX 
ces.coub.com
Архитектура 
Log Storage 
ces.coub.com 
Postgres 
Ruby 
worker
Как хранятся данные 
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);!
Старт эксплуатации 
- От первой строчки до старта в 
продакшн - 2 недели 
- Идея рабочая, пользоваться можно 
- Наконец появились требования и 
понимание что не так
Проблемы 
- Медленная аналитика (120-180 
секунд на запрос) 
- Ненадежно (одна машина, 
ненадежный storage) 
- Не масштабируемо (502, tcpconns, 
etc)
Требования v2 
- Данные важны - потерять нельзя ни в коем 
случае 
- Latency системы - не более 5 минут 
- Анализировать так быстро, как можем 
- Строить сложные группировки и нетипичные 
отчеты
Запись и 
хранение 
логов
Frontends 
Log Collector & 
Log Uploader 
NGINX 
HTTP GET ! 
/rec.json?data=XXX 
AWS S3 
f01.ces.coub.com; f02.ces.coub.com; f03.ces.coub.com
Log Fetching 
AWS S3 
Log 
Fetcher 
Analysis 
DB 
Solution 
Web 
Frontend 
Пользователи 
(Аналитики)
Чуть-чуть про node.js 
- Надежно 
- Производительно 
- Очень просто 
- Подходит только для специфичных 
задач
Frontend логика 
- Добавляем ip, страну и всю meta 
через GeoIP (MaxMind) 
- Ставим куки 
- ces_session_last_visit 
- ces_session_visit_num 
- ces_session_visit_page 
- ces_seswion_total_pageviews
Анализ 
логов
Что рассматривали 
- HADOOP (+ Hive) 
- AWS Redshift 
- HP Vertica 
- Druid 
- Mongo 
- PG + hStore
Как выбирали 
- Скорость работы 
- Простота эксплуатации: 
- Просто поддерживать (комьюнити, 
узнаваемость) 
- Понятно хранит данные на диске
Простота Скорость Сумма 
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
MongoDB 
- Простая и понятная архитектура 
- Сильное комьюнити, на любой вопрос 
есть ответ 
- Большой инструментарий для аналитики 
- Не навязывает какую-то определенную 
структуру данных
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",! 
}! 
] 
- Тормозит 
пропорционально 
количеству событий 
- Каждый запрос - 
аггрегация
MongoDB: структура 
хранения 
{! 
"_id": {"$oid": "5408881ef7ca2f7995415b36"},! 
"event_type": "ios_editor_music_choosed",! 
"is_full": false,! 
"timestamp_minute": "2014-09-04T15:00:00Z",! 
"events": [{…},{…}]! 
}
MongoDB 
- 101 тысяча документов за день. 
- 3 млн в месяц 
- Поминутное хранение событий 
- Быстро делает примитивные 
агрегаты 
- upsert для загрузки
Железо, нагрузки 
- Xeon E5 6 cores 
- 128GB RAM 
- 4TB RAID 
- 9 mongo nodes на 
машину 
2X
Железо, нагрузки 
- 40 млн событий в день, 1.2 млрд в 
месяц 
- 750-1250 новых событий в 
секунду 
- 1 месяц ~ 600ГБ данных в Mongo
Веб фронтэнд
Юзкейсы и скорость работы 
- Сколько у нас загрузок плеера в украине 
вчера? 
- Говорят в америке долго грузится! 
- Куда пошли пользователи из фейсбука, 
попавшие на страницу коба? 
- Как часто в неделю люди пользуются лентой? 
- Ответов ждать 5-10 секунд
Что плохо 
! 
- Когда данные не в памяти, все очень 
очень медленно 
- Не всегда такая структура данных 
идеальна 
- Mongo 16MB aggregation limit 
- Задержка в три минуты (иногда мешает)
Команда и цена 
- Backend: один я парттайм, очень редко что- 
то ломается 
- Разработчики клиентов (Android, iOS) 
- 1100$ железо, трафик 
- 300$/месяц Amazon S3
Планы 
- Продуктовые Алерты 
- Real Realtime 
- Интеграция с Google Docs 
- API и глубокая интеграция 
- Больше отчетов и user friendly
coub.com

More Related Content

PDF
Антон Щербаков, Отказоустойчивость на примере aviasales — почему даже если на...
Tanya Denisyuk
 
PDF
Борис Каплуновский, Aviasales.ru
Ontico
 
PDF
Доменно специфичные базы данных и рассылка Aviasales, Борис Каплуновский (Avi...
Ontico
 
PDF
Нагруженный поиск на Sphinx
Roman Pavlushko
 
PPTX
Jinba - frontendconf.ru/2015
Pavel Dovbush
 
PDF
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...
Ontico
 
PDF
Zabbix в Badoo или о чем не пишут в мануале, Илья Аблеев (Badoo)
Badoo Development
 
PPTX
мониторинг производительности Web приложений на python
Slach
 
Антон Щербаков, Отказоустойчивость на примере aviasales — почему даже если на...
Tanya Denisyuk
 
Борис Каплуновский, Aviasales.ru
Ontico
 
Доменно специфичные базы данных и рассылка Aviasales, Борис Каплуновский (Avi...
Ontico
 
Нагруженный поиск на Sphinx
Roman Pavlushko
 
Jinba - frontendconf.ru/2015
Pavel Dovbush
 
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...
Ontico
 
Zabbix в Badoo или о чем не пишут в мануале, Илья Аблеев (Badoo)
Badoo Development
 
мониторинг производительности Web приложений на python
Slach
 

What's hot (20)

PPT
Zabbix v2
Alex Nikitin
 
PDF
Avito Stachka 2012
Roman Pavlushko
 
PPTX
OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...
Ontico
 
PDF
Near-realtime аналитика событий в высоконагруженном проекте
Alexandr Krasheninnikov
 
PDF
Мобильная Яндекс.Почта — Дмитрий Александров
Yandex
 
PPTX
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...
Ontico
 
PDF
Twisted Framework - сетевые приложения в Python
Andrey Smirnov
 
PDF
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
Ontico
 
PPTX
мониторинг производительности приложения на PINBA
Slach
 
PDF
Анатомия веб сервиса (HighLoad-2014)
Andrey Smirnov
 
PPTX
Мониторинг всех слоев web проекта (hl2015)
Nikolay Sivko
 
PPTX
NAS, Predictions, Preloading, Presudo-Isomorphism / Охрименко Алексей (Acronis)
Ontico
 
PDF
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
Ontico
 
PDF
Ровная балансировка нагрузки на фронтенд-кластере
Badoo Development
 
PDF
Доклад Валерия Старынина на DevConf 2014. "StatsCollector, или "Мама! Он и ме...
Badoo Development
 
PPTX
Как обслужить 60 миллионов абонентов, Артем Руфанов (ПЕТЕР-СЕРВИС)
Ontico
 
PDF
AVITO. Решаем проблемы по мере их поступления. Стачка 2013
Roman Pavlushko
 
PDF
Anton Turetckii "What does it take to build a host?"
Fwdays
 
PPTX
«Секретные» технологии инвестиционных банков / Алексей Рагозин (Дойче Банк)
Ontico
 
PDF
Использование Hadoop в Badoo, Валерий Старынин (Badoo)
Ontico
 
Zabbix v2
Alex Nikitin
 
Avito Stachka 2012
Roman Pavlushko
 
OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...
Ontico
 
Near-realtime аналитика событий в высоконагруженном проекте
Alexandr Krasheninnikov
 
Мобильная Яндекс.Почта — Дмитрий Александров
Yandex
 
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...
Ontico
 
Twisted Framework - сетевые приложения в Python
Andrey Smirnov
 
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
Ontico
 
мониторинг производительности приложения на PINBA
Slach
 
Анатомия веб сервиса (HighLoad-2014)
Andrey Smirnov
 
Мониторинг всех слоев web проекта (hl2015)
Nikolay Sivko
 
NAS, Predictions, Preloading, Presudo-Isomorphism / Охрименко Алексей (Acronis)
Ontico
 
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
Ontico
 
Ровная балансировка нагрузки на фронтенд-кластере
Badoo Development
 
Доклад Валерия Старынина на DevConf 2014. "StatsCollector, или "Мама! Он и ме...
Badoo Development
 
Как обслужить 60 миллионов абонентов, Артем Руфанов (ПЕТЕР-СЕРВИС)
Ontico
 
AVITO. Решаем проблемы по мере их поступления. Стачка 2013
Roman Pavlushko
 
Anton Turetckii "What does it take to build a host?"
Fwdays
 
«Секретные» технологии инвестиционных банков / Алексей Рагозин (Дойче Банк)
Ontico
 
Использование Hadoop в Badoo, Валерий Старынин (Badoo)
Ontico
 
Ad

Viewers also liked (20)

PPTX
Кирилл Алешин - Big Data и Lambda архитектура на практике
IT Share
 
PDF
Глубокое погружение в дисковые структуры данных, B-деревья, LSM-деревья и фра...
Ontico
 
PDF
Donatas Mažionis, Building low latency web APIs
Tanya Denisyuk
 
PDF
Артем Маринов "Сегментируем 600 млн. пользователей в режиме реального времени...
Tanya Denisyuk
 
PPTX
Сергей Сверчков "Want to build a secure private cloud for IoT with high avail...
Tanya Denisyuk
 
PDF
Антон Тюрин, Евгений Сафронов, Инфраструктура под Cocaine
Tanya Denisyuk
 
PDF
Кирилл Алешин, Ламбда Архитектура на практике
Tanya Denisyuk
 
PDF
Alvaro Videla, Building a Distributed Data Ingestion System with RabbitMQ
Tanya Denisyuk
 
PDF
Александр Тоболь, Кадры решают все, или стриминг видео в Одноклассниках
Tanya Denisyuk
 
PDF
Сергей Аверин, То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
Tanya Denisyuk
 
PPTX
Борис Тверитнев, Воздержание как практика программирования
Tanya Denisyuk
 
PDF
Максим Барышников, Что такое типовые проблемы нагруженных проектов и как их р...
Tanya Denisyuk
 
PDF
Сергей Аверин "Распространенные ошибки применения баз данных"
Tanya Denisyuk
 
PDF
Николай Сивко "Хорошо поддерживаемое в продакшне приложение"
Tanya Denisyuk
 
PDF
Андрей Дроздов "Создание высокопроизводительных rest api на tarantool"
Tanya Denisyuk
 
PDF
Денис Колошко, Пример нагруженной системы на базе продуктов Microsoft, Amazon...
Tanya Denisyuk
 
PDF
Денис Баталов, Принципы построения высоконагруженных сайтов на платформе АWS
Tanya Denisyuk
 
PDF
Артем Гавриченков "The Dark Side of Things: Distributed Denial of Service Att...
Tanya Denisyuk
 
PDF
Алексей Залесов-«Управление контейнерами в облаках»
Tanya Denisyuk
 
PDF
Максим Барышиков-«WoT: Geographically distributed cluster of clusters»
Tanya Denisyuk
 
Кирилл Алешин - Big Data и Lambda архитектура на практике
IT Share
 
Глубокое погружение в дисковые структуры данных, B-деревья, LSM-деревья и фра...
Ontico
 
Donatas Mažionis, Building low latency web APIs
Tanya Denisyuk
 
Артем Маринов "Сегментируем 600 млн. пользователей в режиме реального времени...
Tanya Denisyuk
 
Сергей Сверчков "Want to build a secure private cloud for IoT with high avail...
Tanya Denisyuk
 
Антон Тюрин, Евгений Сафронов, Инфраструктура под Cocaine
Tanya Denisyuk
 
Кирилл Алешин, Ламбда Архитектура на практике
Tanya Denisyuk
 
Alvaro Videla, Building a Distributed Data Ingestion System with RabbitMQ
Tanya Denisyuk
 
Александр Тоболь, Кадры решают все, или стриминг видео в Одноклассниках
Tanya Denisyuk
 
Сергей Аверин, То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
Tanya Denisyuk
 
Борис Тверитнев, Воздержание как практика программирования
Tanya Denisyuk
 
Максим Барышников, Что такое типовые проблемы нагруженных проектов и как их р...
Tanya Denisyuk
 
Сергей Аверин "Распространенные ошибки применения баз данных"
Tanya Denisyuk
 
Николай Сивко "Хорошо поддерживаемое в продакшне приложение"
Tanya Denisyuk
 
Андрей Дроздов "Создание высокопроизводительных rest api на tarantool"
Tanya Denisyuk
 
Денис Колошко, Пример нагруженной системы на базе продуктов Microsoft, Amazon...
Tanya Denisyuk
 
Денис Баталов, Принципы построения высоконагруженных сайтов на платформе АWS
Tanya Denisyuk
 
Артем Гавриченков "The Dark Side of Things: Distributed Denial of Service Att...
Tanya Denisyuk
 
Алексей Залесов-«Управление контейнерами в облаках»
Tanya Denisyuk
 
Максим Барышиков-«WoT: Geographically distributed cluster of clusters»
Tanya Denisyuk
 
Ad

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

PDF
Как мы строили аналитическую платформу на несколько миллиардов событии в месяц
Mikhail Tabunov
 
PDF
Coub - как мы строили аналитическую платформу на несколько миллиардов событий...
Ontico
 
PDF
Как мы строили аналитическую платформу на несколько миллиардов событии в меся...
Coub
 
PDF
Построение системы аналитики
Илья Середа
 
PDF
IBM Cloudant и Apache CouchDB: NoSQL базы данных эпохи облаков
Maxim Zinal
 
PDF
Про аналитику и серебряные пули
RamblerML
 
PPT
Introduction to MongoDB
Iurii Ogiienko
 
PDF
Всеволод Поляков "История одного мониторинга"
Fwdays
 
PDF
Nosql and Mongodb
Eduard Antsupov
 
PDF
Near-realtime аналитика событий в высоконагруженном проекте
Badoo Development
 
PDF
Near-realtime аналитика событий в высоконагруженном проекте
Yulia Kotova
 
PDF
Near-realtime аналитика событий в высоконагруженном проекте / Александр Краше...
Ontico
 
PDF
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
Alex Chistyakov
 
PDF
Где сегодня использовать ElasticSearch
Илья Середа
 
PPTX
Архитектура Ленты на Одноклассниках
Dmitry Buzdin
 
PPT
Web весна 2012 лекция 6
Technopark
 
PPTX
Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)
Ontico
 
PDF
Переход от монолитной архитектуры к распределенной
Alexander Byndyu
 
PDF
Использование Hadoop в Badoo, Валерий Старынин (Badoo)
Badoo Development
 
PPTX
MongoDB в продакшен - миф или реальность?
Alexey Tokar
 
Как мы строили аналитическую платформу на несколько миллиардов событии в месяц
Mikhail Tabunov
 
Coub - как мы строили аналитическую платформу на несколько миллиардов событий...
Ontico
 
Как мы строили аналитическую платформу на несколько миллиардов событии в меся...
Coub
 
Построение системы аналитики
Илья Середа
 
IBM Cloudant и Apache CouchDB: NoSQL базы данных эпохи облаков
Maxim Zinal
 
Про аналитику и серебряные пули
RamblerML
 
Introduction to MongoDB
Iurii Ogiienko
 
Всеволод Поляков "История одного мониторинга"
Fwdays
 
Nosql and Mongodb
Eduard Antsupov
 
Near-realtime аналитика событий в высоконагруженном проекте
Badoo Development
 
Near-realtime аналитика событий в высоконагруженном проекте
Yulia Kotova
 
Near-realtime аналитика событий в высоконагруженном проекте / Александр Краше...
Ontico
 
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
Alex Chistyakov
 
Где сегодня использовать ElasticSearch
Илья Середа
 
Архитектура Ленты на Одноклассниках
Dmitry Buzdin
 
Web весна 2012 лекция 6
Technopark
 
Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)
Ontico
 
Переход от монолитной архитектуры к распределенной
Alexander Byndyu
 
Использование Hadoop в Badoo, Валерий Старынин (Badoo)
Badoo Development
 
MongoDB в продакшен - миф или реальность?
Alexey Tokar
 

More from Tanya Denisyuk (16)

PDF
Артем Маринов "Сегментируем 600 млн. пользователей в режиме реального времени...
Tanya Denisyuk
 
PDF
Вадим Мадисон "Опыт разработки через микросервисы"
Tanya Denisyuk
 
PDF
Левон Авакян "Архитектура мета игры Wargaming. Глобальная карта 2.0"
Tanya Denisyuk
 
PDF
Дмитрий Хоревич "Cloud native security with UAA \ Как защитить микросервисы с...
Tanya Denisyuk
 
PDF
Алексей Лесовский "Тюнинг Linux для баз данных. "
Tanya Denisyuk
 
PPTX
Александр Краковецкий "Разработка интеллектуальных ботов с помощью Microsoft ...
Tanya Denisyuk
 
PDF
Андрей Светлов-«Делаем своё решение для оптимальной загрузки кластера»
Tanya Denisyuk
 
PDF
Александр Ломов-«Как перестать беспокоиться и начать использовать Cloud Foundry»
Tanya Denisyuk
 
PDF
Левон Авакян-«Эволюция кланов в Wargaming. От веб страницы на танковом портал...
Tanya Denisyuk
 
PDF
Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»
Tanya Denisyuk
 
PPTX
Павел Вейник-«Программирование и лингвистика: как понять язык и как извлечь з...
Tanya Denisyuk
 
PPTX
Михаил Серченя-«Построение отказоустойчивой масштабируемой среды для WEB и бе...
Tanya Denisyuk
 
PPTX
Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...
Tanya Denisyuk
 
PDF
Андрей Федоренчик- «Высоконагруженная система с аналитикой на InfoBright»
Tanya Denisyuk
 
PDF
Роман Иманкулов-«Быстрые и масштабируемые приложения с Sync API»
Tanya Denisyuk
 
PPTX
Дмитрий Дурасов-«Технологии контейнеризации в Windows Server 2016»
Tanya Denisyuk
 
Артем Маринов "Сегментируем 600 млн. пользователей в режиме реального времени...
Tanya Denisyuk
 
Вадим Мадисон "Опыт разработки через микросервисы"
Tanya Denisyuk
 
Левон Авакян "Архитектура мета игры Wargaming. Глобальная карта 2.0"
Tanya Denisyuk
 
Дмитрий Хоревич "Cloud native security with UAA \ Как защитить микросервисы с...
Tanya Denisyuk
 
Алексей Лесовский "Тюнинг Linux для баз данных. "
Tanya Denisyuk
 
Александр Краковецкий "Разработка интеллектуальных ботов с помощью Microsoft ...
Tanya Denisyuk
 
Андрей Светлов-«Делаем своё решение для оптимальной загрузки кластера»
Tanya Denisyuk
 
Александр Ломов-«Как перестать беспокоиться и начать использовать Cloud Foundry»
Tanya Denisyuk
 
Левон Авакян-«Эволюция кланов в Wargaming. От веб страницы на танковом портал...
Tanya Denisyuk
 
Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»
Tanya Denisyuk
 
Павел Вейник-«Программирование и лингвистика: как понять язык и как извлечь з...
Tanya Denisyuk
 
Михаил Серченя-«Построение отказоустойчивой масштабируемой среды для WEB и бе...
Tanya Denisyuk
 
Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...
Tanya Denisyuk
 
Андрей Федоренчик- «Высоконагруженная система с аналитикой на InfoBright»
Tanya Denisyuk
 
Роман Иманкулов-«Быстрые и масштабируемые приложения с Sync API»
Tanya Denisyuk
 
Дмитрий Дурасов-«Технологии контейнеризации в Windows Server 2016»
Tanya Denisyuk
 

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

  • 1. Михаил Табунов HHDDCCOONNFF «Аналитическая платформа на несколько миллиардов событий в месяц» @chainslash
  • 3. Что такое Coub - Сервис про короткие зацикленные ролики - 50M MAU - 400M просмотров
  • 5. Что такое события {! "type": "web_timeline_page_loaded",! "timestamp": "2014-09-09T09:15:00Z",! "ip": "91.203.67.55",! "page_number": 1,! "timeline_type": "profile"! }
  • 6. События - Нажал на кнопку - событие отправилось - У всех разная структура данных, трудно выделить какую-то четкую схему - Четыре основных клиента: Web сайт, Flash Player, iOS и Android.
  • 7. Клиенты - Base64 транспорт - Batch отправка
  • 8. Зачем это нужно - Самая честная статистика, с доступом к сырым данным - Для анализа и определения проблем компании - Для анализа поведения пользователей в продуктах
  • 9. Готовые решения - Дорого на больших объемах (> 10K$) - Нет доверия к алгоритмам подсчета - Трудно работать с сырыми данными - Быстро и просто
  • 10. Пишем свое - Непредсказуемый результат: вдруг не заработает - Неясные затраты - Покрывает абсолютно все возможные потребности в анализе данных
  • 11. Требования - Сделать что-то быстро и просто - Иметь возможность делать простые счетчики: считать количество событий какого-то типа - Делать примитивную аналитику (фильтры, distinct) - Если ничего не выйдет - не страшно
  • 12. Архитектура Log Collector NGINX Log Storage HTTP GET ! /rec.json?data=XXX ces.coub.com
  • 13. Архитектура Log Storage ces.coub.com Postgres Ruby worker
  • 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);!
  • 15. Старт эксплуатации - От первой строчки до старта в продакшн - 2 недели - Идея рабочая, пользоваться можно - Наконец появились требования и понимание что не так
  • 16. Проблемы - Медленная аналитика (120-180 секунд на запрос) - Ненадежно (одна машина, ненадежный storage) - Не масштабируемо (502, tcpconns, etc)
  • 17. Требования v2 - Данные важны - потерять нельзя ни в коем случае - Latency системы - не более 5 минут - Анализировать так быстро, как можем - Строить сложные группировки и нетипичные отчеты
  • 19. Frontends Log Collector & Log Uploader NGINX HTTP GET ! /rec.json?data=XXX AWS S3 f01.ces.coub.com; f02.ces.coub.com; f03.ces.coub.com
  • 20. Log Fetching AWS S3 Log Fetcher Analysis DB Solution Web Frontend Пользователи (Аналитики)
  • 21. Чуть-чуть про node.js - Надежно - Производительно - Очень просто - Подходит только для специфичных задач
  • 22. Frontend логика - Добавляем ip, страну и всю meta через GeoIP (MaxMind) - Ставим куки - ces_session_last_visit - ces_session_visit_num - ces_session_visit_page - ces_seswion_total_pageviews
  • 24. Что рассматривали - HADOOP (+ Hive) - AWS Redshift - HP Vertica - Druid - Mongo - PG + hStore
  • 25. Как выбирали - Скорость работы - Простота эксплуатации: - Просто поддерживать (комьюнити, узнаваемость) - Понятно хранит данные на диске
  • 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
  • 27. MongoDB - Простая и понятная архитектура - Сильное комьюнити, на любой вопрос есть ответ - Большой инструментарий для аналитики - Не навязывает какую-то определенную структуру данных
  • 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",! }! ] - Тормозит пропорционально количеству событий - Каждый запрос - аггрегация
  • 29. MongoDB: структура хранения {! "_id": {"$oid": "5408881ef7ca2f7995415b36"},! "event_type": "ios_editor_music_choosed",! "is_full": false,! "timestamp_minute": "2014-09-04T15:00:00Z",! "events": [{…},{…}]! }
  • 30. MongoDB - 101 тысяча документов за день. - 3 млн в месяц - Поминутное хранение событий - Быстро делает примитивные агрегаты - upsert для загрузки
  • 31. Железо, нагрузки - Xeon E5 6 cores - 128GB RAM - 4TB RAID - 9 mongo nodes на машину 2X
  • 32. Железо, нагрузки - 40 млн событий в день, 1.2 млрд в месяц - 750-1250 новых событий в секунду - 1 месяц ~ 600ГБ данных в Mongo
  • 34. Юзкейсы и скорость работы - Сколько у нас загрузок плеера в украине вчера? - Говорят в америке долго грузится! - Куда пошли пользователи из фейсбука, попавшие на страницу коба? - Как часто в неделю люди пользуются лентой? - Ответов ждать 5-10 секунд
  • 35. Что плохо ! - Когда данные не в памяти, все очень очень медленно - Не всегда такая структура данных идеальна - Mongo 16MB aggregation limit - Задержка в три минуты (иногда мешает)
  • 36. Команда и цена - Backend: один я парттайм, очень редко что- то ломается - Разработчики клиентов (Android, iOS) - 1100$ железо, трафик - 300$/месяц Amazon S3
  • 37. Планы - Продуктовые Алерты - Real Realtime - Интеграция с Google Docs - API и глубокая интеграция - Больше отчетов и user friendly