您的 RAG 流水线或推荐系统在开发阶段,处理数千个向量时运行良好。但现在您拥有 5000 万个嵌入,查询需要低于 100 毫秒的延迟,索引持续增长,并且内存消耗巨大。您需要一种向量数据库架构,它能够横向扩展,高效管理内存(并非所有数据都需要驻留在 RAM 中),在数据摄取期间处理并发写入而不会降低查询性能,并且作为本质上的搜索索引,其基础设施成本每月不超过 1 万美元。
可扩展向量数据库架构解决了在生产规模下操作向量搜索的挑战:跨节点索引分区(分片)、分层存储(热段在内存中,温段在 SSD 上,冷段在 S3 上)、带有负载均衡的查询路由以及基于查询负载和索引大小的自动伸缩。该模式涵盖了部署拓扑、容量规划、读/写隔离和成本优化。它是使 RAG 和推荐系统在大规模下可行的基础设施层。
Explore more design patterns and system architectures
MicrocosmWorks 通常推荐在团队已使用 PostgreSQL 且向量数量少于 500 万到 1000 万的项目中使用 pgvector,因为它避免引入新的基础设施组件,并原生支持混合的 SQL 加向量查询。超过 1000 万向量时,或者在高并发下需要低于 50 毫秒的 p99 延迟时,像 Qdrant、Weaviate 或 Milvus 这样专门构建的向量数据库通过优化的索引算法和 GPU 加速搜索,能提供显著更好的性能。我们通过基准测试客户实际的查询模式和增长预测,在架构审查期间帮助他们做出这个决定。
MicrocosmWorks 设计的向量数据库集群采用基于哈希或基于元数据的分片策略,将向量分布到各个节点,同时保持语义相关数据共置,以实现高效搜索。我们实现查询路由层,将搜索请求扇出到相关分片,并使用全局 Top-K 聚合合并结果,即使跨越数十个分片也能保持亚 100 毫秒的延迟。我们的监控仪表板跟踪分片均衡、查询分布和复制延迟,以防止在数据集扩展时出现热点。
MicrocosmWorks 应用 scalar quantization(将 float32 降至 int8)和 product quantization,可将向量存储压缩 4-8 倍,通常 recall 下降不到 2%。我们在部署到生产环境之前,通过对您实际的查询工作负载进行 A/B testing 来验证这一点。我们还实施了两阶段 retrieval 方法,其中 quantized vectors 用于初始 candidate retrieval,而 full-precision vectors 仅用于 top 结果的 final re-ranking。这种 hybrid strategy 使客户能够以极低的成本存储数亿个向量,同时保持搜索质量与 uncompressed operation 无异。
MicrocosmWorks 将矢量数据库部署在多副本配置中,利用同步复制确保写入持久性,并将读取副本分布在不同可用区,以实现容错和负载均衡。我们配置了采用健康检查驱动的主节点选举的自动化故障转移机制,确保节点故障时,读取不可用时间少于 10 秒,并且数据零丢失。我们的 infrastructure-as-code 模板包含预配置的备份计划、point-in-time recovery 以及针对每种矢量数据库引擎量身定制的 disaster recovery runbooks。
MicrocosmWorks 构建多集合的 vector database 部署,其中每个应用程序或 embedding model 都有其独立的 collection,并带有适当的 index configurations,同时共享底层的 cluster infrastructure 以实现成本效益。我们实现了一个统一的 query gateway,它根据应用程序上下文将请求路由到正确的 collection,并应用 collection-specific 的预处理,例如使用匹配模型进行 query embedding。这种 multi-tenant vector database 方法与每个应用程序运行单独的 cluster 相比,通常可将 infrastructure costs 降低 40-60%。
该架构将向量数据库节点部署在 集群拓扑 中,查询节点(读取路径)和数据节点(写入路径)分离。 摄取流水线 通过写入缓冲处理嵌入生成和批量 upsert,以避免影响查询延迟。 查询路由器 通过分片级并行化在读取副本之间分配搜索。 分层存储 将不常访问的段从内存移动到 SSD 再到 S3,并具有透明的查询时加载。 自动伸缩 根据查询 QPS 和 P99 延迟调整副本数量。
核心组件:| 层 | 技术 |
|---|---|
| 向量数据库 | Milvus (分布式), Qdrant (单节点/小型集群), Pinecone (托管) |
| 存储后端 | MinIO / S3 (段存储), SSD (温层), RAM (热层) |
| 协调服务 | etcd (Milvus 元数据), Pulsar/Kafka (预写日志) |
| 嵌入模型 | OpenAI text-embedding-3-large, Cohere embed-v4, BGE-M3, E5-large-v2 |
| 基础设施 | Kubernetes (EKS/GKE),带 GPU 节点用于嵌入,内存优化节点用于查询 |
| 监控 | Grafana + Milvus metrics exporter, 自定义 P99/召回率仪表板 |
| 使用场景 | 避免场景 |
|---|---|
| 向量数量超过 500 万且持续增长,需要横向扩展 | 您的向量数量 < 100 万——现有 PostgreSQL 上的 pgvector 已足够 |
| 低于 100 毫秒的 P99 查询延迟是硬性要求 | 查询延迟 500 毫秒以上可接受——更简单的方案即可 |
| 多个应用/租户共享向量基础设施 | 单个应用使用单个集合——请使用托管服务 |
| 成本优化需要分层存储(并非所有数据都驻留在 RAM 中) | 预算允许完全托管服务,且供应商定价适合您的规模 |
MW 在设计向量数据库基础设施时,采用“从第一天起就恰当规划,根据测量结果进行扩展”的方法。我们从基于向量数量、维度、索引类型和目标延迟进行容量规划,而非凭空猜测。我们在 Kubernetes 上的 Milvus 部署包含 Grafana 仪表板,用于跟踪段计数、内存利用率、查询延迟百分位数和召回率估计。我们已实施自动伸缩的 Milvus 集群,能够在工作时间处理 10 倍的流量峰值,并在夜间缩容,与静态配置相比,基础设施成本降低了 40-60%。
模型无法自行运行。训练、验证、部署和监控模型的管道才是实际产品——模型只是其中一个产物。