暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

DBA午器·第4期|Milvus:云原生向量数据库的架构革命

原创 绩隐金 2026-04-21
441

如果说第三期的pgvector解决了PostgreSQL拥抱向量的问题,那么这一期我们要聊的Milvus,解决的是超大规模向量检索的终极命题。

在AI应用从"能用"走向"好用"的2026年,一个残酷的现实浮出水面:pgvector撑不住了。当向量数据突破千万级、甚至迈向亿级时,PostgreSQL的单机架构开始力不从心。这时,一个专为"海量"而生的选手站了出来——Milvus。

Milvus是LF AI & Data基金会旗下的顶级开源项目,由Zilliz公司发起,是目前全球最流行的云原生向量数据库。它不是pgvector的"替代品",而是pgvector的"进阶版"——当你的数据量达到pgvector的瓶颈时,Milvus就是那个扛起PB级向量检索的答案。

今天,我们就从DBA的视角,从五个方面全方位拆解这款"向量数据库之王"。


Milvus 是一个开源的、云原生的向量数据库,专为海量向量数据的高性能相似性搜索而设计。

核心定位"当pgvector不够用时,你需要的向量数据库。"

为什么有了pgvector还需要Milvus?这不是"重复造轮子",而是场景分化

对比维度
pgvector
Milvus
设计理念
PostgreSQL扩展,轻量集成
专用向量数据库,原生云架构
最大规模
百万~千万级
十亿~百亿级
索引类型
IVFFlat、HNSW
10+种(含GPU加速、磁盘索引)
部署形态
单机为主
分布式集群
,存算分离
运维复杂度
低(复用PG生态)
较高(需管理独立集群)
适用场景
中小规模、PG生态内
超大规模、高性能专用

简单来说:100万条以内用pgvector,100万条以上考虑Milvus。

Milvus的故事始于2019年,由Zilliz团队开源。到2026年,它已成为GitHub上Star数超3.4万的明星项目,被超过2000家企业采用,涵盖推荐系统、图像检索、药物发现、RAG等场景。


2. 核心技术架构:存算分离的四层设计

Milvus最引以为傲的是其云原生架构。它遵循"数据平面"与"控制平面"分离的原则,由四个主要层组成,各层独立扩展。

第1层:访问层(Access Layer)

组件:Proxy(代理节点)

Proxy是无状态的网关节点,是用户请求的唯一入口。它负责:

  • • 客户端请求验证与路由
  • • 请求的负载均衡(配合Nginx、K8s Ingress)
  • • 结果聚合:由于Milvus采用MPP架构,多个节点返回的中间结果需要由Proxy统一聚合后再返回客户端

运维要点:Proxy无状态,可随意水平扩展。生产环境建议至少部署2个Proxy + 负载均衡器。

第2层:协调器层(Coordinator Layer)

组件:rootCoord、dataCoord、queryCoord、indexCoord

这是Milvus的"大脑"。协调器负责维护集群拓扑、调度所有任务类型、保证集群级一致性。

  • • rootCoord:处理DDL/DCL请求(创建/删除Collection、分区、索引),管理TSO(时间戳Oracle)
  • • dataCoord:管理数据节点的任务调度,包括数据压缩、索引构建、垃圾回收
  • • queryCoord:管理查询节点的拓扑和负载均衡
  • • indexCoord:管理索引构建任务的调度

运维要点:协调器是有状态的,生产环境需启用enableActiveStandby实现高可用。

第3层:工作节点层(Worker Layer)

组件:Data Node、Query Node、Index Node

这是Milvus的"手脚",执行协调器下发的具体任务。由于存算分离,工作节点是无状态的。

三种工作节点

节点类型
职责
关键特性
Data Node
处理数据持久化、日志订阅、数据打包
将增量日志转换为binlog存储到对象存储
Query Node
执行向量搜索、加载索引
从对象存储加载历史数据,提供查询服务
Index Node
异步构建向量索引
无需常驻内存,可使用Serverless框架

数据流转:插入请求 → Proxy → Data Node写WAL → 数据落盘到对象存储 → Index Node异步建索引 → Query Node加载索引提供服务。

第4层:存储层(Storage Layer)

组件:元数据存储、日志存储、对象存储

这是Milvus的"骨骼",负责数据的持久化。

  • • 元存储(etcd):存储Collection Schema、消息消费进度等元数据快照。要求高可用、强一致性。
  • • 日志存储(WAL):默认使用Pulsar,也支持Kafka。记录所有数据变更操作,保证故障恢复。v2.5+版本引入Woodpecker——零磁盘的云原生WAL实现。
  • • 对象存储(MinIO/S3):存储binlog(向量/标量数据)和索引文件。支持AWS S3、阿里云OSS等。

存算分离的价值

  • • 计算节点(Query Node)可以按需扩缩容
  • • 存储成本大幅降低(对象存储约0.02美元/GB/月)
  • • 故障恢复快:节点挂了只需重新从对象存储加载数据

3. 核心功能:不止于向量检索

3.1 多向量类型支持

Milvus支持6种向量数据类型,覆盖各种AI场景:

类型
说明
适用场景
FLOAT_VECTOR
单精度浮点向量(最常用)
文本/图像embedding
FLOAT16_VECTOR
半精度,内存减半
移动端、边缘计算
BFLOAT16_VECTOR
Google的16位浮点格式
深度学习模型
INT8_VECTOR
量化向量
极致内存优化
BINARY_VECTOR
二进制向量
快速汉明距离计算
SPARSE_FLOAT_VECTOR
稀疏向量
关键词匹配、BM25

多向量字段:一个Collection最多可包含10个向量字段,支持多模态混合检索(如图片向量+文本稀疏向量同时搜索)。

3.2 丰富的索引算法

Milvus集成Knowhere(封装了FAISS、HNSWlib等),提供10+种索引类型:

索引类型
内存占用
查询速度
召回率
适用场景
FLAT
极高
极慢(暴力)
100%
精确检索、小数据集
IVF_FLAT
中等
95-99%
通用场景
IVF_PQ
低(压缩)
中等
90-95%
内存受限场景
HNSW
极快
95-99%
高性能首选
DISKANN
低(磁盘索引)
中等
95-98%
超大数据集(PB级)
GPU索引
GPU显存
毫秒级
95-99%
极致低延迟场景

索引选择铁律

  • • 内存充足 + 追求性能 → HNSW
  • • 内存受限 + 数据量大 → IVF_PQ
  • • 数据量10亿+ → DISKANN
  • • GPU资源丰富 → GPU索引

3.3 混合检索:向量+标量过滤

Milvus的真正杀手锏是混合检索——在同一查询中同时进行向量相似度搜索和标量字段过滤。

典型场景:电商"相似商品+价格区间"

# 伪代码示意
results = collection.search(
    data=[query_vector],
    anns_field="embedding",
    expr="price > 100 and price < 500 and category == 'electronics'",  # 标量过滤
    param={"metric_type": "COSINE", "params": {"nprobe": 10}},
    limit=10
)

实现原理:Milvus使用预过滤(先标量过滤再向量搜索)或后过滤策略,通过倒排索引加速标量过滤。

3.4 时序一致性

Milvus通过TSO(Timestamp Oracle)提供可配置的一致性级别

级别
说明
适用场景
Strong
读操作等待所有写入可见
金融、账务系统
Bounded
允许一定时间滞后
推荐系统(默认)
Session
同一会话内保证一致性
Web应用
Eventual
最终一致,性能最高
日志分析、监控

DBA提示:一致性越强,查询延迟越高。大多数场景Bounded足够。


4. 部署方式与高可用架构

4.1 三种部署模式

部署模式
适用场景
复杂度
生产就绪
Standalone
(Docker Compose)
开发测试、学习验证
Cluster
(K8s + Helm)
生产环境
⭐⭐⭐
云托管
(阿里云/京东云/火山引擎)
企业生产、不想自运维
⭐⭐

Standalone:单机版本,包含etcd+MinIO+Milvus,适合快速上手。

Cluster(K8s):生产标准方案。Milvus官方提供Helm Chart,支持:

  • • 各组件独立扩缩容
  • • 滚动升级
  • • 持久化存储(PVC)

云托管:阿里云、京东云、火山引擎均提供Milvus托管服务,兼容开源协议,开箱即用。

4.2 高可用架构:多可用区部署

云厂商的Milvus托管服务支持跨可用区部署,提供机房级容灾能力:

架构类型
计算节点
RTO
成本倍数
单可用区
1份
无容灾
1x
多可用区基础版
1份(主AZ)
<1小时
1-1.3x
多可用区高可用版
2份(主备)
<3分钟
2x

关键设计

  • • etcd(元数据)跨3个AZ部署
  • • Pulsar(消息)跨3个AZ部署
  • • OSS对象存储为同城冗余模式

DBA建议:金融级场景选多可用区高可用版,一般生产选基础版即可。


5. 运维实战:监控、调优与避坑

5.1 监控体系搭建

Milvus官方推荐的监控栈是Prometheus + Grafana + Alertmanager

关键指标监控

指标类别
关键指标
告警阈值建议
查询性能
QueryNode
 查询延迟P99
>100ms
索引状态
索引构建队列长度
>1000
内存使用
Query Node内存利用率
>80%
存储
对象存储请求失败率
>1%

官方Grafana Dashboard:Milvus提供开箱即用的Grafana仪表盘,包含40+图表。

5.2 性能调优核心参数

以下参数直接影响生产性能:

1. segment大小(dataCoord.segment.maxSize)

# 默认:1024MB,调大可减少segment数量
dataCoord:
  segment:
    maxSize: 8192  # 8GB,查询性能提升约4倍

2. HNSW索引参数

# 构建时
M: 32           # 每层最大连接数(默认16,调大提高召回率)
efConstruction: 360  # 构建候选列表(默认64,调大提高质量)

# 查询时
ef: 100         # 搜索候选列表(默认40,调大提高召回率)

3. mmap内存映射

queryNode:
  mmap:
    enabled: true  # 启用mmap,降低内存占用

4. 垃圾回收(GC)

dataCoord:
  gc:
    dropTolerance: 86400  # 24小时后删除已标记数据

5.3 常见问题与避坑指南

坑1:索引构建导致查询变慢

  • • 现象:索引构建期间,查询延迟飙升
  • • 原因:索引未完成时,Query Node回退到暴力搜索
  • • 解决:错峰建索引,或增加Query Node资源

坑2:segment碎片过多

  • • 现象:查询性能随数据插入逐渐下降
  • • 原因:频繁小批量插入产生大量小segment
  • • 解决:批量插入(建议每批>1万条),或手动触发compaction

坑3:etcd性能瓶颈

  • • 现象:元数据操作(创建Collection等)超时
  • • 原因:etcd磁盘IOPS不足
  • • 解决:etcd使用SSD,或单独部署高性能etcd集群

坑4:认证未启用导致数据泄露

  • • 风险:默认配置无认证,任何人都可访问
  • • 解决:生产环境必须启用认证并修改默认密码
common:
  security:
    authorizationEnabled: true  # 启用认证

结语:pgvector vs Milvus,如何选择?

"DBA午器"三期连续介绍了pgvector和Milvus,很多读者会问:到底该选哪个?

决策树

数据量 < 100万?
    └─ 是 → pgvector(简单、够用、复用PG生态)

数据量 100万~5000万?
    ├─ 已深度使用PostgreSQL → pgvector(可接受性能折衷)
    └─ 追求极致性能、准备独立运维 → Milvus

数据量 > 5000万?
    └─ Milvus(唯一选择)

特殊场景:
    ├─ 多模态检索(图片+文本+稀疏向量) → Milvus
    ├─ GPU加速 → Milvus
    └─ 云原生、弹性伸缩 → Milvus

Milvus不是pgvector的敌人,而是pgvector的"进阶形态"。

当你的业务从MVP走向规模化,当你的向量数据从百万奔向亿级,当你的查询延迟要求从"可以接受"变成"毫秒级"——Milvus就是那个帮你扛住海量数据、保持高性能的答案。

"DBA午器"温馨提示:Milvus虽强,但运维复杂度不可小觑。建议先用云托管服务(阿里云/京东云)快速验证,确认规模后自建集群。切记:生产环境必开认证、必配监控、必做备份


参考引用:本文数据与架构解析参考自Milvus官方文档、阿里云/京东云产品文档、Zilliz技术博客及社区实战经验。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论