Milvus 2.2 Benchmark 测试报告
本报告展示了 Milvus 2.2.0 的主要测试结果。它旨在提供 Milvus 2.2.0 搜索性能的概况,特别是在向上扩展和向外扩展能力方面。

摘要
- 与 Milvus 2.1 相比,Milvus 2.2.0 在集群模式下的 QPS 增加了 48% 以上,在独立模式下增加了 75% 以上。
- Milvus 2.2.0 具有令人印象深刻的向上扩展和向外扩展能力:
- 将 CPU 核心数从 8 个扩展到 32 个时,QPS 线性增加。
- 将 Querynode 副本从 1 个扩展到 8 个时,QPS 线性增加。
术语
点击查看测试中使用的术语详细信息
| 术语 | 描述 |
|---|---|
| nq | 一次搜索请求中要搜索的向量数量 |
| topk | 搜索请求中每个向量(在 nq 中)要检索的最近向量数量 |
| ef | HNSW 索引的特定搜索参数 |
| RT | 从发送请求到接收响应的响应时间 |
| QPS | 每秒成功处理的搜索请求数量 |
测试环境
所有测试都在以下环境中进行。
硬件环境
| 硬件 | 规格 |
|---|---|
| CPU | Intel(R) Xeon(R) Gold 6226R CPU @ 2.90GHz |
| 内存 | 16*\32 GB RDIMM, 3200 MT/s |
| SSD | SATA 6 Gbps |
软件环境
| 软件 | 版本 |
|---|---|
| Milvus | v2.2.0 |
| Milvus GO SDK | v2.2.0 |
部署方案
- Milvus 实例(独立或集群)通过 Helm 部署在基于物理或虚拟机的 Kubernetes 集群上。
- 不同的测试仅在 CPU 核心数、内存大小和副本数(工作节点)方面有所不同,这仅适用于 Milvus 集群。
- 未指定的配置与默认配置相同。
- Milvus 依赖项(MinIO、Pulsar 和 Etcd)在每个节点的本地 SSD 上存储数据。
- 搜索请求通过 Milvus GO SDK 发送到 Milvus 实例。
数据集
测试使用来自 ANN-Benchmarks 的开源数据集 SIFT(128 维)。
测试流程
- 使用 Helm 启动 Milvus 实例,并使用每个测试中列出的相应服务器配置。
- 通过 Milvus GO SDK 连接到 Milvus 实例并获取相应的测试结果。
- 创建一个 Collection。
- 插入 100 万个 SIFT 向量。构建 HNSW 索引,并通过将
M设置为8,efConstruction设置为200来配置索引参数。 - 加载 Collection。
- 使用不同的并发数搜索,搜索参数为
nq=1, topk=1, ef=64,每个并发的持续时间至少为 1 小时。
测试结果
Milvus 2.2.0 与 Milvus 2.1.0 对比
集群
服务器配置(集群)
queryNode:
replicas: 1
resources:
limits:
cpu: "12.0"
memory: 8Gi
requests:
cpu: "12.0"
memory: 8Gi
搜索性能
| Milvus | QPS | RT(TP99) / ms | RT(TP50) / ms | fail/s |
|---|---|---|---|---|
| 2.1.0 | 6904 | 59 | 28 | 0 |
| 2.2.0 | 10248 | 63 | 24 | 0 |

独立
服务器配置(独立)
standalone:
replicas: 1
resources:
limits:
cpu: "12.0"
memory: 16Gi
requests:
cpu: "12.0"
memory: 16Gi
搜索性能
| Milvus | QPS | RT(TP99) / ms | RT(TP50) / ms | fail/s |
|---|---|---|---|---|
| 2.1.0 | 4287 | 104 | 76 | 0 |
| 2.2.0 | 7522 | 127 | 79 | 0 |

Milvus 2.2.0 向上扩展
扩展一个 Querynode 中的 CPU 核心数以检查向上扩展能力。
服务器配置(集群)
queryNode:
replicas: 1
resources:
limits:
cpu: "8.0" /"12.0" /"16.0" /"32.0"
memory: 8Gi
requests:
cpu: "8.0" /"12.0" /"16.0" /"32.0"
memory: 8Gi
搜索性能
| CPU 核心数 | 并发数 | QPS | RT(TP99) / ms | RT(TP50) / ms | fail/s |
|---|---|---|---|---|---|
| 8 | 500 | 7153 | 127 | 83 | 0 |
| 12 | 300 | 10248 | 63 | 24 | 0 |
| 16 | 600 | 14135 | 85 | 42 | 0 |
| 32 | 600 | 20281 | 63 | 28 | 0 |

Milvus 2.2.0 向外扩展
扩展更多带有更多 Querynode 的副本以检查向外扩展能力。
注意:加载 Collection 时,Querynode 的数量等于 replica_number。
服务器配置(集群)
queryNode:
replicas: 1 / 2 / 4 / 8
resources:
limits:
cpu: "8.0"
memory: 8Gi
requests:
cpu: "8.0"
memory: 8Gi
| 副本数 | 并发数 | QPS | RT(TP99) / ms | RT(TP50) / ms | fail/s |
|---|---|---|---|---|---|
| 1 | 500 | 7153 | 127 | 83 | 0 |
| 2 | 500 | 15903 | 105 | 27 | 0 |
| 4 | 800 | 19281 | 109 | 40 | 0 |
| 8 | 1200 | 30655 | 93 | 38 | 0 |

下一步
- 尝试按照此指南自行执行 Milvus 2.2.0 基准测试,但您应该在此指南中使用 Milvus 2.2 和 Pymilvus 2.2。