跳到主要内容

架构

概述

Milvus支持数据分片、数据持久化、矢量和标量数据的混合检索等。

milvus基于数据平面和控制平面相分离的原则,架构主要分四层:接入层,协调层、计算层和存储层。在扩展和数据恢复时,这些层是相互独立的。

接入层(Access Layer)

接入层由一组无状态代理服务组成,是系统前端和用户的端点。它验证客户端请求并减少返回结果。

  • Proxy本身是无状态的,一般使用nginx、ingress等负载均衡组件提供统一的服务地址
  • 由于Milvus采用MPP架构,代理会聚合处理中间结果,然后将最终结果返回给客户端。

协调器(Coordinate Service)

协调层将任务分配给工作节点并充当系统的大脑。主要任务包括:集群拓扑管理、负载均衡、生成时间戳、数据声明、数据管理。

协调器分三种:root coord、data coord、query coord

root coordinator

根协调器处理DDL和DCL请求,比如创建和删除Collection、Partition、index,管理时间戳等

query coordinator

查询协调器负责查询节点的拓扑和负载均衡

data coordinator

数据协调器负责管理数据节点的拓扑、维护元数据,并触发刷新、压缩等后台数据操作。

工作节点(Worker nodes)

工作节点遵循协调器的指令并执行DML命令。由于存算分离,工作节点是无状态的,部署在k8s上可以直接水平扩展。工作节点也分三类:查询节点、数据节点和索引节点

query node

查询节点检索增量日志数据,从对象存储中加载历史数据,在向量和标量数据之间混合检索。

data node

数据节点通过订阅log broker获取增量日志数据,并将日志快照存储到对象存储中。

index node

索引节点用于构建数据索引。

storage

storage负责数据持久化。也包括三种组件:元存储、对象存储、日志代理

meta storage

元存储用于存储元数据,包括节点状态、消息消费检查点、collection schema。milvus使用etcd进行元存储。

object storage

对象存储存储了日志的快照文件、标量和向量数据的索引文件以及中间查询结果。milvus使用minio做对象存储。

log broker

日志代理是一个发布-订阅系统,负责数据持久化、执行异步查询、事件通知以及查询结果的返回。milvus支持Pulsar、kafka、nats等做日志代理。