VictoriaMetrics 存储机制逻辑分析

VictoriaMetrics 是后出的一款面向可观测指标的时序数据存储和查询引擎, 传闻比prometheus 查询性能强,存储成本还低,我们也有做指标数据平台,特来学习下

以下分析基于 v1.45.x 版本

1. 核心结论

VictoriaMetrics 的存储设计可以概括为以下几点:

  • 使用 vminsertvmstoragevmselect 分离写入、存储与查询职责;
  • 采用 Prometheus 风格的单值时序模型,每个数据点由时间戳和浮点数值组成;
  • 根据指标名和标签生成时间序列标识 TSID
  • 将标签索引与原始时序数据分开存储;
  • 原始数据按 TSID 聚合,并将时间戳和值分别进行列式压缩;
  • 数据先写入内存,刷盘后形成不可变的 Part,再通过后台 Merge 合并;
  • 按月建立数据分区,通过 smallbig 两级目录平衡近期数据的读取速度与历史数据的压缩率;
  • 索引和数据均采用分层文件结构,通过元索引缩小读取范围;
  • 不依赖传统 WAL,在异常退出时可能丢失尚未刷盘的数据。

2. 集群架构

VictoriaMetrics 集群由三个核心组件组成。

组件 主要职责
vminsert 接收写入请求,通过一致性哈希将数据分发到不同的 vmstorage 节点
vmstorage 保存标签索引和时序数据,并执行本地检索
vmselect 接收查询请求,从一个或多个 vmstorage 节点读取数据并汇总结果

三个组件可以分别扩容。vmstorage 采用 Shared-Nothing 架构:节点之间不共享数据,也不需要互相通信。这种结构降低了节点间协调成本,使扩容和故障隔离更简单。


指标数据逻辑存储模型

指标数据逻辑存储模型

常见的时序数据库的数据模型,主要分成单值模型和多值模型

单值模型是根据业务指标数据建模,按照单个指标的细粒度进行数据使用和逻辑存储,如下所示,一行数据只有一个指标值,即value列。目前采用单值模型的时序数据库,有OpenTSDB、 KairosDB、Prometheus等。

1
2
3
4
单值模型:
time host metric value
2026-08-08 10:00:00 web01 cpu_usage 72
2026-08-08 10:00:00 web01 io_usage 31

多值的模型则是针对数据源建模,我们每一行数据针对的是一个数据源,它的被测量的多个指标在同一列上,如下所示,一行数据有多个指标值,即有cpu和io两列。目前采用多值模型的时序数据库,有InfluxDB、TimescaleDB等。

1
2
3
多值模型:
time host cpu_usage io_usage
2026-08-08 10:00:00 web01 72 31

可以把两者理解为:

  • 单值模型:一条时序记录只描述一个指标。
  • 多值模型:一条时序记录同时描述同一数据源在同一时刻的多个指标。

严格来说,多值模型中的多个指标是放在同一行的不同列/字段中,而不是同一列。


分布式 Trace 数据模型

分布式 Trace 数据模型

distributed-tracing 数据模型

通过跟踪从前端到后端的交互,通过trace数据,可以扩展现有的错误数据,跟踪软件的性能,测量吞吐量和延迟等指标,并显示跨多个系统的错误影响:

  • 出现特定错误事件或问题时发生了什么
  • 哪些因素导致应用程序出现瓶颈或延迟问题
  • 哪些的endpoint或操作消耗时间最多

什么是追踪?

首先,请注意Trace不是什么:Trace不是分析。尽管概要分析和跟踪的目标有相当多的重叠,虽然它们都可用于诊断应用程序中的问题,但它们在测量的内容和记录数据的方式方面有所不同。

一个Profiler可以测量任何数目的应用程序的操作的各方面的:指令执行数,正在使用的各种处理的内存量,给定的时间的函数调用需要的量,等等。生成的配置文件是这些测量值的统计汇总。

一个tracer工具,在另一方面,侧重于什么事(何时),而不是发生了多少次发生或者花了多长时间。trace的结果是在程序执行期间发生的事件日志,这些事件往往跨越多个系统。就 Sentry 的跟踪而言,总是——包括时间戳,允许计算持续时间,但测量性能并不是它们的唯一目的。它们还可以显示互连系统交互的方式,以及一个系统中的问题可能导致另一个系统出现问题的方式。

(备注:除了测量性能外,还可以做故障的根因分析)


用户行为分析中的Events数据模型概述

用户行为分析基础模型的约束概述

不同于传统的BI工具,用户行为分析中的所有分析模型均是基于元数据抽象的分析模型,它底层的数据模型其实是非常简单的,即三个主体模型:用户、事件以及item,其中item只是补充作用

基础模型的特点

  1. 基于元数据来构建的
  2. 去业务的
  3. 有约束的
    1. 基于事件、用户、item模型
    2. 约定数据格式
  4. 统一用户的标识(多端的用户打通、登录前和登录后的打通)

后续的分析模型都是解决一类特定场景的问题,先定义场景,再拆解场景,最后在套用模型进行分析

主体描述:

事件:可追加,无状态的数据。用主谓宾来描述 谁在什么时候什么地点以什么方式做了一件什么事情,其5要素为:


Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×