不懂就问,Milvus 新上线的资源组功能到底怎么样?

news2025/3/11 1:29:50

在近期更新的 Milvus 2.x 版本中,我们上线了在社区中呼声一直很高的【资源组功能】。有了这个功能,用户再也不需要“为每个 collection 部署一套 Milvus 服务”的方案,轻松实现对 Query Node 资源进行分组管理,达到物理资源隔离的效果。

本文将从需求、方案以及实操层面出发,带你详细解读资源组功能。

alt

01.源自用户需求

上线资源组功能的契机来自和用户的一次沟通。

某次,在社区交流活动中,Milvus 的社区用户提出了这样一个问题: 基于 Milvus 部署了多个应用场景,根据数据源和应用场景将数据划分成了多个 Collection。不过,由于向量搜索具备着高度的 CPU 密集型特征,所以在业务的高峰时间段,多个 Collection 的同时查询会争抢 CPU 资源,彼此影响。

为了满足场景需要,用户选择了为每个 Collection 部署一套 Milvus 服务,从数据库的层面来避免查询过程中 Collection 之间的影响。这也是在没有资源组功能时一个比较标准的方案。尽管这套方案完美解决了用户的问题,却也带来了 Milvus 服务运维的开——用户需要同时运维多个 Milvus 集群。因此,在沟通中,用户提出了在一个 Milvus 服务中去实现这个场景的需求。

02.资源隔离方案

Milvus 在提供查询前,需要对 Collection 执行 load 操作,以加速后续查询的速度,实现更好的查询性能。结合 Milvus 用户的使用习惯,我们设计了一套 Milvus 的资源组方案。

Milvus 服务中维护了名为一个 __default_resource_group 的资源组,在 Milvus 启动后,默认所有的 QueryNode 都会加入到这个资源组进行管理,后续的 load 操作也会将 Collection 在这个资源组中进行加载。对于不需要感知物理资源的用户,所有的操作、系统表现没有发生任何变化。

如果用户有物理资源隔离的需求,那么可以创建多个自定义资源组,然后将默认资源组中的节点分配转移到自定义的资源组中,实现对 Milvus 集群中 QueryNode 资源的划分和物理隔离。随后在 load 操作中,可以去指定每一个 Collection 要加载到哪个资源组中。在加载 Collection 的同时,可实现资源的使用限制。

03.实现 Collection 资源隔离

在介绍完 Milvus 资源隔离的背景和方案后,我们可以通过一个例子来讲述实现 Collection 级别资源隔离的完整步骤。

下面的所有操作是基于用户部署了一个 6 个 QueryNode 的 Milvus 服务,所以会有 6 个 QueryNode 参与资源隔离过程中的划分和分配。

  • 创建两个自定义资源组和 rg1rg2,用于承载 QueryNode 资源。
import pymilvus

utility.create_resource_group("rg1", using='default')
utility.create_resource_group("rg2", using='default')

rgs = utility.list_resource_groups(using='default')
print(f"Resource group list: {rgs}")
# Resource group list: ['__default_resource_group', 'rg1', 'rg2']
  • 分别从 __default_resource_group 中向 rg1rg2 转移 3 个节点,实现所有 QueryNode 资源的隔离划分。
utility.transfer_node("__default_resource_group", "rg1", 3, using="default")
utility.transfer_node("__default_resource_group", "rg2", 3, using="default")
  • 假定用户有两个需要加载的 Collection, 分别为 Collection ACollection B, 这里通过将 Collection A 加载到 rg1, 将 Collection B 加载到 rg2, 以此实现 Collection ACollection B 的资源隔离。
# ask Milvus load the collection to the desired resource group.
# make sure that query nodes num should be greater or equal to replica_number
collection = Collection('collectionA')
collection.load(replica_number=3, _resource_group=['rg1']) 

collection = Collection('collectionB')
collection.load(replica_number=3, _resource_group=['rg2']) 

通过上述 3 个步骤,我们实现了 Collection 级别的资源隔离,每个 Collection 使用了 3 个独立的 QueryNode, 后续发生在 Collection 上的查询将会使用各自独立的 QueryNode, 彼此之间物理隔离,互不影响。

Milvus 通过资源组提供对 QueryNode 资源划分的能力,用户可以根据自身的需求灵活安排 Collection 的加载方案,实现各种级别的资源隔离,应对不同的场景和需求。更多关于 Milvus 资源组功能的使用细节,可以点击链接参考 Milvus Doc。

(本文作者刘伟系 Zilliz 高级研发工程师 )

本文由 mdnice 多平台发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/433420.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++】STL中的容器适配器 stack queue 和 priority_queue 的模拟实现

STL中的容器适配器 一、容器适配器1、什么是容器适配器2、STL标准库中的容器适配器 二、stack的模拟实现1、stack的简单介绍2、栈的模拟实现 三、queue的模拟实现1、queue的简单介绍2、queue的模拟实现 四、priority_queue的模拟实现1、priority_queue的简单介绍2、priority_qu…

家用洗地机哪款好用?好用的洗地机分享

要说现在家居清洁用什么单品更省心,洗地机必须要算一项。虽然这在国际上也不是什么新鲜的概念了,但是在国内兴起也只是这几年的事,关于家用洗地机什么牌子最好之类的问题也是很多人都比较关心的问题。我个人也是不喜欢做家务的,家…

Anaconda及其他说明及安装

来自神秘人的投稿! 以下内容来源于官方视频说明:Anaconda Distribution versus Miniconda和其他整理与添加。 一、基础信息了解 1. 什么是Anaconda Anaconda Distribution:形象的比喻——一台笔记本电脑,一切都组装好了&#x…

利用用户生成内容来促进您的 WooCommerce 商店的销售

用户生成内容 (UGC) 是由对品牌或其产品和服务进行评论或评论的消费者创建的内容。它可以包括评论、照片、博客文章、推文或任何类型的社交媒体内容。 UGC 可以应品牌要求制作,也可以由产品用户独立制作。当用户生成的内容是独立制作的时候——比如一个新布加迪手…

UG NX二次开发(C#)-建模-移除特征参数

文章目录 1、前言2、在UG NX中的操作3、 利用UFun函数实现1、前言 UG NX建模方式是采用特征建模的,创建一个对象都是一个特征,这在历史记录中可以查看特征的建模历史、特征的参数已经特征之间的关联关系。有时为了设计的需要,需要去除特征之间的关联关系,那么就要移除特征…

【硬件外设使用】——ADC

【硬件外设使用】——ADC ADC基本概念ADC使用方法pyb.adcmachine.adc ADC可用的传感器 ADC基本概念 ADC是模拟数字转换器(Analog-to-Digital Converter)的缩写,它是一种将模拟信号转换成数字信号的电子元件。 ADC广泛用于测量和监测领域&…

sggJava基础第四天

1 分支结构 分支结构 根据条件,选择性地执行某段代码。 有if…else和switch-case两种分支语句。 概述 顺序结构的程序虽然能解决计算、输出等问题 但不能做判断再选择。对于要先做判断再选择的问题就要使用分支结构 if…else形式 单分支结构 代码实现 …

leetcode160. 相交链表

给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。 图示两个链表在节点 c1 开始相交: 题目数据 保证 整个链式结构中不存在环。 注意,函数返回结果后&…

把脉分布式事务的模型、协议和方案

在当前的技术发展阶段,不同的业务场景对一致性、可靠性、易用性、性能等要求不同,应用架构可以根据实际场景的需求,灵活选择合适的分布式事务解决方案。行业中把分布式事务解决方案分为刚性事务方案和柔性事务方案这两大类。 就刚性事务这个…

leetcode328. 奇偶链表

给定单链表的头节点 head ,将所有索引为奇数的节点和索引为偶数的节点分别组合在一起,然后返回重新排序的列表。 第一个节点的索引被认为是 奇数 , 第二个节点的索引为 偶数 ,以此类推。 请注意,偶数组和奇数组内部的相…

CentOS 7安装GitLab、创建用户、创建Repo、拉取推送

效果图 前言 gitlab全球出名,包含免费的社区版CE、收费的企业版EE,在国内安装速度一般; gitlab极狐版是中国特供版,用起来就跟CE一样,推荐国内使用~ 实现步骤 - 安装&配置 先准备好gitlab服务对外的访问地址&am…

技术分享 | MySQL级联复制下进行大表的字段扩容

作者:雷文霆 爱可生华东交付服务部 DBA 成员,主要负责Mysql故障处理及相关技术支持。爱好看书,电影。座右铭,每一个不曾起舞的日子,都是对生命的辜负。 本文来源:原创投稿 *爱可生开源社区出品,…

使用Vite工具构建OpenLayers应用

vite作为最近大火的前端构建工具,吸引了大批开发者和工具框架作者的关注。vite自称为下一代的构建工具,这是要取代webpack的节奏啊。openlayers最新版本的案例代码就使用了vite来构建,因此这一篇文章我们来给大家示范一下如何使用vite来构建一个基于openlayers的应用。 首先…

从「搭子」文化,看融云如何助力垂类社交应用增长

互联网人拜佛 be like 👆,主打的就是一个垂直和精准。关注【融云全球互联网通信云】了解更多 其实,这也是年轻人的交友现状。最近随着大学生“特种兵式”旅游出圈的“搭子”友情,就是这样。 “搭子”,AKA 垂直细分领…

怎么把图片拼接成长图,3招教你快速处理

怎么把图片拼接成长图的方法,有没有快速便捷可一键操作的呢?当我们把图片拼接成长图有很多优点,比如说我们在图片文件传输的时候就更加快捷方便,还有就是我们在图片展示的时候更加统一。虽然有这么多优点,但是如果我们…

【RobotFramework自动化测试】

robotframework介绍 RF是一个基于Python语言开发的,可扩展的,是以关键字驱动模式的自动化测试框架。RF最新的版本是2019 年7月份发布,7月份之前只支持python2.7,7月之后支持3.X的版本 robotframework的安装 安装python环境&…

【JUC】CAS

【JUC】CAS 文章目录 【JUC】CAS1. 概述2. Unsafe类 1. 概述 在Java并发编程中,CAS是一种非阻塞的算法,即Compare and Swap(比较并交换)。 CAS通过比较内存中某个位置的值和预期值,如果相同,则将该位置的…

springcloud各个组件搭配使用演示

springcloud各个组件使用demo Eureka服务注册中心 创建三个eureka服务注册中心,分别为: eureka-server1 spring:application:name: eureka-server1 server:port: 8001eureka:client:service-url:defaultZone: http://localhost:8002/eureka/,http://localhost:8003/eureka/…

EtherCAT和Ethernet的不同点有哪些, 通信周期又是什么意思?

小伙伴们,我们又来了。上期大概介绍了EtherCAT的一些特性,本期我们将会更详细的介绍一下EtherCAT的实现方式,通信周期的意义到底是什么、SDO和PDO到底是什么等概念。 首先要声明,尽管本期介绍略微深入,实际上小伙伴使…

超详细!腾讯NLP算法岗面经(已offer)

作者 | ZipZou 整理 | NewBeeNLP 面试锦囊之面经分享系列,持续更新中 可以后台回复"面试"加入交流讨论组噢 分享一篇旧文,希望大家都成功上岸~ 写在前面 首先来段简单的自我介绍:2021届硕士,硕士期间未有实习经历&…