InfluxDB与Graphite时序数据与指标基准比较

导航到

本博客文章已于2020年9月10日更新,包含InfluxDB 1.8.0和Graphite 1.1.7的最新基准结果。本博客会定期更新最新的基准数据。

在InfluxData,我们经常被开发者和架构师问到一个常见问题:“InfluxDB与Graphite在时序工作负载上如何比较?”这个问题可能由几个原因引起。首先,如果他们正在启动一个全新的项目,并且正在评估几个解决方案,这可能有助于他们创建比较表格。其次,他们可能已经在现有应用程序中使用Graphite来处理日志,但现在希望看到他们如何将指标收集集成到系统中,并相信可能比Graphite有更好的解决方案。

我们旨在比较InfluxDB和Graphite在时序工作负载中的性能和功能,特别是关注数据摄入率、磁盘数据压缩和查询性能。在两次测试中,InfluxDB的表现优于Graphite,写入吞吐量高出14倍,与Graphite的时序优化配置相比,磁盘空间使用量减少7倍。在测试查询中,InfluxDB的响应时间是Graphite缓存查询响应时间的10倍。

我们认为这些数据将证明对评估这两种技术对其用例的适用性的工程师是有价值的;特别是涉及自定义监控和指标收集、实时分析、物联网(IoT)和传感器数据,以及容器或虚拟化基础设施指标的时序用例。基准测试没有考虑InfluxDB除时序型工作负载之外的适用性。InfluxDB不是为满足全文搜索或日志管理用例而设计的,因此将不在此范围内。对于这些用例,我们建议继续使用Graphite或类似的全文搜索引擎。

要阅读基准测试和方法的完整详情,请下载“InfluxDB与Graphite时序数据与指标管理基准测试”技术论文。

我们的主要目标是创建一个一致、最新的比较,反映InfluxDB和Graphite的最新发展,并随后涵盖其他数据库和时序解决方案。我们将定期重新运行这些基准测试,并更新我们的详细技术论文。所有这些基准测试的代码都可在GitHub上找到(GitHub链接)。如果您有任何问题、评论或建议,请随时在该存储库上打开问题或拉取请求。

现在,让我们来看看结果……

测试版本

InfluxDB v1.8.0

InfluxDB是一个用Go语言编写的开源时间序列数据库。其核心是一个自定义的存储引擎,称为时间结构合并树(TSM树),针对时间序列数据进行优化。由类似于SQL的自定义查询语言InfluxQL控制,InfluxDB提供开箱即用的支持,用于在时间范围内进行数学和统计函数,非常适合自定义监控和指标收集、实时分析以及物联网和传感器数据处理。

Graphite v1.1.7

Graphite是一个开源的、面向数值时间序列数据的数据库和图形渲染引擎,用Python编写。它由一个监听时间序列数据并将其存储在磁盘上Whisper数据库的carbon守护程序组成,以及一个用于按需渲染图形的Django框架编写的Graphite网络应用。

在构建一个代表性的基准测试套件时,我们确定了处理时间序列数据时最常评估的特性。我们分析了三个方面的性能

  • 数据摄取性能——以每秒值来衡量
  • 磁盘存储需求——以字节来衡量
  • 平均查询响应时间——以毫秒来衡量

关于数据集

对于这个基准测试,我们关注了一个模拟常见的DevOps监控和指标用例的数据集,其中一组服务器定期以固定时间间隔报告系统和应用程序指标。我们每10秒采样9个子系统(CPU、内存、磁盘、磁盘I/O、内核、网络、Redis、PostgreSQL和Nginx)的100个值。对于关键比较,我们查看一个代表24小时内的100台服务器的数据集,这代表了一个相对适度的部署。

  • 服务器数量:100
  • 每台服务器测量的值:100
  • 测量间隔:10s
  • 数据集持续时间(s):24h
  • 数据集中总值:每天87M

这只是一个基准测试套件的子集,但是一个代表性的例子。如果您想了解更多细节,可以在GitHub上了解更多关于测试方法的信息。

写入性能

在数据摄取方面,InfluxDB比Graphite快14倍。

influxdb vs graphite write throughput

磁盘压缩

InfluxDB在时间序列数据方面优于Graphite,提供了7倍的压缩。

influxdb vs graphite on-disk storage

查询性能

当返回缓存查询时,InfluxDB为时间序列数据提供了10倍的性能。

influxdb vs graphite query throughput performance

总结

最终,许多人可能不会对专门为处理指标而设计的、针对时间序列数据优化的数据库明显优于这些类型的工作负载的搜索引擎数据库感到惊讶。特别是,当工作负载需要可扩展性时,这是实时分析和传感器数据系统的一个常见特征,专门为时间序列数据设计的InfluxDB可以带来巨大的差异。

总的来说,我们强烈建议开发人员和架构师自行运行这些基准测试,以在所选硬件和数据集上独立验证结果。然而,对于那些寻找在开箱即用的时间序列数据摄取、压缩和查询性能方面有更好表现的技术的人来说,InfluxDB在这些维度上都是明显的赢家,尤其是在数据集变得更大,系统运行时间更长的情况下。

接下来是什么?