集群架构 #

一、架构概述 #

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