共计 2422 个字符,预计需要花费 7 分钟才能阅读完成。
VictoriaMetrics 是一个疾速的工夫序列数据库。它反对 Prometheus PromQL 查问,其具备以下突出特点:
- 对高基数数据具备十分高的写入性能。无关详细信息,请参见本文。
- 对大量数据时具备很高的查问性能。无关详细信息,请参见本文和此电子表格。
- 对工夫序列数据具备高压缩率。
- 在线即时快照,而不会影响数据库操作。
让咱们钻研一下 VictoriaMetrics 反对下的即时快照如何工作。
简略介绍 ClickHouse
VictoriaMetrics 将数据存储在相似于 ClickHouse 的 MergeTree 表 数据结构中。它是用于剖析数据和其余事件流的最快的数据库。在典型的剖析查问上,它的性能要比 PostgreSQL 和 MySQL 等传统数据库高 10 到 1000 倍。这意味着单个 ClickHouse 服务器能够代替大量的惯例数据库。
ClickHouse 的速度如此之快,这要归功于其 MergeTree 表引擎的架构。
什么是 MergeTree?
MergeTree 是面向列的表引擎,其建设在相似于 Log Structured Merge Tree 的数据结构上。MergeTree 属性:
- 每列的数据别离存储。因为不须要在读取和跳过其余列的数据上破费资源,因而缩小了列扫描期间的开销。因为各个列通常蕴含类似的数据,因而这也进步了每列的压缩率。
- 行按 ” 主键 ” 排序,该主键能够蕴含多列。主键没有惟一的束缚 – 多行可能具备雷同的主键。这样能够通过主键或其前缀疾速进行行查找和范畴扫描。另外,因为间断排序的行通常蕴含类似的数据,因而能够进步压缩率。
- 行被分成中等大小的块。每个块由每个列的子块组成。每个块都是独立解决的。这意味着在多 CPU 零碎上具备靠近完满的可扩展性 – 只需为所有可用的 CPU 内核提供独立的块即可。能够配置块大小,然而倡议应用大小在 64KB-2MB 之间的子块,因而它们适宜 CPU 缓存。因为 CPU 缓存拜访比 RAM 拜访快得多,因而能够进步性能。另外,当必须从具备多行的块中仅拜访几行时,这会缩小开销。
- 块合并为 ”parts”。这些 parts 相似于 LSM 树中的 SSTables。ClickHouse 在后盾将较小的 parts 合并为较大的 parts。与标准的 LSM 不同,MergeTree 没有严格的 part 大小。合并过程进步了查问性能,因为每次查问都查看了较少的 parts。另外,合并过程缩小了数据文件的数量,因为每个局部都蕴含与列数成比例的固定数量的文件。Parts 合并还有另一个益处 – 更好的压缩率,因为它能够挪动更靠近已排序行的列数据。
- Parts 通过 ” 分区 ” 分组到分区中。最后,ClickHouse 容许在 ”Date” 列上创立每月分区。当初,能够应用任意表达式来构建分区键。分区键的不同值导致不同的分区。这样能够疾速不便地按分区进行数据存档 / 删除。
接下来真正介绍 VictoriaMetrics 中的即时快照。
VictoriaMetrics 中的即时快照
VictoriaMetrics 将工夫序列数据存储在相似 MergeTree 的表中,因而它受害于上述性能。此外,它还存储了倒排索引,以便通过给定的工夫序列选择器进行疾速查找。倒排索引存储在 mergeset 中 – 一种数据结构,该数据结构建设在 MergeTree 思维的根底上,并针对倒排索引查找进行了优化。
MergeTree 还有一个下面没有提到的重要属性 – 原子性。这意味着:
- 新减少的 parts 要么呈现在 MergeTree 中,要么无奈呈现。MergeTree 从不蕴含局部创立的 parts。合并过程也是如此 –parts 要么齐全合并为新 part,要么无奈合并。MergeTree 中没有局部合并的 parts。
- MergeTree 中的 parts 内容永不变。Parts 是不可变的。合并到更大的 Part 后,才能够删除它们。
这意味着 MergeTree 始终处于统一状态。
许多文件系统都提供诸如硬链接之类的 ” 怪兽 ”。硬链接文件共享原始文件的内容。它与原始文件没有区别。硬链接不会在文件系统上占用额定的空间。删除原始文件后,硬链接文件将成为“原始文件”,因为它成为指向原始文件内容的惟一文件。无论文件大小如何,都会立刻创立硬链接。
VictoriaMetrics 应用硬链接为工夫序列数据和倒排索引创立即时快照,因为它们都存储在相似 MergeTree 的数据结构中。它只是从原子上将所有 parts 的所有文件硬链接到快照目录。这是平安的,因为 parts 永远不会扭转。之后,能够应用任何适合的工具(例如,用于云存储的 rsync 或 cp)将快照备份 / 存档到任何存储(例如,Amazon S3 或 Google Cloud Storage)。存档前无需进行快照压缩,因为它已蕴含高度压缩的数据 –VictoriaMetrics 为工夫序列数据提供了最佳的压缩率。
新创建的快照在文件系统上不占用额定的空间,因为其文件指向 MergeTree 表中的现有文件。即便快照大小超过 10 TB 也是如此!在原始 MergeTree 合并 / 删除从快照链接的局部之后,快照开始占用额定的空间。因而,不要遗记删除旧快照以开释磁盘空间。
论断
VictoriaMetrics 基于 ClickHouse 中 MergeTree 表引擎的杰出构想构建了即时快照。能够随时创立这些快照,而不会在 VictoriaMetrics 上造成任何停机工夫或失常操作的中断。
能够在单 docker 镜像或单服务器二进制文件上评估快照性能。可通过以下 http 处理程序应用:
/snapshot/list
— 列出所有可用的快照/snapshot/create
— 创立一个新的快照/snapshot/delete?snapshot=…
— 删除指定的快照
创立的快照位于 /<-storageDataPath>/snapshots
目录下,其中 -storageDataPath
是命令行标记,其中蕴含 VictoriaMetrics 存储数据的文件系统门路。
PS: 本文属于翻译,原文