Milvus 通过提供分布式架构,其中包含用于横向可扩展性、容错性和高效资源利用的组件,从而促进扩展。它将计算和存储分离,允许每个层根据工作负载需求独立扩展。该系统采用微服务设计,关键组件(如协调器、工作节点和对象存储)可以部署在多台机器上,从而实现集群和分布式操作,避免单点故障。
对于集群和协调,Milvus 使用一组协调节点(根协调器、数据协调器等)来管理元数据、节点健康状况和任务调度。工作节点(查询节点、数据节点)处理特定的操作,例如索引或搜索。这些组件通过 etcd 进行通信以实现分布式一致性和服务发现。例如,增加更多查询节点可提高并行搜索能力,而数据节点则扩展数据写入吞吐量。这种解耦使团队能够精确分配资源——例如为对延迟敏感的搜索扩展内存密集型查询节点,同时保持存储节点针对磁盘 I/O 进行优化。
通过动态请求路由和分区实现负载均衡。代理层将传入查询分发到可用的工作节点,而分片则将数据集分割成由不同节点管理的分区。当节点加入或离开集群时,Milvus 会自动重新分配分片,确保负载均匀分布。例如,大型向量数据集可能会被分割成 16 个分片,在搜索期间每个分片由独立的查询节点处理。内置指标和与 Kubernetes 的集成实现了自动伸缩:如果 CPU 使用率激增,系统可以启动更多 Pod 来处理负载。
分布式索引存储依赖于对象存储(例如 S3、MinIO)来实现持久性和共享访问。Milvus 将热数据(频繁访问,存储在内存/SSD 中)与冷数据(归档到对象存储中)分离,从而优化成本和性能。索引(如 IVF_FLAT 或 HNSW)在节点之间并行构建,每个节点处理数据的子集。查询期间,来自分布式节点的局部结果会合并并重新排序。开发者可以配置参数,例如 nlist(IVF 索引中的聚类数量),以平衡准确性和可扩展性——更高的 nlist 值可提高精度,但在训练期间需要更多计算资源。这种灵活性允许根据从数百万到数十亿个向量的数据集调整系统。