用例:InfluxDB与Prometheus [关闭]


68

Prometheus网页之后,Prometheus和InfluxDB之间的一个主要区别是用例:虽然Prometheus存储时间序列,但只有InfluxDB更好地适合于存储单个事件。由于在InfluxDB的存储引擎上做了一些重要的工作,所以我想知道这是否仍然正确。

我想建立一个时间序列数据库,除了推/推模型(可能会有性能上的差异)之外,我看不出将两个项目分开的大事。有人可以解释用例的区别吗?

Answers:


85

InfluxDB的首席执行官和开发人员在这里。InfluxDB的下一版本(0.9.5)将具有我们的新存储引擎。使用该引擎,我们将能够有效地存储单个事件数据或定期采样的序列。即不规则和规则时间序列。

InfluxDB支持int64,float64,bool和string数据类型,每种类型使用不同的压缩方案。Prometheus仅支持float64。

对于压缩,0.9.5版本将具有与Prometheus竞争的压缩能力。在某些情况下,我们会看到更好的结果,因为我们会根据看到的内容更改时间戳的压缩率。最佳情况是按固定间隔采样的常规序列。在默认情况下,我们可以将1k点的时间戳压缩为8字节的开始时间,增量(Zig-Zag编码)和计数(也采用Zig-Zag编码)。

根据数据的形状,我们发现压缩后平均每点<2.5个字节。

基于您的时间戳,数据类型和数据形状的YMMV。例如,具有大可变增量的具有纳秒级时间戳的随机浮点将是最差的。

时间戳中的可变精度是InfluxDB的另一个功能。它可以表示秒,毫秒,微秒或纳秒的刻度时间。普罗米修斯固定为毫秒。

另一个区别是,在将成功响应发送到客户端之后,对InfluxDB的写入是持久的。Prometheus缓冲区在内存中写入,默认情况下每5分钟刷新一次,这打开了一个潜在的数据丢失窗口。

我们希望,一旦发布0.9.5的InfluxDB,对于Prometheus用户来说,将其用作长期指标存储(与Prometheus结合使用)将是一个不错的选择。我很确定Prometheus已经提供了支持,但是在0.9.5版本下降之前,它可能有些困难。显然,我们必须一起工作并进行大量测试,但这就是我所希望的。

对于单服务器指标的摄取,我希望Prometheus会有更好的性能(尽管我们在这里没有做任何测试,也没有数字),因为它们的数据模型更受限制,并且因为它们在写出索引之前不会在磁盘上追加写操作。

两者之间的查询语言非常不同。我不确定他们尚不支持我们,反之亦然,因此您需要深入研究两者的文档,以查看是否有您可以做的事情。从长远来看,我们的目标是使InfluxDB的查询功能成为Graphite,RRD,Prometheus和其他时间序列解决方案的超集。之所以说超集,是因为我们稍后还要覆盖更多的分析功能。显然,我们要花时间才能到达那里。

最后,InfluxDB的长期目标是通过群集支持高可用性和水平可伸缩性。当前的群集实现功能尚未完成,仅在Alpha中。但是,我们正在努力,这是该项目的核心设计目标。我们的集群设计是数据最终是一致的。

据我所知,Prometheus的方法是对HA使用两次写入操作(因此最终没有一致性保证),并使用联合进行水平可伸缩性。我不确定跨联合服务器的查询如何工作。

在InfluxDB集群中,您可以跨服务器边界进行查询,而无需通过网络复制所有数据。这是因为每个查询都被分解为一种MapReduce作业,该作业可以即时运行。

可能还有更多,但这是我目前能想到的。


38
Prometheus开发人员在这里。Paul是对的,Prometheus是并且将始终是仅浮点的(通过标签以有限的方式可以使用字符串),而InfluxDB支持许多数据类型。我认为查询语言实际上在功能上非常相似(Prometheus是Turing Complete)。我们的HA方法是使用隔离的冗余服务器,alertmanager将从中删除警报。通常,我们采用AP方法进行监视而不是CP,因为丢失一些数据比监视发生故障要好一些。Prometheus的目标是成为在紧急情况下可以依靠的系统。
brian-巴西

9
InfluxDB集群设计在很大程度上也是AP,但其目的是最终保持一致。我们通过“提示切换”(在当前版本中可用)和“主动反熵”(我们将从0.9.6发布周期开始)来实现这一目标。显然,我们还没有完成聚类,但这就是设计目标。此处有更多详细信息:influxdb.com/blog/2015/06/03/InfluxDB_clustering_design.html
Paul Dix

13
另一个Prometheus开发人员在这里。是的,Prometheus本身并不是要成为持久的长期存储。但是在其他方面,它的范围更大,更多地涉及活动系统和服务监视:来自客户端库(客户端库不仅讲一些度量标准输出协议,而且可以帮助您管理度量标准原语,例如计数器,计量器,直方图和摘要) ,主动目标发现/数据收集,仪表板,所有方式提醒计算和通知处理。查询语言也不像SQL,但是对于维时间序列数据的计算非常有效。
Julius

7
是的,我必须抽出时间来(重新)评估InfluxDB 0.9.5作为Prometheus的长期存储候选者-我希望它可以解决与早期InfluxDB版本有关的所有/大多数问题。过去有关磁盘空间,提取速度和查询性能的信息。我们真的想将长期存储委托给外部系统(例如InfluxDB,如果工作良好),而不是自己解决。
Julius

10
两者之间的主要设计差异意味着,使用Prometheus,除了现在将时间戳附加到导入的度量标准之外没有简单的方法。如果用例涉及可能会延迟的源,则这可能会破坏交易。InfluxDB在这方面似乎没有受到任何限制
安塔克

34

在其他答案中,我们已经从两家公司获得了营销信息。现在让我们忽略它,回到时间数据系列的悲惨现实世界。

一些历史

使用InfluxDB和Prometheus来代替过去的旧工具(RRDtool,石墨)。

InfluxDB是一个时间序列数据库。Prometheus是一种指标收集和警报工具,为此专门编写了一个存储引擎。(我实际上不确定您是否可以[或应该]将存储引擎重用于其他用途)

局限性

可悲的是,编写数据库是一项非常复杂的工作。这两种工具设法运送某些东西的唯一方法是删除所有与高可用性和群集有关的硬功能。

坦率地说,它是仅运行单个节点的单个应用程序。

Prometheus没有任何目标来支持群集和复制。支持故障转移的官方方法是“运行2个节点并将数据发送到两个节点”。哎哟。(请注意,这实际上是唯一可能的方式,在官方文档中写了无数次)。

InfluxDB一直在讨论集群问题……直到三月份正式被放弃。InfluxDB不再是集群。把它忘了吧。完成后(假设曾经如此),它将仅在企业版中可用。

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

在未来几年内,我们有望建立一个设计良好的时序数据库,该数据库可以处理与数据库有关的所有难题:复制,故障转移,数据安全,可伸缩性,备份...

目前,还没有银弹。

该怎么办

评估预期的数据量。

100个指标* 100个源* 1秒=>每秒10000个数据点=>每天864个兆数据点

关于时间序列数据库的好处是它们使用紧凑的格式,可以很好地压缩,可以聚合数据点,还可以清除旧数据。(此外,它们还具有与时间数据序列相关的功能。)

假设一个数据点被视为4个字节,那么每天只有几个千兆字节。对我们来说幸运的是,有10核和10 TB驱动器的系统随时可用。那可能在单个节点上运行。

替代方法是使用经典的NoSQL数据库(Cassandra,ElasticSearch或Riak),然后设计应用程序中的缺失位。这些数据库可能没有针对这种存储进行优化(或者是?现代数据库是如此复杂和优化,除非经过基准测试,否则无法确定)。

您应该评估应用程序所需的容量。用这些各种数据库编写概念证明并度量事物。

查看它是否在InfluxDB的限制之内。如果是这样,那可能是最好的选择。如果没有,您将不得不在其他东西之上制定自己的解决方案。


1
仅供参考:使用DalmatinerDB,已经有尝试(?)基于riak_core的分布式指标数据库。但是我不确定这个项目有多先进。
SpaceMonkey '16

2
我们使用ElasticSearch在高负载下存储生产中的指标。我可以确认这对于该用例而言远非理想:没有内置的保留功能(我们在一侧使用Elastic的curator),没有内置的旧数据压缩(我们在一侧运行了自定义ETL)并且没有内置的发出警报(我们在侧面运行Yelp的ElastAlert)。
安德烈·卡隆

18

InfluxDB根本无法容纳1000台服务器的生产负载(指标)。它在数据摄取方面存在一些实际问题,并且最终陷入停滞/挂起且无法使用。我们尝试使用它一段时间,但是一旦数据量达到某个临界水平,便无法使用。没有内存或CPU升级帮助。因此,我们的经验肯定是避免使用它,它不是成熟的产品,并且存在严重的建筑设计问题。我什至没有谈论Influx突然转向商业领域。

接下来,我们研究了Prometheus,尽管它需要重写查询,但与我们尝试向Influx提供的内容相比,它现在吸收的指标多了4倍,没有任何问题。而且所有负载均由单个Prometheus服务器处理,它是快速,可靠和可靠的。这是我们在巨大的负载下经营大型国际互联网商店的经验。


1
我在这里是因为我们在InfluxDB中遇到类似的问题,尤其是内存问题。我们的部署较小(服务器为100台)。感谢分享。
亚历山大·托斯汀

5

IIRC当前的Prometheus实现围绕单个服务器上的所有数据拟合进行设计。如果您有大量的数据,则可能无法完全适用于Prometheus。


好点子!但是,假设我将把我的东西放在一个节点上,并且一切都会正常进行:)
SpaceMonkey 2015年

5
Prometheus开发人员在这里,尽管很少需要,但可以将Prometheus扩展到单个服务器之外。我们非常重视可靠性,而不是一致性,因为这很适合进行关键监视,因此请避免集群化。参见robustperception.io/scaling-and-federating-prometheus
brian

在Weave Cloud中,我们已经实现了Prometheus的多租户版本,您中的某些人可能会感兴趣。
errordeveloper
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.