InfluxDB 与 Graphite 在时间序列数据和指标方面的基准测试
作者:Chris Churilo / 产品,用例
2019 年 5 月 31 日
导航至
此博客文章已于 2020 年 9 月 10 日更新,包含 InfluxDB 1.8.0 和 Graphite 1.1.7 的最新基准测试结果。此博客会定期更新最新的基准测试数据。
在 InfluxData,我们经常被开发者和架构师问到的一个常见问题是:“对于时间序列工作负载,InfluxDB 与 Graphite 相比如何?” 这个问题可能是由以下几个原因引起的。首先,如果他们正在启动一个全新的项目,并且正在尽职调查地评估几个解决方案的正面交锋,那么这对于创建他们的比较网格会很有帮助。其次,他们可能已经在现有应用程序中使用 Graphite 摄取日志,但现在想看看如何将指标收集集成到他们的系统中,并认为可能有一种比 Graphite 更好的解决方案。
我们着手比较 InfluxDB 和 Graphite 在时间序列工作负载方面的性能和功能,特别是关注数据摄取率、磁盘数据压缩和查询性能。InfluxDB 在两项测试中均优于 Graphite,写入吞吐量高出 14 倍,而磁盘空间使用量却比 Graphite 的时间序列优化配置少 7 倍。与 Graphite 缓存查询的响应时间相比,InfluxDB 的查询响应速度快 10 倍。
我们认为这些数据对于工程师评估这两种技术在其用例中的适用性将很有价值;具体而言,涉及自定义监控和指标收集、实时分析、物联网 (IoT) 和传感器数据以及容器或虚拟化基础设施指标的时间序列用例。基准测试练习没有考虑 InfluxDB 对基于时间序列的工作负载以外的工作负载的适用性。InfluxDB 并非旨在满足全文搜索或日志管理用例,因此不在本文讨论范围之内。对于这些用例,我们建议坚持使用 Graphite 或类似的全文搜索引擎。
要阅读基准测试和方法的完整详细信息,请下载“InfluxDB 与 Graphite 在时间序列数据和指标管理方面的基准测试”技术文档。
我们的首要目标是创建一个一致且最新的比较,以反映 InfluxDB 和 Graphite 的最新发展,并在稍后涵盖其他数据库和时间序列解决方案。我们将定期重新运行这些基准测试,并使用我们的发现更新详细的技术文档。这些基准测试的所有代码都可以在 GitHub 上找到。如果您有任何问题、意见或建议,请随时在该存储库上提出问题或拉取请求。
现在,让我们看一下结果…
测试版本
InfluxDB v1.8.0
InfluxDB 是一个用 Go 语言编写的开源时间序列数据库。它的核心是一个名为 Time-Structured Merge (TSM) Tree 的自定义构建存储引擎,该引擎针对时间序列数据进行了优化。InfluxDB 由一种名为 InfluxQL 的自定义类 SQL 查询语言控制,为跨时间范围的数学和统计函数提供开箱即用的支持,非常适合自定义监控和指标收集、实时分析以及物联网和传感器数据工作负载。
Graphite v1.1.7
Graphite 是一个开源的、面向数值时间序列数据的数据库和一个图形渲染引擎,用 Python 编写。它由一个碳守护程序组成,该守护程序侦听时间序列数据并将其存储在磁盘上的 Whisper 数据库中,以及一个用 Django 框架编写的 Graphite Web 应用程序,用于按需渲染图形。
在构建具有代表性的基准测试套件时,我们确定了处理时间序列数据时最常评估的特征。我们从三个方面考察了性能
- 数据摄取性能 – 以每秒值数衡量
- 磁盘存储需求 – 以字节为单位衡量
- 平均查询响应时间 – 以毫秒为单位衡量
关于数据集
对于此基准测试,我们专注于一个数据集,该数据集模拟了常见的 DevOps 监控和指标用例,其中服务器集群定期以规则的时间间隔报告系统和应用程序指标。我们每 10 秒对 9 个子系统(CPU、内存、磁盘、磁盘 I/O、内核、网络、Redis、PostgreSQL 和 Nginx)中的 100 个值进行采样。对于关键比较,我们查看了一个代表 100 台服务器在 24 小时内的数据集,这代表了相对适度的部署。
- 服务器数量:100
- 每个服务器测量的指标值:100
- 测量间隔:10 秒
- 数据集持续时间:24 小时
- 数据集中的总值:每天 8700 万
这只是整个基准测试套件的一个子集,但它是一个具有代表性的示例。如果您对其他详细信息感兴趣,可以在 GitHub 上阅读有关测试方法的更多信息。
写入性能
在数据摄取方面,InfluxDB 的性能比 Graphite 高出 14 倍。
磁盘压缩
对于时间序列数据,InfluxDB 的压缩率比 Graphite 高出 7 倍。
查询性能
在返回缓存查询时,InfluxDB 在时间序列数据方面提供了 10 倍的性能提升。
总结
最终,你们中的许多人可能不会惊讶于,专为处理指标而设计的时间序列数据库在处理这些类型的工作负载时,会显著优于搜索数据库。尤其明显的是,当工作负载需要可扩展性时,就像实时分析和传感器数据系统的常见特征一样,像 InfluxDB 这样的专用时间序列数据库会带来巨大的不同。
总而言之,我们强烈建议开发人员和架构师自行运行这些基准测试,以独立验证他们在自己选择的硬件和数据集上的结果。但是,对于那些正在寻找一个有效的起点来了解哪种技术将提供更好的时间序列数据摄取、压缩和查询性能“开箱即用”的人来说,InfluxDB 是所有这些维度上的明显赢家,特别是当数据集变得更大且系统运行时间更长时。