+ All Categories
Transcript
Page 1: Максим Лапшин (Erlyvideo)

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

Макс Лапшин[email protected]

Saturday, April 12, 14

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

Проблема

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

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

Saturday, April 12, 14

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

NIH?

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

Saturday, April 12, 14

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

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

• rrdtool

• graphite (whisper/ceres)

• opentsdb (tempo-db, kairodb)

• influxdb

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

Saturday, April 12, 14

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

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

• statsd

• rienmann

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

Saturday, April 12, 14

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

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

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

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

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

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

Saturday, April 12, 14

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

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

Saturday, April 12, 14

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

rrdtool

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

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

Saturday, April 12, 14

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

Graphite

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

Saturday, April 12, 14

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

OpenTSDB

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

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

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

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

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

Saturday, April 12, 14

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

InfluxDB

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

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

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

Saturday, April 12, 14

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

Прочие

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

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

Saturday, April 12, 14

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

Pulsedb

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

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

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

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

• Websocket подписка

Saturday, April 12, 14

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

Pulsedb

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

• http://pulsedb.io/

Saturday, April 12, 14

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

Структура

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

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

Saturday, April 12, 14

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

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

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

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

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

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

Saturday, April 12, 14

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

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

• Statefull протокол

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

Saturday, April 12, 14

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

Для сервиса

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

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

Saturday, April 12, 14

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

Немного цифр

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

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

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

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

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

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

Saturday, April 12, 14

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

Планы

• MySQL интерфейс

• GUI для данных

Saturday, April 12, 14

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

Вопросы?

Макс Лапшин

[email protected]

Saturday, April 12, 14


Top Related