整合一切:InfluxDB 3.0的速度、性能和效率

导航至

在过去的一年中,我们InfluxData团队专注于发布InfluxDB的最新版本。迄今为止,我们已推出三个商业产品(InfluxDB Cloud ServerlessInfluxDB Cloud DedicatedInfluxDB Clustered),未来还将推出更多开源选项(有关InfluxDB 3.0开源计划的更多信息)。与此同时,我们一直宣称这一最新版本的InfluxDB超越了以往任何版本。我们不擅长空口承诺,因此本文将所有支持这一声明的现有信息汇总在一起。

有几个相互关联的因素和发展推动了InfluxDB的整体成功,我的目标是明确它们之间的联系。虽然其中一些内容不可避免地过于简化,但我鼓励读者查看文中链接的深入技术文章,以了解更多细节。那么,让我们直接进入正题。

重写

在这个旅程的开始,InfluxData创始人Paul Dix 决定使用Rust编写新的数据库版本。虽然Rust语言并不是最容易使用的,但它有许多内置优势。此外,我们用来构建新InfluxDB的一些开源项目也是用Rust编写的,但我们会稍后回到这一点。

除了从Go迁移到Rust之外,我们还重新配置了数据库的架构。在这个方面,一个关键决策是将计算和存储分离。这使得InfluxDB可以单独扩展这些组件,使用户在扩展数据库方面拥有更大的灵活性。

新版本InfluxDB试图解决的一个关键挑战是基数问题。因为旧版本将数据索引写入磁盘,用户能够导入和查询的数据系列数量与分配给写入和管理索引的内存量相关联(见此简短解释视频)。对于高基数用例,如跟踪,InfluxDB面临挑战。

我们知道,要优化InfluxDB以处理大型时间序列工作负载,我们必须解决基数问题。

走过的路

剧透一下:我们解决了基数问题。当思考哪个先出现时,是新的InfluxDB中的性能提升还是对无限基数数据的支持,这有点像是先有鸡还是先有蛋的问题。这些以及其他一些事项是相互关联的。

工具

我们团队做出的一个最关键的决定是将新版本建立在Apache Arrow生态系统之上。FDAP堆栈(《FDAP堆栈》(Apache Flight、DataFusion、Arrow和Parquet))提供了许多核心功能,并提供了我们既能使用也能贡献的开源工具。这不仅扩大了我们内部对开源的承诺,而且还允许我们为这些项目贡献时间特定的代码,这些代码有助于InfluxDB的功能,同时使InfluxDB与其他基于FDAP堆栈或其组件构建的解决方案更具互操作性。

列式数据库

使用Arrow作为数据表示层,使我们能够将InfluxDB构建为列式数据库。这是一个关键的发展,因为它与1.x/2.x版本相比发生了重大变化。我们选择列式方法的一个原因是因为它更适合数据压缩。列式方法还允许我们重新思考我们的数据模型。我们简化了数据模型,以便每个测量将数据分组在一起,而不是将其分割成单独的时间序列。这意味着数据库在摄入数据时工作量更小,因此可以更快地摄入数据。

压缩

列式框架使得按列压缩数据变得更加容易。这本身就是一个巨大的提升。我们将此与Apache Parquet作为我们的数据持久化格式相结合。Parquet设计用于与列式数据一起工作,并提供高数据压缩比率。因此,一旦数据到达Parquet文件,我们就能进一步压缩它。

结果

如果你跳过了“如何”部分直接看到我们所有辛勤工作的成果,请勿评判。

最初,我们希望消除阻碍InfluxDB处理所有时间序列工作负载的瓶颈。这意味着要解决基数问题,这意味着数据库需要能够实时摄入和查询大量数据而不会影响性能。

摄入

为了实现这一点,我们重构了数据库,这包括将计算和存储分离以使其可独立扩展。我们简化了数据摄入过程,使其使用更少的资源,并且不依赖于磁盘上的索引。实际上,v3.0可以以比之前的开源版本高45倍的吞吐量摄入数据。

存储和压缩

一旦所有数据进入InfluxDB,它会将新鲜和频繁查询的数据保存在热存储层。旧数据则以Apache Parquet文件的形式存入冷存储层。得益于列式格式和压缩友好的Parquet格式,InfluxDB 3.0实现了高比例压缩。这意味着您可以在更小的空间内存储更多、更高保真度的数据。

对于依赖于历史分析的用例,这是一个巨大的胜利,因为您不需要在分析完整性和存储成本之间做出选择。对于冷存储层,我们使用低成本云存储,如Amazon S3。当我们结合所有这些因素时,结果可以节省90%以上的成本。

查询

因此,到目前为止,我们可以大量摄取数据并以经济高效的方式存储。现在我们只需要能够查询和分析这些数据。对于查询方面,我们转向Apache DataFusion,这是一个使用Rust构建的先进查询引擎,它使用Arrow作为其内存模型。简而言之,它非常快,并且与数据库的其他部分配合良好。DataFusion的另一个优势是它允许我们内置对SQL的支持,这是许多用户多年来一直要求的功能。SQL支持不仅降低了入门门槛,DataFusion的纯粹速度也有助于InfluxDB 3.0提供实时结果。

数据可视化

最后一部分是数据分析和可视化。在3.0版本中,我们希望回到关注核心数据库。我们不再将资源投入到自定义可视化工具中,我们认为利用其他最佳工具更有意义。换句话说,我们不是让InfluxDB的这一版本试图做所有事情,而是专注于集成和互操作性。它具有与Grafana(也在这里)的原生集成,并且可以连接到Apache SuperSet和Tableau,其他工具的集成也在积极开发中。

展望未来

建立在开源之上也促进了与其他集成,例如与人工智能(AI)和机器学习(ML)解决方案的集成。与生成式AI工具不同的“真实世界”AI工具通常依赖于时间序列数据。这些是推动工业运营自动化和预测模型的解决方案,使它们更加高效和有效。同时,这些工具需要大量数据来训练其模型,时间序列数据的大量和速度使其成为关键来源。InfluxDB通过管理这些数据并在实时中使AI/ML工具可用,充当数据源、AI模型和最终用户分析之间的中介。

总结

为了强调这一点,请查看这些基准测试,比较InfluxDB 3.0与之前的开源版本。查看这些基准测试,与我们的产品相比,速度和性能的提升是显著的。

随着时间序列数据在各个行业和领域中的重要性日益增加,产生的数据量需要能够以实际速度、实时速度跟上,而不牺牲性能的解决方案。InfluxDB 3.0就是这样一个解决方案。最好的部分是,3.0版本只是开始,它只会越来越好。

与InfluxDB一起跳跃时间序列,今天开始构建一些令人惊叹的东西.