Post on 15-May-2015
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