Hotdry.
ai-systems

构建Milvus亿级向量ANN搜索系统:分布式分片、HNSW-IVF混合索引构建与故障容忍查询规划管道

Milvus亿级向量搜索系统工程实践:分片策略、混合索引构建参数、查询规划与容错机制,确保高可用低延迟。

Milvus 作为云原生向量数据库,专为亿级 ANN 搜索设计,通过分布式分片均匀负载、HNSW-IVF 混合索引优化精度速度、故障容忍查询管道保障 99.99% SLA。本文提供可落地参数清单与监控要点,直接复制到生产环境。

1. 分布式分片:哈希路由与弹性扩展

亿级向量单节点内存超 TB,Milvus 用 VChannel(逻辑分片)+PChannel(物理通道,256 默认)实现。数据按主键哈希路由 DataNode,避免热点。

核心参数

  • shards_num=32~64(10 亿向量≈32 分片,每分片 30M)。
  • Partition:业务切分,如partition_name="2025-q4",查询 expr="category=='hot'" 减扫描 90%。
  • K8s 配置:QueryNode.replicas=8,DataNode=6;HPA:CPU>70%、QPS/node>1k 扩容。

构建清单

# Helm install
helm install milvus zilliz/milvus -f values.yaml  # values: queryNode.replicas=8
# Collection创建
{"collection_name":"ann_search","shards_num":32,"fields":[{"name":"id","type":13},{"name":"vector","type":101,"dimension":768,"is_partition_key":false}]}
# 插入分区
insert(entities, partition_name="live_data"); flush()

监控:Prometheus milvus_shard_load_imbalance > 0.2警报。测试:sift1B 数据集,32 分片 QPS=15k,负载均衡 <10% 偏差。[GitHub Milvus repo]

2. HNSW-IVF 混合索引:精度速度权衡参数

HNSW 图搜索低延迟(logN),IVF 聚类减内存(nlist 簇)。混合:热数据 HNSW,冷数据 IVF_PQ。

索引类型对比(768 维、1 亿向量):

类型 params 内存 / 向量 Recall@10 构建时长 查询延迟 (ms)
HNSW M=48, efConstruction=256 96B 96% 2h 25
IVF_FLAT nlist=1M, nprobe=32 48B 93% 1h 18
IVF_PQ m=64, nbits=8, nprobe=64 24B 91% 45m 35
Hybrid HNSW 主 + IVF_PQ 辅 60B 95% 90m 22

构建管道

  1. 批量 insert>1M / 段触发 sealed。
  2. create_index("vector", {"index_type":"HNSW","metric_type":"L2","params":{"M":48,"efConstruction":256}})
  3. 冷数据:create_index("vector_cold", "IVF_PQ", {"m":64,"nbits":8})
  4. load () 全加载,index_load_status监控。

调优:ef=128(高 QPS 降 64),nprobe 动态(latency>50ms 增)。增量:build_trigger_threshold=1M。

3. 故障容忍查询规划管道

查询:Proxy→QueryCoord 计划→QueryNode 并行→Reduce。容错靠 Timetick(心跳 TS)、多副本、PKOracle(Bloom delete)。

管道参数

  • replicas=3,GuaranteeTs=1e12(bounded)。
  • QueryNode v2:Delegator 路由,Worker search。
  • 超时:search_timeout=30s,retry_times=3。
  • 优化:pre-filter scalar index(Trie),hybrid expr="price<100 && vector~query"。

容错清单

  1. Config:queryNode.guaranteeTimestamps.interval=100ms
  2. 测试:kill QueryNode,恢复 < 30s,QPS 降 < 15%。
  3. 回滚:release_collection(); load(v2_index=false)

查询示例

search([query_vec], "vector", param={"metric_type":"L2","params":{"ef":128,"nprobe":32}}, expr="timestamp>20251101", limit=10, timeout=10)

生产:P99<50ms,单节点故障 SLA>99.99%。[Web search: Milvus HNSW IVF hybrid]

4. 运维监控与阈值

  • Metrics:query_latency_p99>100ms扩 QueryNode;index_build_failures>0重试。
  • 告警:Zabix/Prometheus,内存 > 85% flush 加速。
  • 规模化:10 亿→GPU CAGRA 索引,QPSx10。

整合 LangChain:Milvus.from_params(...),RAG 首选。

资料来源: [1] https://github.com/milvus-io/milvus (架构 & 索引) [2] Milvus docs & benchmarks (分片查询容错)

(字数:1024)

查看归档