大数跨境
0
0

Milvus多租户的设计和实现

Milvus多租户的设计和实现 360智汇云开发者
2025-12-09
2
导读:随着 Milvus 在资源调度、存算分离和自动化治理上的持续演进,多租户将不再只是“资源划分”,而是整个 AI 向量服务架构的底座能力。

一、什么是多租户架构

多租户架构是一种软件架构,其中多个客户(租户)共享同一个应用实例和基础设施,同时维护数据隔离。在这种架构中,单个软件实例为多个租户服务,通过各种隔离机制将每个租户的数据与其他租户分开。

可以把多租户理解为:一台冰箱里放多个人的食材,但彼此不会串味,也不会互相把对方的冷冻室塞满。

二、多租户的优势

成本效益:由于多个用户共享同一个应用程序实例,因此可以显著降低软件供应商的硬件和运营成本。此外,对于用户来说,他们可以以更低的价格获得应用程序,因为分摊了高昂的初始成本。

易于维护和升级:由于所有用户共享同一个应用程序实例,因此软件供应商可以集中进行维护和升级,无需为每个用户单独进行。这大大简化了维护工作,并加快了应用程序的升级速度。

数据隔离:尽管多个用户共享同一个数据库,但通过系统的架构设计,可以确保每个用户的数据与其他用户的数据完全隔离。这保护了数据的完整性和隐私。

灵活性:多租户系统为用户提供了灵活性,使他们可以根据需要随时增加或减少服务的使用量。这对于具有季节性需求或快速变化的业务需求的企业来说非常有用。

三、Milvus多租户的设计与实现

Milvus通过数据结构的分层+RBAC+资源组来实现多租户之间数据、权限、资源的隔离。

1.数据结构的分层

Milvus 支持四个级别的多租户:数据库、Collection、Partition 和Partition Key

数据库级

每个租户都会分配一个相应的数据库,其中可包含一个或多个 Collections。

这种策略下,数据库中的数据可以通过资源组完全隔离,但受限集群数据库默认64数量的限制,支持的租户数量有限。

Collections 级

每个租户都会被分配到一个Collection。

这种策略下,数据可以通过资源组完全隔离。受限集群默认情况65535个 Collection的限制,支持的租户数量中等。

分区级

每个租户被分配到一个共享Collections的分区中,分区需要手动创建。

这种策略下,资源组可以对不同的分区做物理分组,资源也可以完全隔离,因为每个Collection最多可创建1024个分区,所以原则上支持的租户数量在千万级别。

Partition Key 级

所有的租户共享一个 Collections 和 Schema,但每个租户的数据会根据分区键值自动路由到 16 个物理隔离的分区中。

这种策略下,数据无法通过资源组完全隔离,但单个Collection支持的租户数量能达到百万级别。集群级别理论值更是能达到百亿级别。

各级别的比对

分区级和分区Key级的优缺点:

  • 能支持千万或上亿级的租户数量,但一套集群能否承受如此大的量有待验证;

  • 同一个集合下的不同租户之间需要共用一个集合的Schema,无法满足个性定制化;

  • RBAC最小级别权限管理为集合级,同一集合内不同租户之间的数据是共享的,对无法保证数据的安全性;

  • 租户获取数据时,需要增加逻辑条件过滤,消耗了搜索性能;

2.RBAC权限

RBAC(基于角色的访问控制)是一种基于角色的访问控制方法。通过 RBAC,可以精细地控制用户在 Collections、数据库和实例级别上可以执行的操作,增强数据的安全性。

RBAC的四个主要组成部分

  • 资源:可访问的资源实体。Milvus 中,资源分为三个级别:实例、数据库和 Collections。

  • 权限和权限组:对 Milvus 资源执行特定操作的权限(如创建 Collection、插入数据等);权限组是由多个权限和权限组组成的组。

  • 角色:权限和资源组成了角色,角色表示可以对哪些资源具有哪些操作权限的能力;

  • 用户:指使用 Milvus 的人。每个用户都有一个唯一的 ID,并被授予一个或多个角色。

示例

创建一个具有管理nobody库下所有集合权限的角色jack_role,并将其授权给用户jack

  • 创建用户jack

from pymilvus import MilvusClientclient = MilvusClient(    uri="http://localhost:19530",    token="root:Milvus")# 创建用户client.create_user(user_name="jack", password="jack@Password")
  • 创建角色jack_role

# 创建角色client.create_role(role_name="jack_role")
  • 使用为角色授权

# 授权该库下集合级别的高级权限client.grant_privilege_v2(    role_name="jack_role",    privilege="CollectionAdmin",    collection_name='*',    db_name='nobody',)# 授权该库下库级别的高级权限client.grant_privilege_v2(    role_name="jack_role",    privilege="DatabaseAdmin",    collection_name='*',    db_name='nobody',)
  • 将角色授权给用户

client.grant_role(user_name="jack", role_name="jack_role")

3.资源组的物理隔离

资源组的概念

一个资源组可以容纳 Milvus 集群中的多个或全部查询节点。Milvus通过在资源组之间分配查询节点的方式,将不同租户进行物理隔离。

如何管理

Milvus的资源管理分为三层:查询节点、资源组、数据库(集合)。将不同租户的数据库、Collection等的逻辑资源映射到物理资源上,从而实现多租户之间的物理隔离。

如上图中有三个逻辑数据库:X、Y 和 Z。

  • 数据库 X:包含集合A;

  • 数据库 Y:包含集合B和C;

  • 数据库 Z:包含集合D和E;

多租户的资源分配

  • 租户1:使用数据库X,将其内的集合A通过资源组1分配了一个查询节点;

  • 租户2:使用数据库Y和数据库Z中的集合D,则将相关资源通过资源组2分配了2个查询节点;

  • 租户3:使用数据库Z中的集合E,则将相关资源通过资源组3分配了1个查询节点;

这样资源组通过对不同租户分配相关资源,实现了多租户之间的物理资源隔离。

四、多租户的实践

使用库级的数据分层对jack用户下的资源进行隔离:

  • 创建租户

参见RBAC示例,创建jack租户。

  • 创建资源组

创建一个满足租户申请资源的资源组,如当前集群每个QueryNode资源配置为4C8G,而租户申请了8C16G的资源,则需要2个QueryNode

import pymilvusname = "rg_for_jack"node_num = 2try:    milvus_client.create_resource_group(name, config=ResourceGroupConfig(        requests={"node_num": node_num},        limits={"node_num": node_num},    ))    print(f"Succeeded in creating resource group {name}.")except Exception:    print("Failed to create the resource group.")
  • 将租户创建的集合分配到资源组上,实现资源隔离

collection_name = "demo"resource_groups = ['rg_for_jack']milvus_client.load_collection(collection_name=collection_name, replica_number=2, _resource_groups=resource_groups) 

五、未来Hulk的探索

1.多租户通过资源组隔离共享一套集群

当前hulk只提供了Milvus集群架构,对于业务来说成本需要支付整个集群其他组件的费用,当采用多租户方式后,业务只需要申请查询节点的资源成本,可以为业务节省一定的费用。

2.同一项目下不同业务线共享同一套集群

如果项目下业务线比较多,则可以不用按业务线申请集群,通过资源组的管理可以共享一套集群,还能实现业务线之间的资源隔离。

六、总结

Milvus的多租户机制为向量数据库带来了真正意义上的“云原生隔离能力",通过数据结构分层+资源组的灵活组合,业务可以在同一集群上实现从轻量级租户到业务线隔离的多种形态,从而确保隐私、合规性,并在共享基础设施中优化了资源的分配。

随着 Milvus 在资源调度、存算分离和自动化治理上的持续演进,多租户将不再只是“资源划分”,而是整个 AI 向量服务架构的底座能力。

使用Milvus,请至智汇云官网https://zyun.360.cn ,联系客服为您添加账号权限。



更多技术干货,

请关注“360智汇云开发者”👇

360智汇云是以"汇聚数据价值,助力智能未来"为目标的企业应用开放服务平台,融合360丰富的产品、技术力量,为客户提供平台服务。

目前,智汇云提供数据库、中间件、存储、大数据、人工智能、计算、网络、视联物联与通信等多种产品服务以及一站式解决方案。

官网:https://zyun.360.cn(复制在浏览器中打开)

更多好用又便宜的云产品,欢迎试用体验~

添加工作人员企业微信👇,get更快审核通道+试用包哦~

【声明】内容源于网络
0
0
360智汇云开发者
360智汇云是以"汇聚数据价值,助力智能未来"为目标的企业应用开放服务平台,融合360丰富的产品、技术力量,为客户提供平台服务。
内容 585
粉丝 0
360智汇云开发者 360智汇云是以"汇聚数据价值,助力智能未来"为目标的企业应用开放服务平台,融合360丰富的产品、技术力量,为客户提供平台服务。
总阅读205
粉丝0
内容585