2. Проблема
• Надо хранить статистику
• Ежесекундные замеры
• Много стримов, много серверов
• Потом рисовать графики по выборкам
• Обновлять графики на лету
• Сжимать и удалять ненужные данные
Saturday, April 12, 14
3. NIH?
• Неизвестное количество метрик
• Необходимо встраивать в эрливидео
• Раздельное управление по аккаунтам
• Риалтайм графики
Saturday, April 12, 14
4. С чем сравнивали?
• rrdtool
• graphite (whisper/ceres)
• opentsdb (tempo-db, kairodb)
• influxdb
• прочее (librato, blueflood, seriesly,
circonus)
Saturday, April 12, 14
5. С чем НЕ сравнивали
• statsd
• rienmann
• хранилища логов
Saturday, April 12, 14
6. Терминология
• Равномерный временной ряд
• statsd — агрегация потока в равномерный
ряд
• rrdtool — хранение равномерных рядов
• агрегация — склейка двух равномерных
временных рядов
• downsampling — разрежение временного
ряда
Saturday, April 12, 14
8. rrdtool
• невообразимо медленный (fork на замер)
• нет возможности склейки метрик на лету
• плохое управление хранением
• слишком примитивный
Saturday, April 12, 14
9. Graphite
• не умеет склеивать метрики на лету
• графики строит сам
• никакого риалтайм фида
Saturday, April 12, 14
10. OpenTSDB
• Hadoop (со всеми вытекающими)
• Сам рисует графики
• Свой язык: sum:avg-2m:metric{tag=value}
• Умеет склеивать ряды
• Нет риалтайм фида
• Огромный оверхед на хранение
Saturday, April 12, 14
11. InfluxDB
• Очень развитое решение
• SQL-like язык запросов
• Агрегация рядов и операции над ними
• Умеет хранить и события
• Никакой явы!
• Появилось позже нашего кода
• Большой объём хранения и передачи
Saturday, April 12, 14
12. Прочие
• Пользуются Kassandra, Couch и прочей
инфернальщиной для хранения
• Или уже дорогущие промышленные
SCADA решения
Saturday, April 12, 14
13. Pulsedb
• Метрика — имя + теги
• Замер — UTC + имя + теги
• Библиотека + демон
• Компактное неточное хранение
• OpenTSDB-like язык запросов
• Websocket подписка
Saturday, April 12, 14
15. Структура
• HTTP Upgrade + текстовый протокол
• Собственный формат хранения
• Последняя минута в памяти
Saturday, April 12, 14
16. Хранение на диске
• 2 байта на замер
• хранение приблизительного значения
• 14 бит значения, 2 бита на порядок
• часовые блобы для каждой метрики
• мердж баз простым апдейтом
Saturday, April 12, 14
17. Транспорт по сети
• Statefull протокол
• Метрики кодируются номерами
• Время передается дельтой
• Значение неточное: 340K, 25G
Saturday, April 12, 14
18. Для сервиса
• Шардинг данных по аккаунтам
• Раздельная очистка секундных и
минутных данных
• Внешняя авторизация продюсеров
• Внешний резолвинг графиков
• Репликация
Saturday, April 12, 14
19. Немного цифр
• 20-50 серверов
• 30-150 каналов на каждом
• по 3 метрики с канала (in,out,clients)
• 2000 - 10 000 замеров в секунду
• 25 GB в месяц (10 млрд замеров)
• Одна холодная виртуалка в DigitalOcean
Saturday, April 12, 14