集群架构 #
一、架构概述 #
1.1 整体架构 #
text
Milvus分布式架构:
┌─────────────────────────────────────────────────────┐
│ Milvus 集群 │
├─────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────┐ │
│ │ Access Layer │ │
│ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │
│ │ │ Proxy │ │ Proxy │ │ Proxy │ │ │
│ │ └─────────┘ └─────────┘ └─────────┘ │ │
│ └─────────────────────────────────────────────┘ │
│ │ │
│ ┌─────────────────────────────────────────────┐ │
│ │ Coordinator Layer │ │
│ │ ┌───────┐ ┌───────┐ ┌───────┐ ┌───────┐ │ │
│ │ │ Root │ │ Query │ │ Data │ │ Index │ │ │
│ │ │Coord │ │ Coord │ │ Coord │ │ Coord │ │ │
│ │ └───────┘ └───────┘ └───────┘ └───────┘ │ │
│ └─────────────────────────────────────────────┘ │
│ │ │
│ ┌─────────────────────────────────────────────┐ │
│ │ Worker Layer │ │
│ │ ┌───────┐ ┌───────┐ ┌───────┐ ┌───────┐ │ │
│ │ │ Query │ │ Data │ │ Index │ │ Query │ │ │
│ │ │ Node │ │ Node │ │ Node │ │ Node │ │ │
│ │ └───────┘ └───────┘ └───────┘ └───────┘ │ │
│ └─────────────────────────────────────────────┘ │
│ │ │
│ ┌─────────────────────────────────────────────┐ │
│ │ Storage Layer │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │
│ │ │ Meta Store│ │ Log Store│ │Obj Store │ │ │
│ │ │ (etcd) │ │ (Pulsar) │ │ (MinIO) │ │ │
│ │ └──────────┘ └──────────┘ └──────────┘ │ │
│ └─────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────┘
1.2 架构特点 #
text
架构特点:
┌─────────────────────────────────────────┐
│ 云原生设计 │
├─────────────────────────────────────────┤
│ - 存储计算分离 │
│ - 无状态服务 │
│ - 弹性伸缩 │
│ - 高可用 │
└─────────────────────────────────────────┘
┌─────────────────────────────────────────┐
│ 微服务架构 │
├─────────────────────────────────────────┤
│ - 组件独立部署 │
│ - 故障隔离 │
│ - 独立扩展 │
│ - 灵活配置 │
└─────────────────────────────────────────┘
二、接入层 (Access Layer) #
2.1 Proxy #
text
Proxy组件:
┌─────────────────────────────────────────┐
│ Proxy │
├─────────────────────────────────────────┤
│ 职责: │
│ - 接收客户端请求 │
│ - 请求验证和路由 │
│ - 结果聚合 │
│ - 负载均衡 │
├─────────────────────────────────────────┤
│ 特点: │
│ - 无状态 │
│ - 可水平扩展 │
│ - 支持多实例 │
└─────────────────────────────────────────┘
2.2 Proxy工作流程 #
text
请求处理流程:
┌──────────┐ ┌──────────┐ ┌──────────┐
│ 客户端 │────▶│ Proxy │────▶│ Coordinator│
└──────────┘ └──────────┘ └──────────┘
│
▼
┌──────────┐
│ 请求验证 │
└──────────┘
│
▼
┌──────────┐
│ 任务分发 │
└──────────┘
│
▼
┌──────────┐
│ 结果聚合 │
└──────────┘
三、协调服务层 (Coordinator Layer) #
3.1 Root Coordinator #
text
Root Coordinator:
┌─────────────────────────────────────────┐
│ Root Coordinator │
├─────────────────────────────────────────┤
│ 职责: │
│ - 元数据管理 │
│ - DDL操作处理 │
│ - 时间戳分配 │
│ - 集群拓扑管理 │
├─────────────────────────────────────────┤
│ 管理对象: │
│ - Collection │
│ - Partition │
│ - Index │
│ - Segment │
└─────────────────────────────────────────┘
3.2 Query Coordinator #
text
Query Coordinator:
┌─────────────────────────────────────────┐
│ Query Coordinator │
├─────────────────────────────────────────┤
│ 职责: │
│ - 查询节点管理 │
│ - 段分配和均衡 │
│ - 查询负载均衡 │
│ - 查询任务调度 │
├─────────────────────────────────────────┤
│ 管理对象: │
│ - Query Node │
│ - Segment分配 │
│ - 查询任务 │
└─────────────────────────────────────────┘
3.3 Data Coordinator #
text
Data Coordinator:
┌─────────────────────────────────────────┐
│ Data Coordinator │
├─────────────────────────────────────────┤
│ 职责: │
│ - 数据节点管理 │
│ - 段生命周期管理 │
│ - 数据分布管理 │
│ - 数据刷新控制 │
├─────────────────────────────────────────┤
│ 管理对象: │
│ - Data Node │
│ - Segment生命周期 │
│ - 数据分布 │
└─────────────────────────────────────────┘
3.4 Index Coordinator #
text
Index Coordinator:
┌─────────────────────────────────────────┐
│ Index Coordinator │
├─────────────────────────────────────────┤
│ 职责: │
│ - 索引节点管理 │
│ - 索引任务调度 │
│ - 索引状态管理 │
│ - 索引文件管理 │
├─────────────────────────────────────────┤
│ 管理对象: │
│ - Index Node │
│ - 索引任务 │
│ - 索引文件 │
└─────────────────────────────────────────┘
四、工作节点层 (Worker Layer) #
4.1 Query Node #
text
Query Node:
┌─────────────────────────────────────────┐
│ Query Node │
├─────────────────────────────────────────┤
│ 职责: │
│ - 执行向量搜索 │
│ - 执行标量查询 │
│ - 段数据加载 │
│ - 搜索结果返回 │
├─────────────────────────────────────────┤
│ 数据缓存: │
│ - Growing Segment (内存) │
│ - Sealed Segment (磁盘+缓存) │
│ - 索引数据 │
└─────────────────────────────────────────┘
4.2 Data Node #
text
Data Node:
┌─────────────────────────────────────────┐
│ Data Node │
├─────────────────────────────────────────┤
│ 职责: │
│ - 接收流数据 │
│ - 数据打包成段 │
│ - 段持久化 │
│ - 数据刷新 │
├─────────────────────────────────────────┤
│ 数据流: │
│ Log Store → Data Node → Object Store │
└─────────────────────────────────────────┘
4.3 Index Node #
text
Index Node:
┌─────────────────────────────────────────┐
│ Index Node │
├─────────────────────────────────────────┤
│ 职责: │
│ - 构建向量索引 │
│ - 索引文件生成 │
│ - 索引文件上传 │
├─────────────────────────────────────────┤
│ 索引构建流程: │
│ 数据下载 → 索引构建 → 文件上传 │
└─────────────────────────────────────────┘
五、存储层 (Storage Layer) #
5.1 Meta Store (etcd) #
text
Meta Store (etcd):
┌─────────────────────────────────────────┐
│ Meta Store │
├─────────────────────────────────────────┤
│ 存储内容: │
│ - Collection元数据 │
│ - Partition信息 │
│ - Segment信息 │
│ - Index元数据 │
│ - 节点注册信息 │
│ - 集群配置 │
├─────────────────────────────────────────┤
│ 特点: │
│ - 强一致性 │
│ - 高可用 │
│ - 分布式KV存储 │
└─────────────────────────────────────────┘
5.2 Log Store (Pulsar/Kafka) #
text
Log Store (Pulsar):
┌─────────────────────────────────────────┐
│ Log Store │
├─────────────────────────────────────────┤
│ 存储内容: │
│ - 数据变更日志 │
│ - 插入/删除操作 │
│ - DML操作记录 │
├─────────────────────────────────────────┤
│ 特点: │
│ - 持久化 │
│ - 顺序读写 │
│ - 发布订阅模式 │
│ - 数据回放 │
└─────────────────────────────────────────┘
5.3 Object Store (MinIO/S3) #
text
Object Store (MinIO):
┌─────────────────────────────────────────┐
│ Object Store │
├─────────────────────────────────────────┤
│ 存储内容: │
│ - 向量数据文件 │
│ - 索引文件 │
│ - 段数据文件 │
│ - 日志文件 │
├─────────────────────────────────────────┤
│ 特点: │
│ - 大容量存储 │
│ - 低成本 │
│ - 高可靠 │
│ - S3兼容 │
└─────────────────────────────────────────┘
六、数据流 #
6.1 写入流程 #
text
数据写入流程:
┌──────────┐ ┌──────────┐ ┌──────────┐
│ 客户端 │────▶│ Proxy │────▶│Log Store │
└──────────┘ └──────────┘ └────┬─────┘
│
▼
┌──────────┐
│ Data Node│
│ (消费日志)│
└────┬─────┘
│
▼
┌──────────┐
│Obj Store │
│(持久化) │
└──────────┘
6.2 查询流程 #
text
查询流程:
┌──────────┐ ┌──────────┐ ┌──────────┐
│ 客户端 │────▶│ Proxy │────▶│QueryCoord│
└──────────┘ └──────────┘ └────┬─────┘
│
▼
┌──────────┐
│Query Node│
│(执行搜索)│
└────┬─────┘
│
▼
┌──────────┐
│ 返回结果 │
└──────────┘
6.3 索引构建流程 #
text
索引构建流程:
┌──────────┐ ┌──────────┐ ┌──────────┐
│ 触发构建 │────▶│IndexCoord│────▶│Index Node│
└──────────┘ └──────────┘ └────┬─────┘
│
▼
┌──────────┐
│ 下载段数据│
└────┬─────┘
│
▼
┌──────────┐
│ 构建索引 │
└────┬─────┘
│
▼
┌──────────┐
│ 上传索引 │
└──────────┘
七、高可用设计 #
7.1 组件高可用 #
text
高可用配置:
┌─────────────────────────────────────────┐
│ 组件副本配置 │
├─────────────────────────────────────────┤
│ Proxy: 3+ 副本 │
│ Root Coord: 1 主 + 2 从 │
│ Query Coord: 1 主 + 2 从 │
│ Data Coord: 1 主 + 2 从 │
│ Index Coord: 1 主 + 2 从 │
│ Query Node: 3+ 副本 │
│ Data Node: 2+ 副本 │
│ Index Node: 2+ 副本 │
│ etcd: 3/5 节点集群 │
│ Pulsar: 3+ Broker │
│ MinIO: 4+ 节点分布式 │
└─────────────────────────────────────────┘
7.2 故障恢复 #
text
故障恢复机制:
┌─────────────────────────────────────────┐
│ 故障检测 │
├─────────────────────────────────────────┤
│ - 心跳检测 │
│ - 健康检查 │
│ - 超时判断 │
└─────────────────────────────────────────┘
┌─────────────────────────────────────────┐
│ 自动恢复 │
├─────────────────────────────────────────┤
│ - 主从切换 │
│ - 任务重新分配 │
│ - 数据重新均衡 │
└─────────────────────────────────────────┘
八、扩展性设计 #
8.1 水平扩展 #
text
水平扩展策略:
┌─────────────────────────────────────────┐
│ 无状态组件 │
├─────────────────────────────────────────┤
│ Proxy: 按请求量扩展 │
│ Query Node: 按查询负载扩展 │
│ Data Node: 按写入量扩展 │
│ Index Node: 按索引任务扩展 │
└─────────────────────────────────────────┘
┌─────────────────────────────────────────┐
│ 有状态组件 │
├─────────────────────────────────────────┤
│ Coordinator: 主从切换扩展 │
│ etcd: 增加节点 │
│ Pulsar: 增加Broker │
│ MinIO: 增加存储节点 │
└─────────────────────────────────────────┘
8.2 存储扩展 #
text
存储扩展策略:
数据分层存储:
┌─────────────────────────────────────────┐
│ 热数据 → SSD (高性能) │
│ 温数据 → HDD (标准) │
│ 冷数据 → 对象存储 (低成本) │
└─────────────────────────────────────────┘
九、总结 #
架构组件速查表:
| 层级 | 组件 | 职责 |
|---|---|---|
| 接入层 | Proxy | 请求处理、路由 |
| 协调层 | Root Coord | 元数据管理 |
| 协调层 | Query Coord | 查询调度 |
| 协调层 | Data Coord | 数据管理 |
| 协调层 | Index Coord | 索引管理 |
| 工作层 | Query Node | 执行查询 |
| 工作层 | Data Node | 数据处理 |
| 工作层 | Index Node | 索引构建 |
| 存储层 | etcd | 元数据存储 |
| 存储层 | Pulsar | 日志存储 |
| 存储层 | MinIO | 对象存储 |
下一步,让我们学习部署方案!
最后更新:2026-04-04