Milvus 的资源管理分为三层:查询节点、资源组和 数据库。
查询节点:处理查询任务的组件。它在物理机或容器(如 Kubernetes 中的 pod)上运行。
资源组:查询节点的集合,充当逻辑组件(数据库和 Collections)与物理资源之间的桥梁。您可以将一个或多个数据库或集合分配给一个资源组。
下面我将详细解释这三个概念。
你可以把整个 Milvus 系统想象成一个「大型图书馆系统」,里头有:
是什么?
跑在哪里?
干嘛用?
是什么?
举例理解:
假设你有 100 个 QueryNode,你可以划分成 2 个资源组:
rg_high_priority
:专门给 VIP 租户用,响应快。rg_low_priority
:给普通用户用。为什么要分资源组?
为了资源隔离,比如:
资源组就是一个调度系统:让哪些 QueryNode 服务哪些 Collection 或数据库。
是什么?
vector_db1
下有 items
、users
表。和资源组的关系?
用户查询请求
↓
┌─────────┐
│ Database│ ← 你定义的数据库,如 db1、db2
└─────────┘
↓
┌─────────────┐
│ Collection │ ← 数据表
└─────────────┘
↓
分配到某个资源组
↓
┌──────────────────┐
│ Resource Group A │ ← 一组 QueryNode
│ (高优先级) │
└──────────────────┘
↓
┌────────────────────┐
│ QueryNode A1 ~ A10 │ ← 干活的机器
└────────────────────┘
假设你有这样一个场景:
vip_customer_db
normal_customer_db
你可以这样做:
rg_vip
和 rg_normal
rg_vip
(比如 10 个节点),只给 rg_normal
分 4 个节点vip_customer_db
绑定到 rg_vip
,把 normal_customer_db
绑定到 rg_normal
这样:
rg_vip
中处理名称 | 是什么 | 谁组成的 | 管理对象 | 举例 |
---|---|---|---|---|
查询节点 | 干活的机器(QueryNode) | 单个服务实例 | 负责执行查询任务 | 一个 Pod / 容器 |
资源组 | 一组查询节点的集合 | 多个 QueryNode | 逻辑分组、调度单位 | 高优、低优资源组 |
数据库 | 存数据的逻辑库(租户单位) | 多个 Collection | 用户管理的数据集 | 用户A的数据库 user_db |
数据库 是租户的数据空间,资源组 是逻辑资源划分,查询节点 是实际执行工作的工人。
它们之间是:数据库 ←→ 资源组 ←→ 查询节点 的映射链。