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

推荐订阅源

cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
SecWiki News
SecWiki News
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Forbes - Security
Forbes - Security
Schneier on Security
Schneier on Security
W
WeLiveSecurity
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Google Online Security Blog
Google Online Security Blog
O
OpenAI News
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
S
Secure Thoughts
PCI Perspectives
PCI Perspectives
人人都是产品经理
人人都是产品经理
Blog — PlanetScale
Blog — PlanetScale
S
SegmentFault 最新的问题
Help Net Security
Help Net Security
G
GRAHAM CLULEY
Latest news
Latest news
V
Visual Studio Blog
The Cloudflare Blog
T
Troy Hunt's Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Stack Overflow Blog
Stack Overflow Blog
GbyAI
GbyAI
I
InfoQ
Know Your Adversary
Know Your Adversary
B
Blog RSS Feed
V2EX - 技术
V2EX - 技术
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
H
Heimdal Security Blog
Y
Y Combinator Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
The GitHub Blog
The GitHub Blog
P
Palo Alto Networks Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
T
Tor Project blog
T
Threat Research - Cisco Blogs
博客园 - 三生石上(FineUI控件)
Cloudbric
Cloudbric
博客园 - Franky
博客园 - 叶小钗
S
Security @ Cisco Blogs
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
阮一峰的网络日志
阮一峰的网络日志
WordPress大学
WordPress大学
T
Threatpost
MongoDB | Blog
MongoDB | Blog
V
Vulnerabilities – Threatpost
Martin Fowler
Martin Fowler

博客园 - 左扬

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 官网