SlideShare una empresa de Scribd logo
1 de 27
Descargar para leer sin conexión
Как считать и 
анализировать сотни 
гигабит трафика в 
секунду 
Слава Николов, 
UCDN.com
O компании UCDN.com 
• UCDN.com входит в состав холдинга XBT 
(Webzilla) 
• 4 года успешной работы 
• 12 точек присутствия в мире 
• сотни Gbps трафика 
• более 7 млрд хитов в день
Немного обо мне 
• технический директор и сооснователь компании 
UCDN 
• сооснователь большого видео проекта (10ки Gbps 
в 2007 году) 
• опыт работы в хостинговых компаниях 
• первый сайт за который мне заплатили сделан в 
1997 году
О чем будем говорить 
• как мы 60 Gb логов/день собирались считать 
• общая схема системы подсчета трафика 
• кто что делает ? 
• а почему не hadoop ? 
• как бы мы написали сейчас такое же ? 
• что из этого можно использовать в вашем проекте ?
Только наш опыт, он не абсолютная истина
Как мы 60 Gb логов/день собирались считать 
• есть 12 DC, в каждом из которых находятся от 10ти до 100тни 
серверов 
• каждый DC находится на rtt от 5 мс (в Европе) до 180 мс (Азия) друг 
от друга 
• на каждом сервере все клиенты в перемешку 
• каждую секунду проходят через сеть сотни Gbps (каждые 100 Gbps ~ 
13 Gb данных/сек) 
• каждыe 24 часа проходят около 10ти млрд хитов (10 000 000 000 
хитов)
Что надо было считать ? 
• каждые 5 минут 
– средную скорость отдачи по клиентам по DC (на все 
миллиарды хитов) 
! 
• в конце запроса 
– http return code 
– average speed (bytes) 
– total bytes served 
– и несколько других служебных метрик
Почему не получилось с логами ? 
• слишком много хитов 
• логи занимают место (на каждые 100 Gbps ~ 60Gb/день) 
• всю кучу логов надо по латентным связям слать далеко, что не 
быстро 
• если нет связи (или она плохая), то надо буферировать много 
информации, а диски не бесконечные 
• логи весом 60 Гб в день, надо парсить, а CPU и дисков жалко
Общая схема 
• RP - reverse proxy 
• SR - stats receiver 
• BinFile - binary 
log file 
• MySQL
Общая схема - кто что делает ? 
• Reverse Proxy (nginx модуль) - собирает первичную статистику в 
самом веб-сервере и шлет ее дальше 
• Stats Receiver (standalone deamon) - агрегирует статистику собраную 
из веб-серверов и шлет ее в базу данных 
• BinFile - бинарные логи, если Mysql не может обработать всю 
статистику 
• База данных (MySQL) - делает последную агрегацию
Reverse proxy - internal stats 
• Nginx с proxy cache модулем 
• написан модуль (internal stats), который собирает 2 типа статистики 
– тип 1: статистика по средней скорости отдачи за интервал 
(каждые 5 мин) 
– тип 2: статистика в конце запроса
Internal stats module - сбор скорости 
• модуль хранит в памяти список всех активных запросов 
• каждую минуту он обходит этот список и собирает кол-во отданых байтов за 
последнюю минуту 
• в конце этой минуты, он шлет данные по UDP stats receiver-у 
– UDP нормально, т.к. SR находятся в том же DC как RP 
• протокол обмена данными бинарный 
– т.е. не нужно парсить stats receiver-у (он знает что где ожидать) 
– каждый пакет загружается полностью (payload), чтобы не слать 
полупустые 
– передается следующая информация: 
time interval, host_id, client_id, zone_id, 
bytes served, requests_served
Internal stats module - сбор данных per request 
• модуль ждет окончания запроса 
• в log phase есть hook, который собирает информацию: 
– host_id, 
– client_id, 
– zone_id, 
– Hit type - cache hit, cache miss, redirect 
– bytes sent 
– HTTP responce code 
– client IP 
• в конце запроса шлет данные таким же образом (UDP) SR
Stats receiver - общая архитектура
Stats receiver - общая архитектура 
• агрегирует данные из reverse proxy 
• реально 2 демона: 
– master SR demon: 
• читает конфиги 
• наблюдает за SR slave 
• перезапускает SR slave 
– threaded slave SR demon (worker) 
• socket reader thread 
• packet parser & aggregator thread 
• storage writer thread 
• binlog worker thread 
• telnet thread
Stats receiver - общая архитектура
Stats receiver - что делает каждый тред 
• socket reader thread (один) 
– читает пакеты быстро из сокета 
– записывает во внутренние буфера, для последующего пересчета 
– можно настраивать кол-во этих буферов в конфигурации 
• packet parser & aggregator thread (несколько) 
– у каждого треда есть собственый буфер в котором свежие пакеты со статистикой 
– читает пакет со статистикой, проверяет целостность данных 
– есть структура данных (вид non-blocking tree), в котором записываются скорости 
– по ключу пакета находится его место в дереве и записывается скорость (тут 
реально второй Reduce) 
– если такого ключа нет (т.е. комбинации client_id, zone_id), то создается новый 
элемент в дереве и туда записывается скорость
Stats receiver - общая архитектура
Stats receiver - что делает каждый тред (2) 
• storage writer thread 
– читает дерево с данными 
– генерирует SQL запросы и шлет их на ближайший DB сервер 
– так же, проверяет состояние связи и скорость записи DB 
– если скорость упала ниже граничного значения, то начинает писать в бинарные логи 
– бинлоги это все то, что не может вовремя записаться в базу данных 
• binlog worker thread 
– проверяет есть ли бинлоги 
– если есть, то пытается связаться с DB и написать их туда 
• telnet thread 
– дает возможность залезть и посмотреть счетчики, состояние тредов и всякие 
статистики 
– так же есть JSON статистическая страница, для внутреннего контролера
Database 
• база данных для агрегированых статистик 
• все записывается фиксироваными интервалами 
продолжителностью 5 мин 
• таким образом каждый день кол-во рядов постоянно (288 5min/24h) 
• можно ротировать легче базу данных 
• есть 2 основные агрегационные точки, которые связаны в master-master 
репликацию
Отказоустойчивость 
• каждый RP может слать статистику разным SR 
• есть failover в RP, если SR недоступен (за этим следит отдельный 
демон, т.к. UDP stateless) 
• каждый SR может писать в >1 базы данных (паралельно) 
• SR следит за состоянием записи в базу и создает бинлоги, когда не 
видит базу
Скалируемость 
• RP практически не загружает nginx и т.к. код компилируется, то нет 
penalty интерпретирования 
• каждый SR может агрегировать другому SR (если необходимо stack) 
• каждый SR может писать в несколько баз данных шардя записи
Нагрузка 
• так как все native, то практически не заметно 
• в nginx: немного памяти на внутрение структуры + немного CPU на обход структур 
– реально не замечали, даже после первого пуска в production, не могли отличить сервера 
со считалкой от тех без нее 
• SR мега быстрый 
– можно настраивать количество тредов 
– все native и не использует ничего внешнего 
– все структуры написаны самостоятельно и максимально упрощены 
– один сервер посчитал 124 Gbps с load average 0.1 
• DB 
– есть горизональный шардинг, каждый SR может писать паралельно в несколько баз 
– последняя агрегация только на фиксированом кол-ве интервалов (288 интервалов на 
ключ)
Hadoop ? 
• мы не против hadoop, даже скорее всего будем использовать его в 
анализе performance / мониторинг данных 
• начали читать и настраивать, но испугались всех слоев 
• не хотели покупать сервера, т.к. сейчас все работает на тех же 
серверах, которые отдают трафик 
• данные структурированы и агрегация одна и та же, так что задача 
не меняется постоянно
Kак бы мы сейчас написали такое же ? 
• прошло почти 4 года 
• модуль так же (никуда не деться, нужно лезть в nginx) 
• SR можно написать на чем-то более легком, чем C, которое 
компилируется 
– erlang 
– go 
– если не жаль CPU и памяти и интерпретируемое можно 
поставить
Что из этого можно использовать в вашем проекте ? 
• анализ данных 
– можно ли их фильтрировать (Map) 
– поддаются ли агрегации у источника ? 
• не всегда нужно микроскопом забивать гвозди 
– иногда универсальные системы слишком громоздкие 
– часто задачу можно сделать проще, если смотреть в корень 
проблемы 
• собственные алгоритмы агрегации в коде, могут быть быстрее 
NoSQL + latency
Спасибо! Вопросы ? 
slava@ucdn.com

Más contenido relacionado

La actualidad más candente

Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...Ontico
 
OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...
OpenResty: превращаем NGINX в полноценный сервер приложений  / Владимир Прота...OpenResty: превращаем NGINX в полноценный сервер приложений  / Владимир Прота...
OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...Ontico
 
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...Ontico
 
Загрузка больших объемов данных для бизнес-аналитики
Загрузка больших объемов данных для бизнес-аналитикиЗагрузка больших объемов данных для бизнес-аналитики
Загрузка больших объемов данных для бизнес-аналитикиBadoo Development
 
Near-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проектеNear-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проектеAlexandr Krasheninnikov
 
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)Ontico
 
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...Ontico
 
Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...
Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...
Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...Ontico
 
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...Ontico
 
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)Ontico
 
Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)
Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)
Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)Ontico
 
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...Ontico
 
Доклад Валерия Старынина на DevConf 2014. "StatsCollector, или "Мама! Он и ме...
Доклад Валерия Старынина на DevConf 2014. "StatsCollector, или "Мама! Он и ме...Доклад Валерия Старынина на DevConf 2014. "StatsCollector, или "Мама! Он и ме...
Доклад Валерия Старынина на DevConf 2014. "StatsCollector, или "Мама! Он и ме...Badoo Development
 
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...Ontico
 
Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...
Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...
Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...Ontico
 
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...Ontico
 
Анатомия веб сервиса (HighLoad-2014)
Анатомия веб сервиса (HighLoad-2014)Анатомия веб сервиса (HighLoad-2014)
Анатомия веб сервиса (HighLoad-2014)Andrey Smirnov
 
Юрий Насретдинов, Badoo
Юрий Насретдинов, BadooЮрий Насретдинов, Badoo
Юрий Насретдинов, BadooOntico
 
Отказоустойчивый микрокластер своими руками, Виталий Гаврилов (Ленвендо)
Отказоустойчивый микрокластер своими руками, Виталий Гаврилов (Ленвендо)Отказоустойчивый микрокластер своими руками, Виталий Гаврилов (Ленвендо)
Отказоустойчивый микрокластер своими руками, Виталий Гаврилов (Ленвендо)Ontico
 

La actualidad más candente (19)

Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
 
OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...
OpenResty: превращаем NGINX в полноценный сервер приложений  / Владимир Прота...OpenResty: превращаем NGINX в полноценный сервер приложений  / Владимир Прота...
OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...
 
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
 
Загрузка больших объемов данных для бизнес-аналитики
Загрузка больших объемов данных для бизнес-аналитикиЗагрузка больших объемов данных для бизнес-аналитики
Загрузка больших объемов данных для бизнес-аналитики
 
Near-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проектеNear-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проекте
 
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
 
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
 
Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...
Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...
Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...
 
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
 
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
 
Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)
Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)
Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)
 
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
 
Доклад Валерия Старынина на DevConf 2014. "StatsCollector, или "Мама! Он и ме...
Доклад Валерия Старынина на DevConf 2014. "StatsCollector, или "Мама! Он и ме...Доклад Валерия Старынина на DevConf 2014. "StatsCollector, или "Мама! Он и ме...
Доклад Валерия Старынина на DevConf 2014. "StatsCollector, или "Мама! Он и ме...
 
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
 
Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...
Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...
Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...
 
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
 
Анатомия веб сервиса (HighLoad-2014)
Анатомия веб сервиса (HighLoad-2014)Анатомия веб сервиса (HighLoad-2014)
Анатомия веб сервиса (HighLoad-2014)
 
Юрий Насретдинов, Badoo
Юрий Насретдинов, BadooЮрий Насретдинов, Badoo
Юрий Насретдинов, Badoo
 
Отказоустойчивый микрокластер своими руками, Виталий Гаврилов (Ленвендо)
Отказоустойчивый микрокластер своими руками, Виталий Гаврилов (Ленвендо)Отказоустойчивый микрокластер своими руками, Виталий Гаврилов (Ленвендо)
Отказоустойчивый микрокластер своими руками, Виталий Гаврилов (Ленвендо)
 

Similar a Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николов (UCDN.com)

Hosting for forbes.ru_
Hosting for forbes.ru_Hosting for forbes.ru_
Hosting for forbes.ru_drupalconf
 
Near-realtime аналитика событий в высоконагруженном проекте / Александр Краше...
Near-realtime аналитика событий в высоконагруженном проекте / Александр Краше...Near-realtime аналитика событий в высоконагруженном проекте / Александр Краше...
Near-realtime аналитика событий в высоконагруженном проекте / Александр Краше...Ontico
 
Near-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проектеNear-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проектеBadoo Development
 
Near-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проектеNear-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проектеYulia Kotova
 
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
"Мы два месяца долбались, а потом построили индекс" (c) АксеновAlex Chistyakov
 
Олег Царев, Кирилл Коринский Сравнительный анализ хранилищ данных
Олег Царев, Кирилл Коринский   Сравнительный анализ хранилищ данныхОлег Царев, Кирилл Коринский   Сравнительный анализ хранилищ данных
Олег Царев, Кирилл Коринский Сравнительный анализ хранилищ данныхSiel01
 
AVITO. Решардинг Redis без даунтайма. DevConf 2012
AVITO. Решардинг Redis без даунтайма. DevConf 2012AVITO. Решардинг Redis без даунтайма. DevConf 2012
AVITO. Решардинг Redis без даунтайма. DevConf 2012Roman Pavlushko
 
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...CodeFest
 
Опыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на RubyОпыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на RubyAlex Chistyakov
 
Cистема внутренней статистики Odnoklassniki.ru
Cистема внутренней статистики Odnoklassniki.ruCистема внутренней статистики Odnoklassniki.ru
Cистема внутренней статистики Odnoklassniki.ruodnoklassniki.ru
 
Frontera обход испанского интернета
Frontera обход испанского интернетаFrontera обход испанского интернета
Frontera обход испанского интернетаAlexander Sibiryakov
 
Frontera: распределенный робот для обхода интернета в больших объемах - Алекс...
Frontera: распределенный робот для обхода интернета в больших объемах - Алекс...Frontera: распределенный робот для обхода интернета в больших объемах - Алекс...
Frontera: распределенный робот для обхода интернета в больших объемах - Алекс...it-people
 
My talk on HBase ops engineering at TBD Jun 2016
My talk on HBase ops engineering at TBD Jun 2016My talk on HBase ops engineering at TBD Jun 2016
My talk on HBase ops engineering at TBD Jun 2016Alex Chistyakov
 
Где сегодня использовать ElasticSearch
Где сегодня использовать ElasticSearchГде сегодня использовать ElasticSearch
Где сегодня использовать ElasticSearchИлья Середа
 
2014.12.06 03 Александр Чистяков — Устройство object storage на примере LeoFS
2014.12.06 03 Александр Чистяков — Устройство object storage на примере LeoFS2014.12.06 03 Александр Чистяков — Устройство object storage на примере LeoFS
2014.12.06 03 Александр Чистяков — Устройство object storage на примере LeoFSHappyDev
 
My talk on LeoFS, HappyDev 2014
My talk on LeoFS, HappyDev 2014My talk on LeoFS, HappyDev 2014
My talk on LeoFS, HappyDev 2014Alex Chistyakov
 
ekbpy'2012 - Данила Штань - Распределенное хранилище
ekbpy'2012 - Данила Штань - Распределенное хранилищеekbpy'2012 - Данила Штань - Распределенное хранилище
ekbpy'2012 - Данила Штань - Распределенное хранилищеit-people
 
Олег Анастасьев "Ближе к Cassandra". Выступление на Cassandra Conf 2013
Олег Анастасьев "Ближе к Cassandra". Выступление на Cassandra Conf 2013Олег Анастасьев "Ближе к Cassandra". Выступление на Cassandra Conf 2013
Олег Анастасьев "Ближе к Cassandra". Выступление на Cassandra Conf 2013it-people
 
Спасение 6 миллионов файлов в условиях полного Хецнера
Спасение 6 миллионов файлов в условиях полного ХецнераСпасение 6 миллионов файлов в условиях полного Хецнера
Спасение 6 миллионов файлов в условиях полного ХецнераDaniel Podolsky
 

Similar a Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николов (UCDN.com) (20)

Hosting for forbes.ru_
Hosting for forbes.ru_Hosting for forbes.ru_
Hosting for forbes.ru_
 
Near-realtime аналитика событий в высоконагруженном проекте / Александр Краше...
Near-realtime аналитика событий в высоконагруженном проекте / Александр Краше...Near-realtime аналитика событий в высоконагруженном проекте / Александр Краше...
Near-realtime аналитика событий в высоконагруженном проекте / Александр Краше...
 
Near-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проектеNear-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проекте
 
Near-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проектеNear-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проекте
 
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
 
Sivko
SivkoSivko
Sivko
 
Олег Царев, Кирилл Коринский Сравнительный анализ хранилищ данных
Олег Царев, Кирилл Коринский   Сравнительный анализ хранилищ данныхОлег Царев, Кирилл Коринский   Сравнительный анализ хранилищ данных
Олег Царев, Кирилл Коринский Сравнительный анализ хранилищ данных
 
AVITO. Решардинг Redis без даунтайма. DevConf 2012
AVITO. Решардинг Redis без даунтайма. DevConf 2012AVITO. Решардинг Redis без даунтайма. DevConf 2012
AVITO. Решардинг Redis без даунтайма. DevConf 2012
 
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
 
Опыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на RubyОпыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на Ruby
 
Cистема внутренней статистики Odnoklassniki.ru
Cистема внутренней статистики Odnoklassniki.ruCистема внутренней статистики Odnoklassniki.ru
Cистема внутренней статистики Odnoklassniki.ru
 
Frontera обход испанского интернета
Frontera обход испанского интернетаFrontera обход испанского интернета
Frontera обход испанского интернета
 
Frontera: распределенный робот для обхода интернета в больших объемах - Алекс...
Frontera: распределенный робот для обхода интернета в больших объемах - Алекс...Frontera: распределенный робот для обхода интернета в больших объемах - Алекс...
Frontera: распределенный робот для обхода интернета в больших объемах - Алекс...
 
My talk on HBase ops engineering at TBD Jun 2016
My talk on HBase ops engineering at TBD Jun 2016My talk on HBase ops engineering at TBD Jun 2016
My talk on HBase ops engineering at TBD Jun 2016
 
Где сегодня использовать ElasticSearch
Где сегодня использовать ElasticSearchГде сегодня использовать ElasticSearch
Где сегодня использовать ElasticSearch
 
2014.12.06 03 Александр Чистяков — Устройство object storage на примере LeoFS
2014.12.06 03 Александр Чистяков — Устройство object storage на примере LeoFS2014.12.06 03 Александр Чистяков — Устройство object storage на примере LeoFS
2014.12.06 03 Александр Чистяков — Устройство object storage на примере LeoFS
 
My talk on LeoFS, HappyDev 2014
My talk on LeoFS, HappyDev 2014My talk on LeoFS, HappyDev 2014
My talk on LeoFS, HappyDev 2014
 
ekbpy'2012 - Данила Штань - Распределенное хранилище
ekbpy'2012 - Данила Штань - Распределенное хранилищеekbpy'2012 - Данила Штань - Распределенное хранилище
ekbpy'2012 - Данила Штань - Распределенное хранилище
 
Олег Анастасьев "Ближе к Cassandra". Выступление на Cassandra Conf 2013
Олег Анастасьев "Ближе к Cassandra". Выступление на Cassandra Conf 2013Олег Анастасьев "Ближе к Cassandra". Выступление на Cassandra Conf 2013
Олег Анастасьев "Ближе к Cassandra". Выступление на Cassandra Conf 2013
 
Спасение 6 миллионов файлов в условиях полного Хецнера
Спасение 6 миллионов файлов в условиях полного ХецнераСпасение 6 миллионов файлов в условиях полного Хецнера
Спасение 6 миллионов файлов в условиях полного Хецнера
 

Más de Ontico

One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...Ontico
 
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Ontico
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Ontico
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Ontico
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Ontico
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)Ontico
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Ontico
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Ontico
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)Ontico
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)Ontico
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Ontico
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Ontico
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Ontico
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Ontico
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)Ontico
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Ontico
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Ontico
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...Ontico
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Ontico
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Ontico
 

Más de Ontico (20)

One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
 
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
 

Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николов (UCDN.com)

  • 1. Как считать и анализировать сотни гигабит трафика в секунду Слава Николов, UCDN.com
  • 2. O компании UCDN.com • UCDN.com входит в состав холдинга XBT (Webzilla) • 4 года успешной работы • 12 точек присутствия в мире • сотни Gbps трафика • более 7 млрд хитов в день
  • 3. Немного обо мне • технический директор и сооснователь компании UCDN • сооснователь большого видео проекта (10ки Gbps в 2007 году) • опыт работы в хостинговых компаниях • первый сайт за который мне заплатили сделан в 1997 году
  • 4. О чем будем говорить • как мы 60 Gb логов/день собирались считать • общая схема системы подсчета трафика • кто что делает ? • а почему не hadoop ? • как бы мы написали сейчас такое же ? • что из этого можно использовать в вашем проекте ?
  • 5. Только наш опыт, он не абсолютная истина
  • 6. Как мы 60 Gb логов/день собирались считать • есть 12 DC, в каждом из которых находятся от 10ти до 100тни серверов • каждый DC находится на rtt от 5 мс (в Европе) до 180 мс (Азия) друг от друга • на каждом сервере все клиенты в перемешку • каждую секунду проходят через сеть сотни Gbps (каждые 100 Gbps ~ 13 Gb данных/сек) • каждыe 24 часа проходят около 10ти млрд хитов (10 000 000 000 хитов)
  • 7. Что надо было считать ? • каждые 5 минут – средную скорость отдачи по клиентам по DC (на все миллиарды хитов) ! • в конце запроса – http return code – average speed (bytes) – total bytes served – и несколько других служебных метрик
  • 8. Почему не получилось с логами ? • слишком много хитов • логи занимают место (на каждые 100 Gbps ~ 60Gb/день) • всю кучу логов надо по латентным связям слать далеко, что не быстро • если нет связи (или она плохая), то надо буферировать много информации, а диски не бесконечные • логи весом 60 Гб в день, надо парсить, а CPU и дисков жалко
  • 9. Общая схема • RP - reverse proxy • SR - stats receiver • BinFile - binary log file • MySQL
  • 10. Общая схема - кто что делает ? • Reverse Proxy (nginx модуль) - собирает первичную статистику в самом веб-сервере и шлет ее дальше • Stats Receiver (standalone deamon) - агрегирует статистику собраную из веб-серверов и шлет ее в базу данных • BinFile - бинарные логи, если Mysql не может обработать всю статистику • База данных (MySQL) - делает последную агрегацию
  • 11. Reverse proxy - internal stats • Nginx с proxy cache модулем • написан модуль (internal stats), который собирает 2 типа статистики – тип 1: статистика по средней скорости отдачи за интервал (каждые 5 мин) – тип 2: статистика в конце запроса
  • 12. Internal stats module - сбор скорости • модуль хранит в памяти список всех активных запросов • каждую минуту он обходит этот список и собирает кол-во отданых байтов за последнюю минуту • в конце этой минуты, он шлет данные по UDP stats receiver-у – UDP нормально, т.к. SR находятся в том же DC как RP • протокол обмена данными бинарный – т.е. не нужно парсить stats receiver-у (он знает что где ожидать) – каждый пакет загружается полностью (payload), чтобы не слать полупустые – передается следующая информация: time interval, host_id, client_id, zone_id, bytes served, requests_served
  • 13. Internal stats module - сбор данных per request • модуль ждет окончания запроса • в log phase есть hook, который собирает информацию: – host_id, – client_id, – zone_id, – Hit type - cache hit, cache miss, redirect – bytes sent – HTTP responce code – client IP • в конце запроса шлет данные таким же образом (UDP) SR
  • 14. Stats receiver - общая архитектура
  • 15. Stats receiver - общая архитектура • агрегирует данные из reverse proxy • реально 2 демона: – master SR demon: • читает конфиги • наблюдает за SR slave • перезапускает SR slave – threaded slave SR demon (worker) • socket reader thread • packet parser & aggregator thread • storage writer thread • binlog worker thread • telnet thread
  • 16. Stats receiver - общая архитектура
  • 17. Stats receiver - что делает каждый тред • socket reader thread (один) – читает пакеты быстро из сокета – записывает во внутренние буфера, для последующего пересчета – можно настраивать кол-во этих буферов в конфигурации • packet parser & aggregator thread (несколько) – у каждого треда есть собственый буфер в котором свежие пакеты со статистикой – читает пакет со статистикой, проверяет целостность данных – есть структура данных (вид non-blocking tree), в котором записываются скорости – по ключу пакета находится его место в дереве и записывается скорость (тут реально второй Reduce) – если такого ключа нет (т.е. комбинации client_id, zone_id), то создается новый элемент в дереве и туда записывается скорость
  • 18. Stats receiver - общая архитектура
  • 19. Stats receiver - что делает каждый тред (2) • storage writer thread – читает дерево с данными – генерирует SQL запросы и шлет их на ближайший DB сервер – так же, проверяет состояние связи и скорость записи DB – если скорость упала ниже граничного значения, то начинает писать в бинарные логи – бинлоги это все то, что не может вовремя записаться в базу данных • binlog worker thread – проверяет есть ли бинлоги – если есть, то пытается связаться с DB и написать их туда • telnet thread – дает возможность залезть и посмотреть счетчики, состояние тредов и всякие статистики – так же есть JSON статистическая страница, для внутреннего контролера
  • 20. Database • база данных для агрегированых статистик • все записывается фиксироваными интервалами продолжителностью 5 мин • таким образом каждый день кол-во рядов постоянно (288 5min/24h) • можно ротировать легче базу данных • есть 2 основные агрегационные точки, которые связаны в master-master репликацию
  • 21. Отказоустойчивость • каждый RP может слать статистику разным SR • есть failover в RP, если SR недоступен (за этим следит отдельный демон, т.к. UDP stateless) • каждый SR может писать в >1 базы данных (паралельно) • SR следит за состоянием записи в базу и создает бинлоги, когда не видит базу
  • 22. Скалируемость • RP практически не загружает nginx и т.к. код компилируется, то нет penalty интерпретирования • каждый SR может агрегировать другому SR (если необходимо stack) • каждый SR может писать в несколько баз данных шардя записи
  • 23. Нагрузка • так как все native, то практически не заметно • в nginx: немного памяти на внутрение структуры + немного CPU на обход структур – реально не замечали, даже после первого пуска в production, не могли отличить сервера со считалкой от тех без нее • SR мега быстрый – можно настраивать количество тредов – все native и не использует ничего внешнего – все структуры написаны самостоятельно и максимально упрощены – один сервер посчитал 124 Gbps с load average 0.1 • DB – есть горизональный шардинг, каждый SR может писать паралельно в несколько баз – последняя агрегация только на фиксированом кол-ве интервалов (288 интервалов на ключ)
  • 24. Hadoop ? • мы не против hadoop, даже скорее всего будем использовать его в анализе performance / мониторинг данных • начали читать и настраивать, но испугались всех слоев • не хотели покупать сервера, т.к. сейчас все работает на тех же серверах, которые отдают трафик • данные структурированы и агрегация одна и та же, так что задача не меняется постоянно
  • 25. Kак бы мы сейчас написали такое же ? • прошло почти 4 года • модуль так же (никуда не деться, нужно лезть в nginx) • SR можно написать на чем-то более легком, чем C, которое компилируется – erlang – go – если не жаль CPU и памяти и интерпретируемое можно поставить
  • 26. Что из этого можно использовать в вашем проекте ? • анализ данных – можно ли их фильтрировать (Map) – поддаются ли агрегации у источника ? • не всегда нужно микроскопом забивать гвозди – иногда универсальные системы слишком громоздкие – часто задачу можно сделать проще, если смотреть в корень проблемы • собственные алгоритмы агрегации в коде, могут быть быстрее NoSQL + latency