惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Jina AI
Jina AI
Google DeepMind News
Google DeepMind News
C
Cybersecurity and Infrastructure Security Agency CISA
T
Tenable Blog
T
The Exploit Database - CXSecurity.com
Latest news
Latest news
G
GRAHAM CLULEY
Project Zero
Project Zero
L
Lohrmann on Cybersecurity
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Cyber Attacks, Cyber Crime and Cyber Security
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Webroot Blog
Webroot Blog
Help Net Security
Help Net Security
TaoSecurity Blog
TaoSecurity Blog
Hacker News: Ask HN
Hacker News: Ask HN
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
N
News and Events Feed by Topic
Cisco Talos Blog
Cisco Talos Blog
T
Tor Project blog
The Hacker News
The Hacker News
The Last Watchdog
The Last Watchdog
C
CXSECURITY Database RSS Feed - CXSecurity.com
V2EX - 技术
V2EX - 技术
S
Secure Thoughts
AWS News Blog
AWS News Blog
W
WeLiveSecurity
云风的 BLOG
云风的 BLOG
V
V2EX
Last Week in AI
Last Week in AI
雷峰网
雷峰网
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
G
Google Developers Blog
P
Palo Alto Networks Blog
A
Arctic Wolf
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
M
MIT News - Artificial intelligence
V
Visual Studio Blog
C
CERT Recently Published Vulnerability Notes
WordPress大学
WordPress大学
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
Threatpost
Simon Willison's Weblog
Simon Willison's Weblog
PCI Perspectives
PCI Perspectives
量子位
K
Kaspersky official blog
腾讯CDC
Schneier on Security
Schneier on Security
F
Full Disclosure
S
Schneier on Security

博客园 - 左扬

VictoriaMetrics 1.146.0 源码专题【左扬精讲】—— 写入吞吐/查询延迟/内存占用的数学模型 VictoriaMetrics 1.146.0 源码专题【左扬精讲】—— 模块依赖图——从 import 语句看组件关系 VictoriaMetrics 1.146.0 源码专题【左扬精讲】—— Goroutine 池/atomic/零拷贝/sync.Pool VictoriaMetrics 1.146.0 源码专题【左扬精讲】—— 多租户架构——accountID/projectID 与 tenant 隔离 VictoriaMetrics 1.146.0 源码专题【左扬精讲】—— 版本演进:1.146.0 LTS 重大更新解析 VictoriaMetrics 1.146.0 源码专题【左扬精讲】—— 整体数据流:一条监控数据的完整生命周期 VictoriaMetrics 1.146.0 源码专题【左扬精讲】—— 架构演进:从 TSDB 到 MergeSet 的设计取舍 VictoriaMetrics 1.146.0 源码专题【左扬精讲】—— Single-Node vs Cluster 模式本质区别 VictoriaMetrics 1.146.0 源码【左扬精讲】—— 开篇总览 Rust 专题【左扬精讲】—— 从语法到灵魂:Ownership、Borrowing 与多语言对比 kubernetes 源码【左扬精讲】—— kube-scheduler 启动流程源码分析 Rust 专题【左扬精讲】—— 选择控制语句、运算符与格式化输出 Rust 专题【左扬精讲】—— 所有权详解 Rust 专题【左扬精讲】—— 作用域详解 Rust 专题【左扬精讲】—— 变量、常量与标量数据类型 kubernetes 源码 / Operator 专题【左扬精讲】—— Deployment Controller 源码分析:从对象创建到滚动更新 kubernetes 源码 / Operator 专题【左扬精讲】—— Operator 开发中的 Webhook:从准入控制到生产部署 Kubernetes源码 / Operator 专题【左扬精讲】—— 实现 Application Controller:从零构建生产级控制器 Kubernetes 编程 / Operator 专题【左扬精讲】—— 定义 Application 资源 + 添加自定义新 API 完整指南 Kubernetes 源码【左扬精讲】—— kube-scheduler(调度专题 · 八):内部架构与核心组件 Kubernetes 源码【左扬精讲】—— kube-scheduler(调度专题 · 八): —— 从入口到调度的全链路源码剖析(k8s v1.36.1) DeepSeek-R1 多模态 R1 / VLM-GRPO【左扬精讲】—— Qwen2-VL 微调与视觉推理强化学习实战 DeepSeek-R1 工业 RAG + 微调混合系统【左扬精讲】—— R1 系列收官之作:从 Prompt → RAG → 微调 选型决策树 DeepSeek-R1 推理时扩展【左扬精讲】—— o1 / R1 慢思考机制:Self-Consistency + ToT + PRM 详解 DeepSeek-R1 端侧 LLM 工程【左扬精讲】—— llama.cpp 调参与 Apple Silicon / 国产 NPU / Android 端侧落地全攻略 DeepSeek-R1 vLLM + k8s 生产部署【左扬精讲】—— 从单卡 7B 到 100 卡 671B MoE 集群的工业化部署实战 DeepSeek-R1 评估与系统(Evaluation & Systems)【左扬精讲】—— 从 GSM8K/MMLU 到 LLM-as-Judge 的工业级评估方法论 DeepSeek-R1 模型训练与算法【左扬精讲】—— GRPO 进阶算法:DAPO / PRIME / RLVR / PRM 四大 2025 前沿改进 DeepSeek-R1 模型训练与算法【左扬精讲】—— 数据蒸馏:用 DeepSeek-R1-671B 生成 800K 高质量 CoT 样本的完整流水线 DeepSeek-R1 优化与微调实战【左扬精讲】—— 从 R1 强化学习新范式到 GRPO 微调一站式入门 Kubernetes 源码【左扬精讲】—— kube-scheduler(调度专题 · 七):自定义插件开发实战 —— 手写一个 Score 插件并注册到集群 Kubernetes 源码【左扬精讲】—— kube-scheduler(调度专题 · 六):Scheduler Profile 与多调度器 —— 如何配置多个 profile 实现多租户、Coordinated LeaderElection Kubernetes 源码【左扬精讲】—— kube-scheduler(调度专题 · 五):SchedulingQueue 与 QueueingHint —— 三段队列的细节、v1.36 新引入的 QueueingHint 工作机制 Kubernetes 源码【左扬精讲】—— kube-scheduler(调度专题 · 四):抢占(Preemption)算法剖析 —— DefaultPreemption 如何选 victim、PodDisruptionBudget 如何约束 Kubernetes 源码【左扬精讲】—— kube-scheduler(调度专题 · 二):内置插件逐个精读 — NodeResourcesFit / NodeAffinity / TaintToleration / PodTopologySpread / VolumeBinding / InterPodAffinity Kubernetes 源码 / Operator 专题【左扬精讲】——kube-scheduler(调度专题):调度器内置插件 逐个精读 k8s 源码级精讲(二十六):调度器内置插件逐个精读 Kubernetes 源码 / Operator 专题【左扬精讲】——kube-scheduler(调度专题):调度器内置插件精读 — NodeResourcesFit / NodeAffinity / TaintToleration / PodTopologySpread / VolumeBinding / InterPodAffinity Kubernetes 源码 / Operator 专题【左扬精讲】——kube-scheduler(调度专题):Scheduling Framework 扩展点逐个源码拆解 Kubernetes 源码 / Operator 专题【左扬精讲】——kube-scheduler(调度专题):初识调度模型、内部架构与事件驱动机制 Kubernetes 编程 / client-go 专题【左扬精讲】—— 四种客户端:为什么、怎么选、怎么用 Kubernetes 编程 / Operator 专题【左扬精讲】—— controller-runtime、kubebuilder、operator-sdk 三大框架深度对比 Kubernetes 编程 / Operator 专题【左扬精讲】—— 深入理解 ManagedFields 字段冲突协调机制 Kubernetes 编程 / Operator 专题【左扬精讲】—— k8s Finalizers 深度解析:对象的生命周期与删除控制 Kubernetes 编程 / Operator 专题【左扬精讲】—— OwnerReference 字段与级联删除机制 Kubernetes 编程 / Operator 专题【左扬精讲】—— 深入学习 Server-Side Apply:managedFields 替代 last-applied-configuration 的演进方向 Kubernetes 编程 / Operator 专题【左扬精讲】—— k8s Annotations 与元数据体系(Operator 专题) Kubernetes 编程 / Operator 专题【左扬精讲】—— RESTMapper:把 Group / Version / Kind / Resource 四元组翻译成 REST 路径的"查字典"大师 Kubernetes 编程 / Operator 专题【左扬精讲】—— Converter 资源版本转换器 Kubernetes 编程 / Operator 专题【左扬精讲】—— Application 业务扩展:从单 Deployment 到多 Workload 的复合 Operator 演进 Kubernetes 编程 / Operator 专题【左扬精讲】—— OwnerReference / Finalizer / 准入控制:k8s 资源生命周期的三大支柱 Kubernetes 编程 / Operator 专题【左扬精讲】—— controller-runtime 框架内幕:从 Manager 到 Reconcile 的全栈拆解 Kubernetes 编程 / Operator 专题【左扬精讲】—— 生产级 Operator 最佳实践:并发安全、资源清理与高可用设计 Kubernetes 编程 / Operator 专题【左扬精讲】—— application-operator Reconcile 循环源码精讲:从 client-go Informer 到 workqueue 的全链路解剖 Kubernetes 编程 / Operator 专题【左扬精讲】—— 从零搭建一个 application-operator 新项目:脚手架、API 设计与基于原生 DeploymentStatus/ServiceStatus 的状态建模 Kubernetes 编程 / Operator 专题【左扬精讲】—— Client-go 源代码分析:生产级 Controller 实践:并发安全、资源清理与高可用设计 Kubernetes 编程 / Operator 专题【左扬精讲】—— Client-go 源代码分析: Controller 调试与诊断工具:从日志分析到问题定位 Kubernetes 编程 / Operator 专题【左扬精讲】—— Client-go 源代码分析:DynamicClient 操作 CRD:无需代码生成的动态操作 Kubernetes 编程 / Operator 专题【左扬精讲】—— Client-go 源代码分析:控制器与 APIServer 完整交互流程:从 Watch 到缓存同步 Kubernetes 编程 / Operator 专题【左扬精讲】—— Client-go 源代码分析:错误处理与重试机制:WorkQueue 限速器详解 Kubernetes 编程 / Operator 专题【左扬精讲】—— Client-go 源代码分析:Leader 选举机制:高可用控制器的必备技能 Kubernetes 编程 / Operator 专题【左扬精讲】—— Client-go 源代码分析:Controller 开发模式完整实战 Kubernetes 编程 / Operator 专题【左扬精讲】—— Client-go 源代码分析:SharedInformerFactory 与等待缓存同步 Kubernetes 编程 / Operator 专题【左扬精讲】—— Client-go 源代码分析:从认证配置到 Deployment 操作 Kubernetes 编程 / Operator 专题【左扬精讲】—— Client-go 源代码分析:版本对应、架构组件与组件关系 Kubernetes 编程 / Operator 专题【左扬精讲】—— Client-go 源代码分析:Informer 源码深度解析:从底层原理到实战应用 Kubernetes 编程 / Operator 专题【左扬精讲】—— Client-go 源代码分析:Reflector 源码深度解析 Kubernetes 编程 / Operator 专题【左扬精讲】—— Client-go 源代码分析:ListWatcher 源码深度解析 Kubernetes 编程 / Operator 专题【左扬精讲】—— Client-go 源代码分析:Indexer 与 ThreadSafeStore 核心原理与源码深度剖析 Kubernetes 编程 / Operator 专题【左扬精讲】—— Client-go 源代码分析:DeltaFIFO 核心原理与源码深度剖析 Kubernetes 编程 / Operator 专题【左扬精讲】—— Client-go 源代码分析:workqueue 核心原理与实战 Kubernetes 编程 / Operator 专题【左扬精讲】—— runtime.Codec 资源编解码:serializer 与 codec 差异、编解码数据结构、codec 核心调用链路 Kubernetes 编程 / Operator 专题【左扬精讲】—— Scheme 资源注册机制全解 Kubernetes 编程 / Operator 专题【左扬精讲】—— Kubernetes 自定义资源的内部版本与外部版本:从源码看版本定义机制 Kubernetes 编程 / Operator 专题【左扬精讲】—— Kubernetes 1.36.1 核心 API 数据结构全解 Kubernetes 编程 / Operator 专题【左扬精讲】—— Kubernetes 构建过程 【AIOPS】一文读懂LLM【左扬精讲】:从诞生到普及,解锁大语言模型的核心密码 【AIOPS】AI Agent 专题【左扬精讲】核心功能篇:MCP-VictoriaMetrics Hooks 源码精讲:Hooks 可观测性的无侵入式实现 【AIOPS】AI Agent 专题【左扬精讲】核心功能篇:MCP-VictoriaMetrics Golang 配置解析源码精讲 ——SRE 自定义 Agent 核心技巧 【AIOPS】AI Agent 专题【左扬精讲】核心功能篇:MCP-VictoriaMetrics Golang 并发模型解析 ——SRE 应对高并发采集的调优思路 【AIOPS】AI Agent 专题【左扬精讲】基础架构篇:MCP-VictoriaMetrics Golang 源码整体架构拆解 ——SRE 必懂的核心模块与数据流 OpenTelemetry 开发实战【左扬精讲】—— 云原生可观测体系构建与分布式追踪二次开发 Kubernetes 编程 / Operator 专题【左扬精讲】—— Operator 开发实战项目 7 —— 基于流量预测模型的智能弹性扩缩容 Operator 实战(AIOps 模型训练与智能扩容(下篇)—— 预测式弹性扩缩容 Operator 落地实现) Kubernetes 编程 / Operator 专题【左扬精讲】—— Operator 开发实战项目 7 —— 基于流量预测模型的智能弹性扩缩容 Operator 实战(AIOps 模型训练与智能扩容(上篇)—— 时序预测模型构建与离线训练) Kubernetes 编程 / Operator 专题【左扬精讲】—— Operator 开发实战项目 6 —— 基于运维专家知识库的智能故障诊断与排查 Operator 实战 Kubernetes 编程 / Operator 专题【左扬精讲】—— Operator 开发实战项目 5 —— 基于大语言模型(LLM)的实时日志流智能监测 Operator 实现 Kubernetes 编程 / Operator 专题【左扬精讲】—— Operator 开发实战项目 4 —— 基于 Operator 实现大模型私有化部署与管理 Kubernetes 编程 / Operator 专题【左扬精讲】—— Operator 开发实战项目 3(上篇)—— 面向 AI / 算力调度场景:GPU 竞价实例资源池统一调度管理 Operator 开发 Kubernetes编程 / Operator专题【左扬精讲】—— Operator 开发实战项目 2 —— 面向零售 / 电商潮汐流量难题:多云多集群数据中心级全链路弹性伸缩 DataCenter Scaler Operator 从 0 到 1 全链路开发 Kubernetes编程 / Operator专题【左扬精讲】—— 深入理解Kubebuilder注解:为什么Operator开发离不开这些特殊注释 Kubernetes编程 / Operator专题【左扬精讲】—— Operator 开发实战项目1 —— Applicaion Operator(通用应用生命周期管理 Operator 实战) Pod 镜像拉取失败?kubectl edit pods修改镜像地址的底层原理与实操 (该方法仅为临时应急方案,并非长期解决方案) Kubernetes编程/Operator专题精讲—— 理解控制器模式 —— 控制器模式的核心原理与实现逻辑(从原理到实践) 【AIOPS】AI Agent 专题【左扬精讲】模型微调实战:一站式平台 LLaMA-Factory 【AIOPS】AI Agent 专题【左扬精讲】基于 k8s+vLLM+Ray 分布式部署全指南:架构设计、资源调度与性能优化 【AIOPS】AI Agent专题【左扬精讲】非量化版DeepSeek分布式部署全指南:精度保障、显存规划与Ollama/vLLM选型 【AIOPS】AI Agent 专题【左扬精讲】零开发框架实现 ReAct Agent(Go SRE友好)
VictoriaMetrics 1.146.0 源码专题【左扬精讲】—— 与其他 TSDB 对比:Prometheus/InfluxDB/Thanos/VM
左扬 · 2026-06-29 · via 博客园 - 左扬

VictoriaMetrics 1.146.0 源码专题【左扬精讲】—— 与其他 TSDB 对比——Prometheus/InfluxDB/Thanos/VM

当你需要为监控系统选择存储后端时,是否曾在 Prometheus、InfluxDB、Thanos 和 VictoriaMetrics 之间犹豫不决?每个系统都有各自的优势和适用场景,理解它们的设计差异,才能做出正确的选择。

读完本篇,你应该能回答:四大 TSDB 的核心设计差异是什么?各自的优劣势是什么?在什么场景下应该选择哪个系统?为什么 VictoriaMetrics 被称为 "Prometheus 的超集"?

VictoriaMetrics Prometheus InfluxDB Thanos TSDB对比 选型指南 v1.146.0

学习重点提示建议先通读全文,再重点回顾标注内容

重点掌握(必须)

  • 存储引擎对比:TSDB Head vs LSM Tree vs MergeSet
  • 内存模型对比:全量 mmap vs 按需缓存
  • 水平扩展对比:不支持 vs Enterprise vs Sidecar vs 原生 Cluster
  • 选型指南:根据场景选择合适的 TSDB

次重点(了解即可)

  • 数据模型差异
  • 查询语言对比
  • 运维复杂度对比

文章目录

一、问题的起点:四大 TSDB 概述

思考记忆提示理解四大 TSDB 的定位是选型的基础——它们面向不同的场景

  • Prometheus = 单机存储的事实标准
  • InfluxDB = 企业级时序分析平台
  • Thanos = Prometheus 的扩展方案
  • VictoriaMetrics = 高性能 Prometheus 替代方案

1.1 四大 TSDB 一览

系统定位诞生年份GitHub Stars主要用户
Prometheus 云原生监控标准 2012 64.8+ CNCF 所有项目
InfluxDB 企业级时序分析 2013 31.6k 大型企业
Thanos Prometheus 扩展 2018 14.1k/td> 大规模部署
VictoriaMetrics 高性能监控存储 2019 17.2k+ Spotify、Roblox 等

我理解源码的意思是说

四大 TSDB 可以类比为四种不同的餐厅类型

Prometheus = 街边快餐店

方便、快捷、便宜,适合小规模(几十个客人)。老板一个人又做菜又端盘子(单机)。规模大了忙不过来(OOM),但胜在简单。

InfluxDB = 大型连锁餐厅

有专门的厨房(WAL + TSM)、仓储系统(分层缓存)、服务员团队(Enterprise)。功能强大但系统复杂,需要专人维护。

Thanos = 快餐店 + 外卖平台

在 Prometheus 基础上加了外卖平台(对象存储),可以覆盖更大范围(长期存储)。但本质上还是快餐店的厨师(依赖 Prometheus 的 TSDB)。

VictoriaMetrics = 现代化无人餐厅

全新的厨房设计(MergeSet)、智能取餐系统(TSIDCache + blockCache)、自动补货系统(后台合并)。效率高(省 7x RAM)、可扩展(原生 Cluster 支持)、运维简单(一个二进制)。

二、存储引擎对比:TSDB Head vs LSM Tree vs MergeSet

思考记忆提示存储引擎是 TSDB 的核心——理解它就理解了性能差异的根因

  • Prometheus TSDB = Head Block + mmap
  • InfluxDB TSM = LSM Tree 变体 + WAL
  • VM MergeSet = 只合并不分层

2.1 存储引擎对比表

特性Prometheus TSDBInfluxDB TSMVictoriaMetrics MergeSet
数据结构 Head Block + TSDB Block TSM File (LSM Tree) InMemory + Small/Big Part
合并策略 Leveled Compaction Leveled Compaction 单向合并(无分层)
刷盘策略 Head 满后刷盘 MemTable 满后刷盘 每秒刷盘(WAL-less)
写入性能 高(WAL 同步) 极高(WAL-less)
查询性能 中等(多层 Block) 中等(LSM 分层) 高(无分层)
空间放大 中等

2.2 核心差异分析

┌─────────────────────────────────────────────────────────────────────────┐
│                    存储引擎核心差异                                           │
│                                                                          │
│  Prometheus TSDB:                                                        │
│  ┌─────────────────────────────────────────────────────────────────┐     │
│  │  MemPart ──→ TSDB Block L0 ──→ TSDB Block L1 ──→ ...        │     │
│  │  (Head)        (mmap)         (mmap)                            │     │
│  │                                                                   │     │
│  │  特点:Head 满后刷盘,Block 按时间分界,分层合并                  │     │
│  └─────────────────────────────────────────────────────────────────┘     │
│                                                                          │
│  InfluxDB TSM:                                                          │
│  ┌─────────────────────────────────────────────────────────────────┐     │
│  │  MemTable ──→ TSM L0 ──→ TSM L1 ──→ TSM L2 ──→ ...          │     │
│  │  (WAL)          (10MB)     (100MB)    (1GB)                   │     │
│  │                                                                   │     │
│  │  特点:WAL 持久化保证可靠性,LSM 分层合并                        │     │
│  └─────────────────────────────────────────────────────────────────┘     │
│                                                                          │
│  VictoriaMetrics MergeSet:                                              │
│  ┌─────────────────────────────────────────────────────────────────┐     │
│  │  InMemoryPart ──→ Small Part ──→ Big Part                      │     │
│  │  (1秒刷盘)          (合并)         (合并)                        │     │
│  │                                                                   │     │
│  │  特点:没有分层!所有 Part 在同一层,只合并不更新                 │     │
│  └─────────────────────────────────────────────────────────────────┘     │
│                                                                          │
│  关键洞察:                                                              │
│  - Prometheus/InfluxDB 用分层 LSM Tree,换取写入性能,引入读放大         │
│  - VM 用无分层 MergeSet,换取读性能,引入少量写放大                       │
│  - 时序数据以读为主(监控告警),VM 的设计更匹配访问模式                   │
└─────────────────────────────────────────────────────────────────────────┘

设计精髓

MergeSet 的核心洞察:时序数据的访问模式天然适合只合并不分层的架构。时序数据有三个特点:

  • 追加写入为主:几乎不更新和删除(除非 delete series)
  • 查询通常是范围查询:最近 N 分钟/小时/天
  • 热点数据集中在近期:历史数据查询少

这意味着:分层 LSM Tree 的"更新"能力在时序场景下几乎无用武之地,反而引入了空间放大和读放大。MergeSet 放弃了更新能力,换取了更简单的查询路径和更低的资源消耗。

三、内存模型对比:全量 mmap vs 按需缓存

思考记忆提示内存模型是 VM "省 7x RAM" 的核心——理解它就理解了 VM 的核心优势

  • Prometheus = 全量 mmap(所有索引常驻)
  • InfluxDB = 分层缓存(可配置)
  • VictoriaMetrics = 按需缓存(TSIDCache 37%)

3.1 内存模型对比表

特性PrometheusInfluxDBVictoriaMetrics
索引策略 全量 mmap 分层缓存 按需缓存(37%)
数据缓存 依赖 Page Cache 可配置缓存层 blockCache 三层
内存可控性 不可控 可配置 精确控制
内存占用 高(2-3GB/M series) 高(Enterprise) 低(0.3-0.5GB/M series)
省内存倍数 基准 ~1x ~7x

3.2 核心差异详解

┌─────────────────────────────────────────────────────────────────────────┐
│                    内存模型核心差异                                           │
│                                                                          │
│  Prometheus(mmap):                                                     │
│  ┌─────────────────────────────────────────────────────────────────┐     │
│  │  所有索引 ──→ mmap ──→ Page Cache ──→ 查询加载                 │     │
│  │                                                                   │     │
│  │  问题:索引全量加载,查询越多内存占用越大                         │     │
│  │  优点:查询一定命中缓存(内核管理)                               │     │
│  └─────────────────────────────────────────────────────────────────┘     │
│                                                                          │
│  VictoriaMetrics(按需缓存):                                            │
│  ┌─────────────────────────────────────────────────────────────────┐     │
│  │  热点索引 ──→ TSIDCache 37% ──→ 内存                         │     │
│  │  冷数据   ──→ indexDB ──→ 按需加载                            │     │
│  │                                                                   │     │
│  │  优点:内存占用可控,按需加载                                   │     │
│  │  问题:冷数据查询需要读磁盘                                     │     │
│  └─────────────────────────────────────────────────────────────────┘     │
│                                                                          │
│  关键洞察:                                                              │
│  - Prometheus 的 mmap 适合"查询所有数据"场景                            │
│  - VM 的按需缓存适合"查询热点数据"场景                                  │
│  - 监控数据的访问模式天然是热点访问(近期数据查询多)                      │
└─────────────────────────────────────────────────────────────────────────┘

四、水平扩展对比:四种扩展模式的本质差异

思考记忆提示水平扩展能力决定了系统能支持多大——这是选型的关键因素

  • Prometheus = 不支持水平扩展
  • InfluxDB = Enterprise 专属
  • Thanos = Prometheus + Sidecar 代理
  • VictoriaMetrics = 原生 Cluster 支持

4.1 水平扩展对比表

特性PrometheusInfluxDBThanosVictoriaMetrics
扩展模式 不支持 Enterprise 专属 Sidecar + 对象存储 原生 Cluster
数据分片 Hash + 时间 Prometheus 本地 一致性哈希
查询聚合 内置 Query Layer vmselect
副本复制 Enterprise 对象存储 Enterprise
多租户 Federation 支持 不支持 支持

4.2 核心差异分析

┌─────────────────────────────────────────────────────────────────────────┐
│                    扩展模式核心差异                                           │
│                                                                          │
│  Prometheus(单机):                                                     │
│  ┌─────────────────────────────────────────────────────────────────┐     │
│  │  Prometheus ──→ 本地存储                                        │     │
│  │                                                                   │     │
│  │  扩展方式:Federation(联邦)                                   │     │
│  │  Prometheus A ──→ Prometheus Center ──→ Prometheus B             │     │
│  │                                                                   │     │
│  │  本质:不是真正的扩展,只是视图聚合                               │     │
│  └─────────────────────────────────────────────────────────────────┘     │
│                                                                          │
│  Thanos(Prometheus + 对象存储):                                         │
│  ┌─────────────────────────────────────────────────────────────────┐     │
│  │  Prometheus A ──→ Sidecar ──→ 对象存储                          │     │
│  │  Prometheus B ──→ Sidecar ──→ 对象存储                          │     │
│  │                        │                                          │     │
│  │                        ▼                                          │     │
│  │                    Query Layer ──→ 聚合查询                      │     │
│  │                                                                   │     │
│  │  本质:还是在每个 Prometheus 本地存储,Sidecar 只是备份           │     │
│  └─────────────────────────────────────────────────────────────────┘     │
│                                                                          │
│  VictoriaMetrics(原生 Cluster):                                        │
│  ┌─────────────────────────────────────────────────────────────────┐     │
│  │  vminsert ──→ 一致性哈希 ──→ vmstorage A                       │     │
│  │                                   │                              │     │
│  │                                   └──→ vmstorage B              │     │
│  │                                                                   │     │
│  │  vmselect ──→ 聚合查询 ──→ 返回结果                           │     │
│  │                                                                   │     │
│  │  本质:真正的分布式存储,数据按 tenant 分片                      │     │
│  └─────────────────────────────────────────────────────────────────┘     │
│                                                                          │
│  关键洞察:                                                              │
│  - Prometheus/Thanos 本质还是单机存储,只是加了视图聚合或备份              │
│  - VM 原生 Cluster 是真正的分布式存储,数据天然分片                        │
│  - 对于需要真正水平扩展的场景,VM 是更好的选择                             │
└─────────────────────────────────────────────────────────────────────────┘

小贴士扩展模式选择建议

根据扩展需求选择:

  • < 100 万 series:Prometheus 足够
  • 100-500 万 series:Thanos 或 VM Single-Node
  • > 500 万 series:VM Cluster
  • Enterprise 功能需求:InfluxDB Enterprise 或 VM Enterprise

五、数据模型与查询语言对比

思考记忆提示数据模型和查询语言决定了系统的表达能力——迁移成本也与此相关

  • Prometheus/VM = 标签模型 + PromQL
  • InfluxDB = Tag/Field 模型 + InfluxQL/Flux

5.1 数据模型对比

特性PrometheusInfluxDBVictoriaMetrics
数据模型 Metric + Labels Measurement + Tag + Field Metric + Labels
标签类型 字符串 Tag(索引)/Field(不索引) 字符串
字段支持 单一值 多字段 单一值
时间戳精度 毫秒 纳秒(可配置) 纳秒

5.2 查询语言对比

特性PromQLInfluxQLMetricsQL
来源 Prometheus InfluxDB VictoriaMetrics
兼容性 标准 InfluxDB 专属 PromQL 超集
独有函数 基础聚合 连续查询 running_max/min/sum
迁移难度 N/A 低(PromQL 兼容)

注意

VictoriaMetrics 兼容 PromQL,并扩展了 MetricsQL,提供更多高级函数。如果当前使用 Prometheus,迁移到 VM 几乎没有学习成本。如果当前使用 InfluxDB,迁移到 VM 需要将 InfluxQL 转换为 PromQL。

六、选型指南:根据场景选择合适的 TSDB

思考记忆提示选型是本文的最终目标——理解差异后做出正确决策

  • 小规模 = Prometheus
  • 大规模高性能 = VictoriaMetrics
  • 企业级功能 = InfluxDB Enterprise
  • 已有 Prometheus 扩展 = Thanos

6.1 选型决策树

┌─────────────────────────────────────────────────────────────────────────┐
│                    TSDB 选型决策树                                           │
│                                                                          │
│                          开始                                                │
│                            │                                                │
│                            ▼                                                │
│                    规模是多少?                                             │
│                            │                                                │
│           ┌────────────────┼────────────────┐                              │
│           │                │                │                               │
│           ▼                ▼                ▼                               │
│      < 100万          100-500万        > 500万                            │
│       series           series           series                              │
│           │                │                │                               │
│           ▼                ▼                ▼                               │
│      Prometheus       Thanos或         VM Cluster                         │
│                       VM Single                                         │
│                            │                                              │
│                            ▼                                              │
│                    需要水平扩展吗?                                          │
│                            │                                              │
│           ┌────────────────┴────────────────┐                            │
│           │                              │                                 │
│           ▼                              ▼                                 │
│         是                              否                                  │
│           │                              │                                 │
│           ▼                              ▼                                 │
│      VM Cluster                   Prometheus + Thanos                      │
│           或                              或                                 │
│      Thanos                          VM Single                             │
│                                                                          │
└─────────────────────────────────────────────────────────────────────────┘

6.2 详细选型指南

场景推荐原因
小规模监控(<100万 series) Prometheus 简单、成熟、生态完善
中等规模(100-500万 series) VictoriaMetrics 省内存、高性能、PromQL 兼容
大规模(>500万 series) VictoriaMetrics Cluster 原生分布式、多租户、高可用
已有 Prometheus 迁移 VictoriaMetrics PromQL 完全兼容、迁移成本低
企业级功能(RBAC、审计) InfluxDB Enterprise / VM Enterprise 完整的企业特性
长期存储 + 全球聚合 Thanos 或 VM + 对象存储 对象存储成本低
需要 SQL 查询 InfluxDB(InfluxQL) InfluxQL 更接近 SQL
DevOps/云原生监控 VictoriaMetrics CNCF 生态、Kubernetes 原生

设计精髓

选型的核心原则是匹配场景,平衡成本

  • Prometheus:简单场景首选,不需要额外组件
  • VictoriaMetrics:性能和规模优先,Prometheus 的超集
  • Thanos:已有 Prometheus 基础设施,想扩展长期存储
  • InfluxDB:需要企业特性或 SQL -like 查询

七、FAQ:常见疑问

思考记忆提示FAQ 是全篇的"临考前速背"模块,20 组覆盖全链路

  • Q1-Q5 围绕存储引擎:TSDB Head vs LSM Tree vs MergeSet
  • Q6-Q10 围绕内存模型:全量 mmap vs 按需缓存
  • Q11-Q15 围绕扩展能力:四种扩展模式对比
  • Q16-Q20 围绕选型建议:场景与系统匹配

Q1. Prometheus 能支持多少时间序列?

官方建议 < 100 万 series,实际取决于可用内存。每百万 series 约需 2-3GB 内存(mmap 索引)。超过 100 万 series 后,内存压力显著增加。

Q2. VictoriaMetrics 为什么比 Prometheus 省内存?

因为 VM 使用 TSIDCache 37% 策略,只缓存热点索引,而不是全量 mmap。Prometheus 的 mmap 会导致所有索引数据被内核加载到 Page Cache,而 VM 只缓存热点索引(约 37%),冷数据按需从磁盘加载。

Q3. Thanos 和 VictoriaMetrics 有什么区别?

Thanos 是 Prometheus 的扩展,VM 是独立的存储引擎。Thanos 通过 Sidecar 代理 Prometheus 的数据,本质上还是依赖 Prometheus 的 TSDB。VictoriaMetrics 自己实现 MergeSet 存储引擎,不依赖 Prometheus。

Q4. 从 Prometheus 迁移到 VictoriaMetrics 容易吗?

非常容易,PromQL 完全兼容。VictoriaMetrics 兼容 Prometheus 的所有协议和数据格式。使用 vmagent 或 Remote Write 代理新数据,使用 vmctl 迁移历史数据,Grafana 数据源无缝切换。

Q5. InfluxDB 和 VictoriaMetrics 哪个性能更好?

Benchmark 显示,在相同硬件下 VM 的写入吞吐和查询延迟都优于 InfluxDB。官方测试显示,VM 的写入吞吐约为 InfluxDB 的 2-3 倍,查询延迟约为 InfluxDB 的 1/2。

Q6. 什么场景下应该选择 Thanos?

已有 Prometheus 基础设施,需要扩展长期存储和全局视图。Thanos 的优势是可以复用现有的 Prometheus 配置,不需要迁移。

Q7. 什么场景下应该选择 InfluxDB?

需要企业级特性(RBAC、审计、连续查询)或 SQL-like 查询。InfluxDB Enterprise 提供完整的企业功能,但成本较高。

Q8. VictoriaMetrics 支持高可用吗?

支持,Enterprise 版本提供副本复制和故障转移。Cluster 模式下可以将数据复制到多个 vmstorage 节点,实现高可用。

Q9. MergeSet 和 LSM Tree 哪个更好?

取决于场景:时序数据更适合 MergeSet,事务型数据更适合 LSM Tree。时序数据的特点是追加写入为主、很少更新,MergeSet 的只合并不分层设计更匹配这个访问模式。

Q10. VictoriaMetrics 的压缩率是多少?

典型压缩率 10x-50x,取决于数据特征。Counter 类型(平滑变化)压缩率高,Histogram 类型压缩率低。整体平均约 20x。

Q11. Prometheus 的 Federation 和 VictoriaMetrics 的 Cluster 有什么区别?

Prometheus Federation 只是视图聚合,VM Cluster 是真正的数据分片。Federation 只是将多个 Prometheus 实例的查询结果聚合起来,每个实例仍然是完整的数据副本。VM Cluster 将数据按 tenant 分片到不同节点。

Q12. 哪个系统运维最简单?

Prometheus 最简单,VictoriaMetrics 次之,InfluxDB/Thanos 最复杂。Prometheus 是单一二进制,不需要额外组件。VictoriaMetrics 也是单一二进制,但需要 Cluster 时组件较多。InfluxDB Enterprise 架构复杂,需要专人维护。

Q13. 哪个系统生态最好?

Prometheus 生态最好,VictoriaMetrics 次之。Prometheus 是 CNCF 毕业项目,Grafana 原生支持。VictoriaMetrics 虽然是独立项目,但完全兼容 Prometheus 生态。

Q14. VictoriaMetrics 的缺点是什么?

主要缺点:1)相对较新(2019 年);2)Enterprise 版本需要付费;3)文档相对较少。Prometheus 有 10 年历史,生态更成熟。

Q15. 如何从 InfluxDB 迁移到 VictoriaMetrics?

使用 vmctl influx 命令迁移数据。vmctl 支持从 InfluxDB 导出数据,然后导入到 VictoriaMetrics。需要将 InfluxQL 转换为 PromQL。

Q16. 存储成本对比如何?

VictoriaMetrics 存储成本最低,InfluxDB 最高。VM 的高压缩率(20x)和低内存需求(省 7x RAM)显著降低了存储成本。

Q17. 可以同时使用 Prometheus 和 VictoriaMetrics 吗?

可以,Prometheus Remote Write 支持多目的地。可以配置 Prometheus 同时写入 Prometheus 本地存储和 VictoriaMetrics。

Q18. VictoriaMetrics 支持哪些协议?

支持 12+ 种协议,包括 Prometheus remote_write、InfluxDB line protocol、DataDog、OpenTelemetry 等。比任何竞品都多。

Q19. 迁移到 VictoriaMetrics 需要停机吗?

不需要,可以热迁移。配置 Prometheus Remote Write 同时写入旧系统和 VM,切换 Grafana 数据源到 VM,然后停止旧系统。

Q20. VictoriaMetrics 的未来发展如何?

发展迅速,CNCF 沙箱项目,持续更新中。GitHub stars 增长迅速,被多家大厂采用,路线图包括 VictoriaLogs 集成、更高效压缩算法等。

全篇必记总纲

四大 TSDB 的选择核心是匹配场景:小规模用 Prometheus(简单成熟),大规模高性能用 VictoriaMetrics(省 7x RAM + 原生 Cluster),已有 Prometheus 扩展用 Thanos(复用配置),企业级功能用 InfluxDB Enterprise。VM 是 Prometheus 的超集,迁移成本最低,推荐作为 Prometheus 的长期替代方案。

八、Roadmap:后续预告

本篇覆盖了四大 TSDB 的对比分析,后续将深入各个专题:

  • #11 开源生态:VM 在 CNCF 生态中的位置——理解 VM 的生态位
  • #12 源码阅读路线图:如何高效阅读 VM 源码——最佳实践
  • #192 Prometheus TSDB vs VM:Benchmarks 数字真相——深度对比
  • #41 MergeSet vs LSM Tree:存储引擎专题——MergeSet 源码深度解析
  • #146 10 亿 Series 规模:超大规模 VM 部署架构——生产极限专题

本文参考与源码链接:
  • VictoriaMetrics 官方对比文档
  • Prometheus 官网
  • InfluxDB 官网
  • Thanos 官网