InfluxData最近公布了其最新时间序列数据库InfluxDB 3.0的系统架构。其架构包含四个主要组件,负责数据摄取、查询、压缩和垃圾回收,并包括两种主要存储类型。它还适用于在现场和主要云服务提供商上本地运行数据库。
InfluxDB 3.0架构的中心支柱是工程师们对主要组件进行的解耦设计。这些组件不直接彼此通信,而是通过目录和对象存储来进行通信。例如,数据摄取器和查询器并不知道压缩器和垃圾收集器的存在。因此,这些组件可以独立扩展和部署,在不同的方式下使用。
数据摄取组件(蓝色部分)负责处理数据输入到数据库的过程。用户将数据写入摄取路由器(Ingest Router),它将数据分片到一个摄取器(Ingester)中,根据数据工作负载的情况,可以扩展摄取器的数量。
每个摄取器识别表,验证数据模式,按照“时间”列对数据进行分区、去重并将其持久化为Parquet文件。摄取器还会更新目录,通知其他组件有新数据到达。InfluxDB优化了写入路径,将写入延迟保持在毫秒级别。
数据查询组件(绿色部分)处理用户使用SQL或InfluxQL的查询。用户将查询发送到查询路由器(Query Router),它将查询转发给查询器(Querier)。查询器读取所需数据,为查询构建计划,执行查询并返回结果。
查询器可以根据查询工作负载进行扩展。它们执行任务,如缓存元数据、读取和缓存数据、与摄取器通信以获取尚未持久化的数据,并构建和执行最优查询计划。
数据压缩(红色部分)是解决在对象存储中存储许多小文件可能影响查询性能的问题的过程。压缩器在后台作业中运行,读取新摄取的文件并将其压缩为更少、更大且不重叠的文件。这个过程通过在查询时显著减少IO来提高查询性能。
压缩器的数量可以根据压缩工作负载进行扩展,考虑到具有新数据文件的表的数量、文件的大小以及新文件与现有文件的重叠数量等因素。
垃圾收集组件(粉色部分)负责管理数据库内的数据保留和空间回收。它通过后台作业进行软删除和硬删除。
目录包括有关数据库、表、列和文件的元数据,InfluxDB使用Postgres兼容的数据库来管理此目录。另一方面,对象存储仅包含Parquet文件,可以存储在本地磁盘、Amazon S3、Azure Blob Storage或Google Cloud Storage等平台上。