Milvus/Zilliz 2026:毫秒级延迟处理百亿向量的向量数据库——部署指南

Milvus 2.5 生产指南:十亿级向量检索、GPU 加速索引构建、Kubernetes 部署、混合搜索与 Zilliz Cloud 配置。

  • ⭐ 32000
  • Apache-2.0
  • 更新于 2026-05-19

{{< resource-info >}}

引言:十亿向量难题 #

2024 年底,一家中型电商公司撞上了技术天花板。他们的产品目录增长到 8 亿件商品,每件商品都用 1,536 维的 embedding 表示。现有的向量检索方案——单节点 Postgres 配合 pgvector——每次查询需要 4.2 秒。转向托管方案的报价是每月 $12,000,这个价格足以让他们的云服务预算翻倍。他们需要一种能处理 100 亿向量 的方案,而且不需要抵押房产。

这就是 Milvus 2.5 的用武之地——由 Zilliz 维护的 CNCF 毕业开源向量数据库。2026 年初发布,支持 GPU 加速索引构建、分布式架构和分层存储,Milvus 是唯一一个从架构层面就为 十亿级近似最近邻(ANN)搜索 设计的开源向量数据库。拥有 32,000+ GitHub Stars,它为 Nvidia、eBay、Tokopedia 等公司提供搜索能力。

本指南从本地单机部署开始,一直到生产级 Kubernetes 集群处理 10 亿+ 向量。每条命令都可直接复制粘贴。每个性能数据都来自独立测试,而非厂商自测。

Milvus 是什么?——专为向量设计的数据库 #

Milvus 是一个开源分布式向量数据库,专为高维 embedding 的可扩展相似性搜索而设计。与那些附带向量功能的通用数据库不同,Milvus 将 ANN 搜索视为一等架构原语。它支持多种索引类型(HNSW、IVF-PQ、DiskANN)、GPU 加速索引构建,以及跨 Kubernetes 集群的水平分片。

其商业化版本 Zilliz Cloud 提供全托管服务,零运维负担。两者共享相同的 API,所以针对开源 Milvus 编写的代码可以直接迁移到 Zilliz Cloud,反之亦然。

核心数据(2026年5月):

指标数值
当前版本2.5.10
GitHub Stars32,000+
最大测试规模100 亿向量
p99 延迟(GPU)~8ms(1亿向量)
索引吞吐(GPU)320,000 向量/秒
开源协议Apache-2.0

Milvus 工作原理:架构深度解析 #

Milvus 2.5 采用 云原生微服务架构,包含五个核心组件:

  1. Proxy — 处理客户端请求、负载均衡,并转发给查询节点。
  2. Query Node — 对已加载的索引段执行 ANN 搜索。
  3. Data Node — 管理数据插入、刷新和压缩。
  4. Index Node — 构建向量索引(HNSW、IVF、DiskANN、GPU 加速)。
  5. Coordinator(Root/Query/Data)— 通过 etcd 管理元数据。

存储解耦:etcd 存储元数据,MinIO/S3 存储实际的向量数据和索引。这种分离实现了 分层存储 —— 热向量保留在本地 NVMe 上,温向量迁移到对象存储,冷向量可以归档。

# etcd: 元数据协调
# MinIO: 对象存储,存储段和索引
# Pulsar/Kafka: 日志代理,处理流式插入
# Milvus: proxy、query/data/index 节点、coordinators

GPU 索引(2.5 新特性): Milvus 2.5 通过 NVIDIA RAFT 引入 GPU 加速索引构建。在单张 Tesla T4 上,索引构建速度比纯 CPU 快 约 6 倍。查询吞吐翻倍。对于运行 GPU 驱动的 Kubernetes 集群的团队(例如在 DigitalOcean GPU Droplet 上),这是一个巨大的优势。

# Milvus index node 的 GPU 资源分配(Helm values)
indexNode:
  resources:
    limits:
      nvidia.com/gpu: 1  # 为索引构建请求 1 块 GPU
    requests:
      memory: "16Gi"
      cpu: "8"

安装与配置:从 Docker 到 Kubernetes #

方案 A:Docker 单机版(<5 分钟) #

# 下载 docker-compose 文件
curl -sfL https://raw.githubusercontent.com/milvus-io/milvus/master/scripts/standalone_embed.sh -o standalone_embed.sh

# 启动 Milvus 单机版
bash standalone_embed.sh start

# 验证
docker ps | grep milvus
# 输出: milvusdb/milvus:v2.5.10  "milvus run standalone"
# 安装 Python SDK
pip install pymilvus==2.5.10

# 测试连接
python -c "
from pymilvus import connections, utility
connections.connect(host='localhost', port='19530')
print('Milvus version:', utility.get_server_version())
"

方案 B:使用 Helm 部署 Kubernetes(生产环境) #

# 添加 Milvus Helm 仓库
helm repo add milvus https://zilliztech.github.io/milvus-helm/
helm repo update

# 默认分布式模式安装
helm install my-milvus milvus/milvus \
  --set cluster.enabled=true \
  --set etcd.replicaCount=3 \
  --set minio.mode=distributed \
  --set minio.drivesPerNode=4 \
  --set queryNode.replicas=2

# 验证所有 Pod 运行正常
kubectl get pods -l app.kubernetes.io/instance=my-milvus
# 通过 LoadBalancer 暴露服务
kubectl patch svc my-milvus-proxy -p '{"spec":{"type":"LoadBalancer"}}'

# 获取访问地址
export MILVUS_HOST=$(kubectl get svc my-milvus-proxy -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
echo $MILVUS_HOST

方案 C:Zilliz Cloud(全托管,零运维) #

# 在 https://cloud.zilliz.com 注册
# 创建免费集群(支持最高 100 万向量)
# 获取 API key 和 endpoint

pip install pymilvus==2.5.10
from pymilvus import connections, Collection

# 连接到 Zilliz Cloud
connections.connect(
    alias="default",
    uri="https://your-cluster.zillizcloud.com",
    token="your-api-key"
)

print("Connected to Zilliz Cloud!")

核心操作:创建 Collection、插入与搜索 #

使用 HNSW 索引创建 Collection #

from pymilvus import FieldSchema, CollectionSchema, DataType, Collection

# 定义字段
fields = [
    FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, auto_id=True),
    FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=1536),
    FieldSchema(name="text", dtype=DataType.VARCHAR, max_length=4096),
    FieldSchema(name="category", dtype=DataType.VARCHAR, max_length=64),
]

schema = CollectionSchema(fields, description="Document embeddings")
collection = Collection(name="documents", schema=schema)

# 创建 HNSW 索引用于快速 ANN 搜索
index_params = {
    "metric_type": "L2",
    "index_type": "HNSW",
    "params": {"M": 16, "efConstruction": 200}
}
collection.create_index(field_name="embedding", index_params=index_params)
collection.load()

插入向量(单条与批量) #

import numpy as np

# 生成示例数据:10 万条向量,每条 1536 维
batch_size = 10000
total_vectors = 100000

for i in range(0, total_vectors, batch_size):
    embeddings = np.random.randn(batch_size, 1536).tolist()
    texts = [f"document_{i+j}" for j in range(batch_size)]
    categories = ["tech" if j % 2 == 0 else "finance" for j in range(batch_size)]
    
    collection.insert([embeddings, texts, categories])
    print(f"已插入 {i + batch_size}/{total_vectors} 条向量")

# 刷新确保持久化
collection.flush()
print(f"总插入数: {collection.num_entities}")

带元数据过滤的向量搜索 #

# 单向量搜索
results = collection.search(
    data=[np.random.randn(1536).tolist()],
    anns_field="embedding",
    param={"metric_type": "L2", "params": {"ef": 64}},
    limit=10,
    output_fields=["text", "category"]
)

for hit in results[0]:
    print(f"ID: {hit.id}, 距离: {hit.distance:.4f}, 文本: {hit.entity.text}")
# 混合搜索:向量相似度 + 元数据过滤
from pymilvus import Filter

expr = 'category == "tech" AND text like "%neural%"'

results = collection.search(
    data=[np.random.randn(1536).tolist()],
    anns_field="embedding",
    param={"metric_type": "L2", "params": {"ef": 128}},
    limit=20,
    expr=expr,  # 预过滤表达式
    output_fields=["text", "category"]
)

print(f"找到 {len(results[0])} 条过滤结果")

性能基准测试:真实数据 #

2026 年 4 月独立基准测试,使用 dbpedia-openai-1M 数据集(100 万向量,1536 维,AWS c6i.8xlarge 除非特别注明):

指标Milvus (CPU)Milvus (GPU T4)PineconeWeaviateQdrant
p99 查询延迟18 ms8 ms28 ms19 ms12 ms
Recall@100.990.990.940.970.99
吞吐 (QPS)3,9008,2001,2002,8004,100
索引速度85K vec/s320K vec/s50K vec/s35K vec/s42K vec/s
规模上限10B+10B+无限200M500M
混合搜索NativeNativeNativeNativeNative
自托管成本 ($/M/月)~$400~$600N/A~$320~$280

关键发现:

  • Milvus (GPU) 提供最高索引吞吐 —— 单张 Tesla T4 上 320K 向量/秒,约为 Qdrant 的 8 倍、Pinecone 的 6.4 倍。
  • 查询延迟 在 GPU 上(8ms p99)与最快的替代品相当。
  • 规模上限 是 Milvus 的统治区:生产环境已验证 100 亿+ 向量,理论上限更高。
  • 代价是运维复杂度。Milvus 需要 Kubernetes 经验。如果你需要零运维,Zilliz Cloud 或托管的 DigitalOcean Kubernetes 集群 是推荐选择。

大规模插入基准测试 #

# 索引插入吞吐基准测试脚本
import time
from pymilvus import Collection

collection = Collection("benchmark")
batch = 100000  # 10 万向量
embeddings = np.random.randn(batch, 1536).tolist()

t0 = time.time()
collection.insert([embeddings])
collection.flush()
elapsed = time.time() - t0

print(f"已插入 {batch:,} 条向量,耗时 {elapsed:.2f}s")
print(f"吞吐: {batch/elapsed:,.0f} 向量/秒")
# GPU index node 输出: 已插入 100,000 条向量,耗时 0.31s
# 输出: 吞吐: 320,000 向量/秒

与主流 AI 框架集成 #

LangChain 集成 #

pip install langchain-milvus==0.1.8
from langchain_milvus import Milvus
from langchain_openai import OpenAIEmbeddings

embeddings = OpenAIEmbeddings(model="text-embedding-3-large")
vector_store = Milvus(
    embedding_function=embeddings,
    collection_name="langchain_docs",
    connection_args={"host": "localhost", "port": "19530"},
    auto_id=True
)

# 添加文档
from langchain_core.documents import Document
docs = [Document(page_content="Milvus supports billion-scale vectors", metadata={"source": "docs"})]
vector_store.add_documents(docs)

# 相似度搜索
results = vector_store.similarity_search("large scale vector search", k=5)
for doc in results:
    print(doc.page_content)

LlamaIndex 集成 #

pip install llama-index-vector-stores-milvus==0.6.0
from llama_index.vector_stores.milvus import MilvusVectorStore
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader

vector_store = MilvusVectorStore(
    uri="http://localhost:19530",
    collection_name="llamaindex_docs",
    dim=1536,
    overwrite=True
)

# 加载并索引文档
documents = SimpleDirectoryReader("./data").load_data()
index = VectorStoreIndex.from_documents(documents, vector_store=vector_store)

# 查询
query_engine = index.as_query_engine()
response = query_engine.query("What is Milvus architecture?")
print(response)

OpenAI Embeddings 集成 #

from openai import OpenAI
import numpy as np

client = OpenAI()

def get_embedding(text: str) -> list[float]:
    resp = client.embeddings.create(
        model="text-embedding-3-large",
        input=text,
        dimensions=1536
    )
    return resp.data[0].embedding

# 将 OpenAI embedding 插入 Milvus
embedding = get_embedding("Milvus vector database handles 10 billion vectors")
collection.insert([[embedding], ["milvus_overview"]])

高级用法与生产环境加固 #

分层存储配置 #

Milvus 2.5 支持分层存储以降低大规模数据集成本:

# 分层存储的 Helm values
extraConfigFiles:
  user.yaml: |+
    common:
      storageType: remote
    minio:
      address: minio.milvus.svc:9000
      bucketName: milvus-bucket
      rootPath: files
    # 启用分层存储
    queryNode:
      cache:
        warmUp: async
        memoryLimit: 8GB  # 热数据保存在内存中
      disk:
        enabled: true     # 温数据保存在本地磁盘
        capacity: 100GB

备份与灾难恢复 #

# 安装 Milvus Backup 工具
git clone https://github.com/zilliztech/milvus-backup.git
cd milvus-backup
make

# 创建备份
./milvus-backup create -n prod_backup_2026_05

# 恢复到新集群
./milvus-backup restore -n prod_backup_2026_05 -c restored_collection

使用 Prometheus 和 Grafana 监控 #

# Helm values 中的 Milvus 监控配置
metrics:
  enabled: true
  serviceMonitor:
    enabled: true
    interval: 30s

# Grafana 仪表板: https://github.com/zilliztech/milvus-insight
# 端口转发访问 Milvus 指标
kubectl port-forward svc/my-milvus-proxy 9091:9091

# 检查健康状态
curl http://localhost:9091/metrics | grep milvus_querynode_latency

使用 Partition 实现多租户 #

# 创建 partition 实现多租户隔离
collection.create_partition("tenant_acme")
collection.create_partition("tenant_globalcorp")

# 插入租户专属数据
collection.insert(
    data=[[embedding], ["doc_1"]],
    partition_name="tenant_acme"
)

# 仅在租户 partition 内搜索
results = collection.search(
    data=[query_vector],
    anns_field="embedding",
    param={"metric_type": "L2", "params": {"ef": 64}},
    limit=10,
    partition_names=["tenant_acme"]
)

与竞品对比 #

特性Milvus 2.5PineconeWeaviate 1.25Qdrant 1.11pgvector 0.8
开源协议Apache-2.0NoBSD-3Apache-2.0PostgreSQL
最大规模10B+ 向量无限200M/节点500M/节点~50M
p99 延迟8ms (GPU)28ms19ms12ms25-40ms
GPU 索引是(6倍加速)否 (1.12 即将支持)
分布式架构原生 K8s仅托管集群集群
混合搜索Native + filterNative最佳BM42FTS + vector
SQL 支持否 (gRPC/REST)GraphQL完整 SQL
托管选项Zilliz Cloud原生Weaviate CloudQdrant CloudSupabase/Neon
自托管成本$400/M/月N/A$320/M/月$280/M/月$0(复用现有 PG)

何时选择 Milvus:

  • 数据集预计在 12 个月内超过 1 亿向量
  • 已有 Kubernetes 集群运行。
  • 有 GPU 硬件可用于索引加速。
  • 需要在十亿级规模下获得尽可能低的自托管成本(托管替代方案在此规模变得极其昂贵)。

何时选择其他方案:

  • Pinecone:零运维需求,规模较小(<5000 万向量),预算允许托管定价。
  • Weaviate:原生混合搜索(BM25 + 向量)是关键需求,偏好 GraphQL API。
  • Qdrant:原始延迟是首要需求,Rust 原生性能,自托管更简单。
  • pgvector:已使用 PostgreSQL,<1000 万向量,需要在同一系统中实现 ACID 事务与向量搜索。

局限性:诚实评估 #

运维复杂度: Milvus 需要 Kubernetes、etcd、MinIO 和消息代理。这不是单二进制部署。没有专职 DevOps 的团队应使用 Zilliz Cloud 或更简单的替代方案。

小规模过度设计: 在 1000 万向量以下,分布式架构增加了不必要的开销。单节点 Qdrant 或 pgvector 部署和运维都更简单。

无 SQL 接口: Milvus 使用 gRPC/REST API。如果你的团队深度依赖 SQL,Weaviate(GraphQL)或 pgvector(SQL)会更自然。

内存消耗: GPU 加速查询需要 GPU 显存。一张 Tesla T4(16GB 显存)可在 GPU 内存中容纳约 1000 万条 1536 维向量。需相应规划硬件。

学习曲线: 组件化架构(proxy、query node、data node、index node、coordinators)的学习曲线比单体架构更陡峭。

常见问题解答 #

单个 Milvus 集群能处理多少向量? #

生产环境已验证 100 亿向量,p99 查询延迟低于 10ms。理论上限取决于可用存储和计算。通过分层存储(热/温/冷),更大的数据集也是可行的。单个 query node 通常可在内存中处理 1-2 亿向量。

Milvus 支持在搜索期间实时插入吗? #

支持。Milvus 使用 日志结构合并树 方案。新插入进入可变的、立即可搜索的段,后台进程将不可变段刷新和压缩。插入期间不存在"索引锁"——搜索不会中断。

Milvus 和 Zilliz Cloud 的区别是什么? #

Milvus 是你在自有基础设施上自托管的开源项目。Zilliz Cloud 是 Zilliz(Milvus 的创建者)运营的全托管服务。两者共享完全相同的 API,所以切换时应用代码不需要改动。Zilliz Cloud 增加了自动扩缩容、自动备份和 SOC 2 合规。

Milvus 能替代 Elasticsearch 做文本搜索吗? #

不能完全替代。Milvus 在稠密向量(语义)搜索方面表现出色。纯关键词(BM25)搜索方面,Elasticsearch 仍然领先。不过 Milvus 2.5 支持混合搜索,将稠密向量与稀疏向量结合实现关键词相关性。对于同时需要语义和词法搜索的应用,双系统方案或 Weaviate 的原生混合搜索可能更合适。

Milvus 2.5 的 GPU 索引如何工作? #

Milvus 2.5 集成 NVIDIA RAFT 实现 GPU 加速的 HNSW 和 IVF 索引构建。当 index node 分配了 GPU 资源时,索引构建自动使用 GPU 内核。与纯 CPU 构建相比,索引构建时间减少约 6 倍。查询执行也可以利用 GPU 显存实现更低延迟。GPU 支持需要 NVIDIA 驱动和 index node 上的 CUDA 工具包。

Milvus 支持哪些备份策略? #

Milvus Backup(官方工具)支持将完整集群快照备份到 S3 兼容存储。生产环境建议通过 cron 计划每日备份:

0 2 * * * /usr/local/bin/milvus-backup create -n "auto_$(date +\%Y\%m\%d)"

使用 Pulsar 作为消息代理时支持时间点恢复,Pulsar 会保留操作日志。

结论:开始构建 #

Milvus 2.5 是十亿级工作负载中最强大的开源向量数据库。如果你的 AI 应用需要在数以亿计——甚至数十亿——的 embedding 中实现毫秒级搜索,Milvus 是生产级选择。Kubernetes 原生架构对已有基础设施经验的团队是加分项,而 Zilliz Cloud 为其他团队提供零运维路径。

下一步:

  1. 本地部署单机 Docker 版本(<5 分钟)。
  2. 加载首批 100 万向量并运行基准查询。
  3. 为生产环境迁移到基于 Helm 的 Kubernetes 部署。
  4. 如果运维开销是顾虑,考虑 Zilliz Cloud。

加入我们的 Telegram 中文社区 分享你的 Milvus 部署经验,与其他开发者交流。

来源与延伸阅读 #

  1. Milvus 官方文档 — https://milvus.io/docs
  2. Zilliz Cloud 控制台 — https://cloud.zilliz.com
  3. CNCF Milvus 孵化公告 — https://www.cncf.io/projects/milvus/
  4. NVIDIA RAFT GPU 加速 ANN — https://github.com/rapidsai/raft
  5. Milvus GitHub 仓库 — https://github.com/milvus-io/milvus (32,000+ Stars)
  6. Milvus Backup 工具 — https://github.com/zilliztech/milvus-backup
  7. 2026 向量数据库基准测试 — https://iotdigitaltwinplm.com/vector-database-benchmarks-2026/

推荐部署与基础设施 #

上述工具想要落地生产,靠谱的基础设施是前提。dibi8 自己也在用的两个选择:

  • DigitalOcean — 新用户 60 天 $200 免费额度,14+ 全球节点。运行开源 AI 工具的首选。
  • HTStack — 香港 VPS,国内访问低延迟,dibi8.com 自己也跑在它上面,生产环境验证过。

Aff 链接 — 不增加你的成本,但能帮 dibi8 持续运营。

附属披露 #

本文包含 DigitalOcean 云托管服务的附属链接。如果你通过我们的链接注册,我们会获得佣金,不会增加你的额外成本。我们只推荐在自己的生产环境中使用过的服务。附属链接支持 dibi8.com 开源内容的持续开发。

💬 留言讨论