InfluxDB v3存储引擎架构
InfluxDB v3存储引擎是一个基于Rust语言构建的实时列式数据库,它优化了时间序列数据,并在Apache Arrow和DataFusion之上构建。它支持无限的标签基数(唯一标签值的数量)、实时查询,并优化以降低存储成本。
存储引擎图
存储引擎组件
路由器
路由器(也称为数据收集路由器)解析传入的行协议,并将其路由到数据收集器。为了确保写入持久性,路由器将数据复制到两个或更多的可用数据收集器。
路由器扩展策略
路由器可以垂直和水平扩展。水平扩展增加写入吞吐量,通常是路由器最有效的扩展策略。垂直扩展(特别是CPU增加)提高了路由器解析传入行协议的较低延迟。
数据收集器
Ingester处理写入请求中提交的行协议,并将时间序列数据持久化到对象存储。在这个过程中,Ingester执行以下操作:
- 查询目录以确定数据应持久化的位置,并确保行协议的架构与持久化数据的架构兼容。
- 接受或拒绝写入请求中的点,并生成响应。
- 处理行协议并将时间序列数据以Apache Parquet格式持久化到对象存储。每个Parquet文件代表一个分区,即数据的逻辑分组。
- 使尚未持久化的数据可供查询器使用,以确保查询结果中包含最新的边缘数据。
- 维护一个短期的预写日志(WAL),以防服务中断导致数据丢失。
Ingester扩展策略
Ingester可以垂直和水平扩展。垂直扩展增加写入吞吐量,通常是Ingester最有效的扩展策略。
查询器
查询器处理查询请求并返回查询结果。它通过Apache Arrow DataFusion支持SQL和InfluxQL。
查询生命周期
在查询时间,查询器
接收查询请求并构建查询计划。
查询Ingesters以
- 确保查询计划假定的架构与写入数据的架构匹配
- 将最近写入的,尚未持久化的数据包含在查询结果中
读取包含查询数据的分区Parquet文件,并扫描每一行以过滤出与查询计划中的谓词匹配的数据。
执行查询计划中指定的任何其他操作(例如:去重、合并和排序)。
将查询结果返回给客户端。
查询器扩展策略
查询器可以垂直和水平扩展。水平扩展增加查询吞吐量,可以处理更多的并发查询。垂直扩展提高查询器处理计算密集型查询的能力。
目录
目录是一个兼容PostgreSQL的关系数据库,用于存储与时间序列数据相关的元数据,包括架构信息和对象存储中分区的物理位置。它承担以下角色:
目录扩展策略
可用于目录的扩展策略取决于运行目录的兼容PostgreSQL数据库。所有支持垂直扩展。大多数支持水平扩展以实现冗余和故障转移。
对象存储
对象存储包含以Apache Parquet格式的时序数据。每个Parquet文件代表一个分区。默认情况下,InfluxDB按天分区表,但您可以通过自定义分区策略。每个Parquet文件中的数据已排序、编码和压缩。
对象存储扩展策略
可用于对象存储的扩展策略取决于运行对象存储的底层对象存储服务。大多数支持水平扩展以实现冗余、故障转移和增加容量。
压缩器
压缩器处理并压缩对象存储中的分区,以持续优化存储。然后更新压缩数据的目录位置。
压缩器扩展策略
压缩器可以垂直和水平扩展。垂直扩展(特别是增加可用CPU)是压缩器最有效的扩展策略,因为压缩是一个计算密集型过程。水平扩展可以增加压缩吞吐量,但不如垂直扩展有效。
垃圾回收器
垃圾回收器运行后台任务,驱逐已过期或删除的数据,删除过时的压缩文件,并在目录和对象存储中回收空间。
垃圾回收器扩展策略
垃圾回收器未设计为分布式负载,不应水平扩展。垃圾回收器不执行CPU或内存密集型工作,因此只有在观察到非常高的CPU使用率或容器经常耗尽内存的情况下,才应考虑垂直扩展。
这个页面有帮助吗?
感谢您的反馈!