Максим Лапшин (Erlyvideo)

Post on 15-May-2015

1,176 views 3 download

Tags:

transcript

Pulsedbдля временных рядов

Макс Лапшинmax@erlyvideo.ru

Saturday, April 12, 14

Проблема

• Надо хранить статистику• Ежесекундные замеры• Много стримов, много серверов• Потом рисовать графики по выборкам

• Обновлять графики на лету• Сжимать и удалять ненужные данные

Saturday, April 12, 14

NIH?

• Неизвестное количество метрик• Необходимо встраивать в эрливидео• Раздельное управление по аккаунтам• Риалтайм графики

Saturday, April 12, 14

С чем сравнивали?

• rrdtool

• graphite (whisper/ceres)

• opentsdb (tempo-db, kairodb)

• influxdb

• прочее (librato, blueflood, seriesly, circonus)

Saturday, April 12, 14

С чем НЕ сравнивали

• statsd

• rienmann

• хранилища логов

Saturday, April 12, 14

Терминология

• Равномерный временной ряд• statsd — агрегация потока в равномерный ряд

• rrdtool — хранение равномерных рядов

• агрегация — склейка двух равномерных временных рядов

• downsampling — разрежение временного ряда

Saturday, April 12, 14

Фатальные недостатки

Saturday, April 12, 14

rrdtool

• невообразимо медленный (fork на замер)

• нет возможности склейки метрик на лету• плохое управление хранением• слишком примитивный

Saturday, April 12, 14

Graphite

• не умеет склеивать метрики на лету• графики строит сам• никакого риалтайм фида

Saturday, April 12, 14

OpenTSDB

• Hadoop (со всеми вытекающими)

• Сам рисует графики

• Свой язык: sum:avg-2m:metric{tag=value}

• Умеет склеивать ряды• Нет риалтайм фида

• Огромный оверхед на хранение

Saturday, April 12, 14

InfluxDB

• Очень развитое решение• SQL-like язык запросов

• Агрегация рядов и операции над ними• Умеет хранить и события• Никакой явы!

• Появилось позже нашего кода• Большой объём хранения и передачи

Saturday, April 12, 14

Прочие

• Пользуются Kassandra, Couch и прочей инфернальщиной для хранения

• Или уже дорогущие промышленные SCADA решения

Saturday, April 12, 14

Pulsedb

• Метрика — имя + теги

• Замер — UTC + имя + теги

• Библиотека + демон

• Компактное неточное хранение• OpenTSDB-like язык запросов

• Websocket подписка

Saturday, April 12, 14

Pulsedb

• https://github.com/pulsedb/pulsedb

• http://pulsedb.io/

Saturday, April 12, 14

Структура

• HTTP Upgrade + текстовый протокол

• Собственный формат хранения• Последняя минута в памяти

Saturday, April 12, 14

Хранение на диске

• 2 байта на замер

• хранение приблизительного значения• 14 бит значения, 2 бита на порядок

• часовые блобы для каждой метрики

• мердж баз простым апдейтом

Saturday, April 12, 14

Транспорт по сети

• Statefull протокол

• Метрики кодируются номерами• Время передается дельтой• Значение неточное: 340K, 25G

Saturday, April 12, 14

Для сервиса

• Шардинг данных по аккаунтам• Раздельная очистка секундных и минутных данных

• Внешняя авторизация продюсеров• Внешний резолвинг графиков• Репликация

Saturday, April 12, 14

Немного цифр

• 20-50 серверов

• 30-150 каналов на каждом

• по 3 метрики с канала (in,out,clients)

• 2000 - 10 000 замеров в секунду

• 25 GB в месяц (10 млрд замеров)

• Одна холодная виртуалка в DigitalOcean

Saturday, April 12, 14

Планы

• MySQL интерфейс

• GUI для данных

Saturday, April 12, 14

Вопросы?

Макс Лапшин

max@erlyvideo.ru

Saturday, April 12, 14