开源向量数据库架构解读——milvus

架构分层

按照数据和控制分离的原则,milvus 的架构分为四层:

  • 接入层
  • 协调服务
  • 工作节点
  • 存储层

接入层

接入层负责处理客户端请求,由一组无状态 proxy 组件组成,负责请求分发和结果汇聚、加工处理。

协调服务

协调服务是整个集群的大脑,负责集群拓扑管理、负载均衡、时间戳生成、数据定义和数据管理等。数据处理任务由协调服务分解,并分配给工作节点执行。

  • 根协调器(rootcoord),处理数据定义DDL和数据控制DCL,例如表创建删除、分区、索引等。
  • 数据协调器(datacoord),管理数据节点和索引节点的拓扑结构,维护元数据、触发刷新、压缩和索引构建等。
  • 查询协调器(querycoord),管理查询节点的拓扑结构和负载均衡。

工作节点

工作节点根据协调服务指令,执行来自代理的数据操作DML请求。由于存储和计算是分离的,因此工作节点是无状态的。

  • 查询节点(querynode)
  • 数据节点(datanode)
  • 索引节点(indexnode)

存储层

  • 元存储,采用 etcd 存储集群元数据快照,例如表定义、分区、索引等。
  • 对象存储,采用 Minio/S3 存储数据文件、索引文件、以及中间查询结果。
  • 消息队列,采用 Kafka/Pulsar 负责数据流数据持久化和事件通知。遵循“日志即数据”的设计理念,milvus 通过日志持久化和快照日志来保证数据的可靠性。

订阅更新,获取更多学习资料,请关注我们的公众号:

【小菜笔记】系列文章首发于公众号【小菜学编程】,敬请关注: