2015-10-26 3 views
45

Следуя Prometheus webpage, одним из основных отличий между Prometheus и InfluxDB является usecase: в то время как Prometheus хранит только временные ряды, InfluxDB лучше ориентируется на сохранение отдельных событий. Так как на движке InfluxDB была сделана большая работа, я задаюсь вопросом, действительно ли это так.Usecases: InfluxDB vs. Prometheus

Я хочу установить базу данных временных рядов и, кроме модели push/push (и, возможно, разницу в производительности), я не вижу большой вещи, которая отделяет оба проекта. Может ли кто-то объяснить разницу в размерах?

ответ

63

Генеральный директор и разработчик InfluxDB. Следующая версия InfluxDB (0.9.5) будет иметь новый механизм хранения. Благодаря этому движку мы сможем эффективно хранить либо данные одного события, либо регулярно повторяющиеся серии. т. е. нерегулярные и регулярные временные ряды.

InfluxDB поддерживает типы данных int64, float64, bool и string с использованием различных схем сжатия для каждого из них. Prometheus поддерживает только float64.

Для сжатия версия 0.9.5 будет иметь компрессию, совместимую с Prometheus. В некоторых случаях мы увидим лучшие результаты, поскольку мы меняем сжатие на временных отметках на основе того, что мы видим. Лучший случайный сценарий - это регулярная серия, отсчитываемая точными интервалами. В них по умолчанию мы можем сжать отметки времени в 1 к в качестве начального времени в 8 байт, дельта (закодированный зигзагом) и счетчик (также закодированный зигзагом).

В зависимости от формы данных, которые мы видели < 2,5 байта за точку в среднем после уплотнений.

YMMV на основе временных меток, типа данных и формы данных. Например, случайные поплавки с отметками времени наносекундного масштаба с большими переменными дельтами будут самыми худшими.

Переменная точность в метках времени является еще одной особенностью, которой обладает InfluxDB. Он может представлять собой второй, миллисекундный, микросекундный или наносекундный масштаб. Прометей фиксируется в миллисекундах.

Другое отличие заключается в том, что записи в InfluxDB являются прочными после того, как клиент отправит ответ на успех. Буфери Prometheus записывают в память и по умолчанию стирают их каждые 5 минут, что открывает окно потенциальной потери данных.

Наша надежда заключается в том, что после выпуска 0.9.5 InfluxDB это будет хороший выбор для пользователей Prometheus для использования в качестве хранилища долгосрочных метрик (совместно с Prometheus). Я почти уверен, что поддержка уже находится в Prometheus, но пока выпуск 0.9.5 не упадет, это может быть немного скалистым. Очевидно, нам придется работать вместе и выполнять кучу тестирования, но на это я надеюсь.

Для получения единого показателя производительности сервера, я ожидал бы, что Prometheus будет иметь лучшую производительность (хотя мы не проводили тестирование здесь и не имели числа) из-за их более ограниченной модели данных и потому, что они не добавляют записи на диск до выписывая индекс.

Язык запросов между ними очень различен. Я не уверен, что они поддерживают, что мы еще не или наоборот, так что вам нужно будет вникнуть в документы на обоих, чтобы увидеть, есть ли что-то, что можно сделать, что вам нужно. В долгосрочной перспективе наша цель состоит в том, чтобы функциональность запросов InfluxDB была надмножеством решений Graphite, RRD, Prometheus и других временных рядов. Я говорю суперсеть, потому что мы хотим позже охватить их в дополнение к более аналитическим функциям. Очевидно, нам потребуется время, чтобы добраться туда.

И, наконец, более долгосрочная цель InfluxDB - поддерживать высокую доступность и масштабируемость по горизонтали посредством кластеризации. Текущая реализация кластеризации еще не полностью завершена и находится только в alpha. Однако мы работаем над этим, и это основная цель проекта для проекта. Наша структура кластеризации заключается в том, что данные в конечном итоге являются последовательными.

Насколько мне известно, подход Прометея заключается в использовании двойной записи для HA (поэтому нет никакой гарантии последовательности) и использования федерации для горизонтальной масштабируемости. Я не уверен, как будет работать запрос по федеративным серверам.

Внутри кластера InfluxDB вы можете запросить границы сервера без копирования всех данных по сети. Это потому, что каждый запрос разбивается на задание MapReduce, которое запускается «на лету».

Возможно, что-то еще, но об этом я могу думать в данный момент.

+27

Прометей здесь. Павел прав, что Prometheus есть и будет всегда плавать только (строки возможны ограниченным образом через метки), тогда как InfluxDB поддерживает множество типов данных. Я предполагаю, что языки запросов довольно похожи по силе на практике (Prometheus - Turing Complete). Наш подход HA состоит в том, чтобы иметь изолированные избыточные серверы, alertmanager будет выводить предупреждения из них. Обычно мы применяем AP-подход к мониторингу, а не к CP, так как лучше потерять немного данных, чем ваш мониторинг. Прометей стремится стать системой, в которую вы можете положиться в чрезвычайной ситуации. –

+8

Конструкция кластеризации InfluxDB также в значительной степени является AP, но она, в конечном счете, является последовательной. Мы достигаем этого через Hinted Handoff (доступно в текущем выпуске) и Active Anti-Entroy (который мы начнем с 0.9.6). Очевидно, что мы еще не закончили кластеризацию, но это цель дизайна. Подробнее здесь: https://influxdb.com/blog/2015/06/03/InfluxDB_clustering_design.html –

+10

Другой Прометей dev здесь. Да, сам Прометей не стремится быть долговечным долговременным хранилищем. Но в других отношениях его объем больше и больше об активных системах и мониторинге услуг: из клиентских библиотек (которые не только говорят на каком-то протоколе вывода показателей, но и помогают управлять примитивами показателей, такими как счетчики, датчики, гистограммы и сводки) , по активному обнаружению цели/сбору данных, панели мониторинга, вплоть до оповещения о вычислении и обработке уведомлений. Язык запросов также не похож на SQL, но отлично работает для вычислений по размерным временным рядам. – Julius

5

Внедрение IFRC в текущем исполнении Prometheus спроектировано вокруг всего набора данных на одном сервере. Если у вас есть гигантское количество данных, возможно, он не подходит для Прометея.

+0

Хороший вопрос! Но скажем, у меня будут свои вещи на одном узле, и все будет работать :) – SpaceMonkey

+5

Разработчик Prometheus здесь, возможно, масштабировать Prometheus за пределами одного сервера, хотя это редко необходимо. Мы ценим надежность над согласованностью, так как это подходит для критического мониторинга, поэтому избегайте кластеризации. См. Http://www.robustperception.io/scaling-and-federating-prometheus/ –

+0

В Weave Cloud мы реализовали [многопользовательскую версию Prometheus] (https://www.weave.works/features/prometheus -мониторинг /), что может представлять интерес для некоторых из вас. – errordeveloper

21

У нас есть маркетинговое сообщение от двух компаний в других ответах. Теперь давайте проигнорируем его и вернемся в печальный реальный мир временных рядов данных.

Немного история

InfluxDB и Прометей были сделаны, чтобы заменить старые инструменты из прошлой эпохи (RRDTool, графит).

InfluxDB - это база данных временных рядов. Prometheus - это инструмент сбора и оповещения о метриках, с механизмом хранения, написанным именно для этого. (На самом деле я не уверен, что вы могли бы [или должен] повторно использовать двигатель для хранения чего-то еще)

Ограничения

К сожалению, написание базы данных является очень сложной задачей. Единственный способ, с помощью которого оба этих устройства могут отправлять что-то, - это сбросить все жесткие функции, связанные с высокой доступностью и кластеризацией.

Чтобы выразить это, это одно приложение, работающее только с одним узлом.

У Прометея нет цели для поддержки кластеризации и репликации вообще. Официальный способ поддержки отказоустойчивости - «запустить 2 узла и отправить данные обоим из них». Уч. (Обратите внимание, что это серьезно ТОЛЬКО существующий способ, это написано бесчисленное количество раз в официальной документации).

InfluxDB говорил о кластеризации в течение многих лет ... пока это официально не было отменено в марте. Кластеризация больше не на столе для InfluxDB. Просто забудь это. Когда это будет сделано (предположим, что это когда-либо), оно будет доступно только в Enterprise Edition.

https://influxdata.com/blog/update-on-influxdb-clustering-high-availability-and-monetization/

В течение следующих нескольких лет, мы надеемся, иметь хорошо спроектированный временных рядов базы данных, обрабатывающего все сложные проблемы, связанные с базами данных: репликации, отказоустойчивости, безопасности данных, масштабируемость , резервное копирование ...

На данный момент нет серебряной пули.

Что делать

Оценить объем данных можно ожидать.

100 метриков * 100 источников * 1 секунда => 10000 данных в секунду => 864 Мегапит-очки в день.

Приятная вещь о базах времен временного ряда заключается в том, что они используют компактный формат, они хорошо сжимаются, они объединяют данные и очищают старые данные. (Плюс к ним относятся функции, относящиеся к временным рядам данных.)

Предположим, что дата-точка рассматривается как 4 байта, это всего лишь несколько гигабайт в день. К счастью для нас, имеются системы с 10 ядрами и 10 ТБ дисками. Вероятно, это может работать на одном узле.

Альтернативой является использование классической базы данных NoSQL (Cassandra, ElasticSearch или Riak), а затем разработка недостающих бит в приложении. Эти базы данных не могут быть оптимизированы для такого типа хранилищ (или они: современные базы данных настолько сложны и оптимизированы, что они не могут точно знать, если они не определены).

Вы должны оценить емкость, требуемую приложением. Напишите доказательство концепции с этими различными базами данных и измерьте вещи.

Посмотрите, входит ли это в ограничения InfluxDB. Если это так, это, вероятно, лучший выбор. Если нет, вам придется сделать собственное решение поверх чего-то другого.

+1

Just FYI: с DalmatinerDB уже существует попытка (?) Для базы данных распределенных показателей, основанная на riak_core. Но я не уверен, насколько продвинут этот проект. – SpaceMonkey

+1

Мы используем ElasticSearch для хранения метрик в производстве при высокой нагрузке. Я могу подтвердить, что он далеко не идеален для этого случая использования: нет встроенного удержания (мы используем куратор Elastic на стороне), нет встроенного сжатия старых данных (мы запускаем пользовательский ETL сбоку) в предупреждении (мы запускаем ElalAlert от Yelp). –

12

InfluxDB просто не может удерживать производственную нагрузку (метрики) от 1000 серверов. У этого есть некоторые реальные проблемы с проглатыванием данных и заканчивается заторможенным/повешенным и непригодным. Мы пытались использовать его некоторое время, но как только количество данных достигло некоторого критического уровня, его больше нельзя было использовать. Не помогло обновление памяти или процессора. Поэтому наш опыт, безусловно, избегает его, это не зрелый продукт и имеет серьезные проблемы с архитектурным дизайном. И я даже не говорю о внезапном переходе к рекламе Influx.

Далее мы исследовали Prometheus, и в то время как он требовал переписать запросы, он теперь глотает в 4 раза больше показателей без каких-либо проблем, по сравнению с тем, что мы пытались подавать в Influx. И вся эта загрузка обрабатывается одним сервером Prometheus, она быстрая, надежная и надежная. Это наш опыт работы с огромным международным интернет-магазином под довольно большой нагрузкой.

Смежные вопросы