万字深潜:向量数据库 Milvus 的分布式内核到底强在哪?从「单一事实来源」WAL 到万亿级毫秒检索

发布时间:2026/10/27 18:59:08
万字深潜:向量数据库 Milvus 的分布式内核到底强在哪?从「单一事实来源」WAL 到万亿级毫秒检索

文章目录

    • 1. Milvus 是什么:一句话说清它的定位
    • 2. 为什么是 Milvus:五大硬核能力
      • 2.1 规模化的高性能与高可用
      • 2.2 丰富的索引类型与硬件加速
      • 2.3 灵活的多租户与冷热存储
      • 2.4 稀疏向量:全文检索与混合检索
      • 2.5 数据安全与细粒度访问控制
    • 3. 三行代码跑起来:从 Milvus Lite 到云原生集群
    • 4. 架构总览:两张图看懂全貌
    • 5. 从 1.x 到 2.x:一次「脱胎换骨」的架构革命
    • 6. 内核核心(一):WAL——整个系统的单一事实来源
      • 6.1 WAL 的三个角色
      • 6.2 数据怎么流
    • 7. 内核核心(二):三层通道模型与消息生命周期
      • 7.1 三层通道:PChannel / VChannel / CChannel
      • 7.2 Message:流经 WAL 的最小数据单元
      • 7.3 「header 还是 body」——一个高频的工程决策
    • 8. 内核核心(三):写入链路与拦截器链
    • 9. 内核核心(四):分片、锁与本地 Flush
      • 9.1 分片管理(Shard Management)
      • 9.2 锁:独占与共享
      • 9.3 本地 Flush 控制
    • 10. 内核核心(五):TimeTick 与事务——一致性的基石
      • 10.1 TimeTick:PChannel 级的总序
      • 10.2 背压:WAB 如何「优雅地扛不住」
      • 10.3 事务:一个 VChannel 内的多消息协调
      • 10.4 LastConfirmedMessageID:让「读到完整数据」可被保证
    • 11. 内核核心(六):一次检索请求经历了什么
    • 12. 内核核心(七):DDL 广播、资源锁与幂等
      • 12.1 广播的六步流程
      • 12.2 资源锁
      • 12.3 幂等:`_ik` 键如何避免「重复建表」
      • 12.4 墓碑 GC:既要回收,又怕「复活的 ACK」
    • 13. 内核核心(八):崩溃恢复——不丢数据是怎么被证明的
      • 13.1 它持久化了什么
      • 13.2 恢复流程
    • 14. 内核核心(九):跨集群复制 CDC 的星型拓扑
      • 14.1 配置与映射
      • 14.2 角色与「不可复制」标记
      • 14.3 数据流与检查点
      • 14.4 拓扑变更
    • 15. 存储底座:可插拔的 WAL Backend
    • 16. 生态与周边:它如何融入你的技术栈
    • 17. 从源码构建:动手前的环境清单
    • 18. 结语:为什么「内核」才是向量数据库真正的护城河

当大模型把「非结构化数据」变成企业最贵的资产,向量数据库就成了这波浪潮里最硬的地基。而在这块地基上,Milvus 是绕不开的名字——但它真正难的地方,从来不是「能存向量」,而是「在万亿规模下依然又快又稳」。这篇长文,我们把它的分布式内核从头拆到脚。

1. Milvus 是什么:一句话说清它的定位

Milvus 是一个为规模化(scale)而生的高性能向量数据库。

它做的事很聚焦:把文本、图像、多模态等非结构化数据转成向量(也就是「学习到的表示」),然后高效地组织与检索。它不止存向量,还同时支持整数、字符串、JSON 等标量类型,因此可以做带元数据过滤的向量检索,也可以做混合检索(Hybrid Search)。

几个关键事实:

  • 用 Go 与 C++ 编写,针对 CPU/GPU 做了硬件加速,追求「同类最佳」的向量检索性能。
  • 全分布式、K8s 原生架构:可水平扩展,能在数十亿向量上处理数万级搜索查询,并通过实时流式更新保持数据新鲜。
  • 同时支持单机:Standalone 模式用于单机部署;Milvus Lite 是轻量版,一条pip install就能在 Python 里快速起步。
  • 开源与治理: