CN113609071A - 一种用于消息队列的自动扩容方法及装置 - Google Patents
一种用于消息队列的自动扩容方法及装置 Download PDFInfo
- Publication number
- CN113609071A CN113609071A CN202110859802.8A CN202110859802A CN113609071A CN 113609071 A CN113609071 A CN 113609071A CN 202110859802 A CN202110859802 A CN 202110859802A CN 113609071 A CN113609071 A CN 113609071A
- Authority
- CN
- China
- Prior art keywords
- load
- partition
- target
- candidate
- message queue
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 63
- 238000005192 partition Methods 0.000 claims abstract description 461
- 238000004891 communication Methods 0.000 claims description 16
- 238000004590 computer program Methods 0.000 claims description 5
- 238000013316 zoning Methods 0.000 claims 1
- 230000001960 triggered effect Effects 0.000 abstract description 3
- 238000012545 processing Methods 0.000 description 8
- 238000010586 diagram Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 238000003491 array Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/11—File system administration, e.g. details of archiving or snapshots
- G06F16/122—File system administration, e.g. details of archiving or snapshots using management policies
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/13—File access structures, e.g. distributed indices
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/17—Details of further file system functions
- G06F16/1727—Details of free space management performed by the file system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/17—Details of further file system functions
- G06F16/1734—Details of monitoring file system events, e.g. by the use of hooks, filter drivers, logs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/18—File system types
- G06F16/182—Distributed file systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/548—Queue
Abstract
本申请涉及一种用于消息队列的自动扩容方法及装置。其中,方法包括:获取目标消息队列中每个候选分区的负载;根据每个所述候选分区的负载以及目标负载阀值,判断所述候选分区中是否存在高负载分区,其中,所述高负载分区的负载高于所述目标负载阀值;在确定存在至少一个所述高负载分区的情况下,生成用于对所述目标消息队列进行分区扩容的目标指令;按照所述目标指令,在所述目标消息队列中增加至少一个新增分区。通过本实施例中的方法,可以在目标消息队列中存在高负载分区的情况下,自动触发对该目标消息队列增加至少一个新增分区,进而可以提高目标消息队列的负载能力,并且便于后期通过新增分区分担高负载分区的负载目的。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及一种用于消息队列的自动扩容方法及装置。
背景技术
消息队列是一种消息传输的中间件,常用于各个系统之间的解耦、数据转发、异步通信、流量削峰的场景;其中,支持发布/订阅(publish/subscribe,简称pub/sub)的topic消息传递模型为一种广泛使用的能够广播的消息队列模型,topic消息传递模型中包括生产者(producer)、主题(topic,即消息队列)、分区(partition)、消费者(consumer)。
在相关技术中的消息队列的组件,对于分区的扩容(例如,当前的分区数为1,因为要承载更大的数据量级,需要将分区修改为2或者3甚至更大)只能通过手动的去调用消息队列的命令或者通过修改配置文件的方式来实现,因此需要人工对消息队列的负载进行监测,以达到及时进行分区扩容的目的。
相关技术中采用人工对消息队列进行分区扩容由于无法自适应弹性扩容,因此存在扩容效率低下的技术问题。
针对相关技术的消息队列中存在扩容效率低下的技术问题,目前尚未提供有效的解决方案。
发明内容
为了解决上述消息队列中存在扩容效率低下的技术问题,本申请提供了一种用于消息队列的自动扩容方法及装置。
第一方面,本申请实施例提供了一种用于消息队列的自动扩容方法,包括:
获取目标消息队列中每个候选分区的负载;
根据每个所述候选分区的负载以及目标负载阀值,判断所述候选分区中是否存在高负载分区,其中,所述高负载分区的负载高于所述目标负载阀值;
在确定存在至少一个所述高负载分区的情况下,生成用于对所述目标消息队列进行分区扩容的目标指令;
按照所述目标指令,在所述目标消息队列中增加至少一个新增分区。
可选地,如前述的方法,所述根据每个所述候选分区的负载以及目标负载阀值,判断所述候选分区中是否存在高负载分区包括:
在所述候选分区的负载指示所述候选分区的数据负载大于或等于目标数据负载阀值,或所述候选分区的计算资源负载大于或等于目标计算资源负载阀值的情况下,将所述候选分区确定为所述高负载分区。
可选地,如前述的方法,在所述在确定存在至少一个所述高负载分区的情况下,生成用于对所述目标消息队列进行分区扩容的目标指令之前,所述方法还包括:
在除所述高负载分区之外的所有所述候选分区中,确定出目标低负载分区;
确定所述目标低负载分区的目标分区标识。
可选地,如前述的方法,所述按照所述目标指令,在所述目标消息队列中增加至少一个新增分区包括:
按照所述目标分区标识,将所述目标指令发送至所述目标低负载分区;
在所述目标低负载分区执行所述目标指令之后,在所述目标低负载分区所在的目标节点中增加至少一个所述新增分区。
可选地,如前述的方法,所述在除所述高负载分区之外的所有所述候选分区中,确定出目标低负载分区包括:
将除所述高负载分区之外的所有所述候选分区确定为低负载分区;
确定每个所述低负载分区的负载;
在所有所述低负载分区中,确定出所述负载最低的所述目标低负载分区。
可选地,如前述的方法,所述获取目标消息队列中每个候选分区的负载包括:
获取目标集群中每个候选消息队列的负载信息,其中,每个所述负载信息包括对应的所述候选消息队列中每个分区的负载;
根据所述负载信息在所有所述候选消息队列中确定出所述目标消息队列,并确定所述目标消息队列每个所述候选分区的负载,其中,所述目标消息队列中存在至少一个所述候选分区的负载高于目标负载阀值。
可选地,如前述的方法,在所述按照所述目标指令,在所述目标消息队列中增加至少一个新增分区之后,所述方法还包括:
获取所述新增分区的分区信息;
根据所述分区信息对所述目标消息队列的历史元数据信息进行更新,得到更新后元数据信息;
按照所述更新后元数据信息将待写入数据写入至所述新增分区中。
第二方面,本申请实施例提供了一种用于消息队列的自动扩容装置,包括:
获取模块,用于获取目标消息队列中每个候选分区的负载;
判断模块,用于根据每个所述候选分区的负载以及目标负载阀值,判断所述候选分区中是否存在高负载分区,其中,所述高负载分区的负载高于所述目标负载阀值;
生成模块,用于在确定存在至少一个所述高负载分区的情况下,生成用于对所述目标消息队列进行分区扩容的目标指令;
新增模块,用于按照所述目标指令,在所述目标消息队列中增加至少一个新增分区。
第三方面,本申请实施例提供了一种电子设备,包括:处理器、通信接口、存储器和通信总线,其中,所述处理器、通信接口和存储器通过通信总线完成相互间的通信;
所述存储器,用于存放计算机程序;
所述处理器,用于执行所述计算机程序时,实现如前述任一项所述的方法。
第四方面,本申请实施例提供了一种计算机可读存储介质,所述存储介质包括存储的程序,其中,所述程序运行时执行如前任一项所述的方法。
通过本实施例中的方法,可以在目标消息队列中存在高负载分区的情况下,自动触发对该目标消息队列增加至少一个新增分区,进而可以提高目标消息队列的负载能力,并且便于后期通过新增分区分担高负载分区的负载目的。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的一种用于消息队列的自动扩容方法的流程图;
图2为本申请另一实施例提供的一种用于消息队列的自动扩容方法的流程图;
图3为本申请另一实施例提供的一种用于消息队列的自动扩容方法的流程图;
图4为本申请实施例提供的一种消息队列的负载均衡装置的框图;
图5为本申请实施例提供的一种消息队列架构图;
图6为本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请的一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。
根据本申请实施例的一个方面,提供了一种用于消息队列的自动扩容方法。可选地,在本实施例中,上述用于消息队列的自动扩容方法可以应用于由一个或多个服务器所构成的硬件环境中。服务器通过网络与终端进行连接,可用于为终端或终端上安装的客户端提供服务,并且,可在服务器上或独立于服务器设置数据库,用于为服务器提供数据存储服务。
上述网络可以包括但不限于以下至少之一:有线网络,无线网络。上述有线网络可以包括但不限于以下至少之一:广域网,城域网,局域网,上述无线网络可以包括但不限于以下至少之一:WIFI(Wireless Fidelity,无线保真),蓝牙。终端可以并不限定于为PC、手机、平板电脑等。
以由服务器来执行本实施例中的用于消息队列的自动扩容方法为例,图1为本申请实施例提供的一种用于消息队列的自动扩容方法,包括如下所述步骤:
步骤S101,获取目标消息队列中每个候选分区的负载。
本实施例中的用于消息队列的自动扩容方法可以应用于topic消息传递模型中topic(主题,即消息队列)中存在至少一个候选分区(即partition)的负载过高的情况下,通过对消息队列进行自动扩容以降低各个候选分区的负载的场景。
目标消息队列可以是需要判断是否需要进行分区扩容的多个消息队列中的一个。目标消息队列可以部署于多个节点构成的集群中,目标消息队列中可以设有多个候选分区,每个候选分区设于一个节点中,并且每个节点中可以设有多个候选分区,每个消息队列的候选分区也可以分布在不同的节点中,每个候选分区在物理磁盘上对应一个文件夹,该文件夹下存储这个候选分区的所有消息和索引文件。例如,某一个topic下面一共有3个候选分区,3个候选分区分别在三个不同的节点中。在确定目标消息队列的所有候选分区之后,可以通过该目标消息队列的历史元数据信息确定出每个候选分区的负载。
负载可以是用于指示对应的候选分区在数据处理过程中的数据处理强度的信息。候选分区与负载之间存在一一对应关系,并且一般情况下,候选分区的负载即为候选分区所在的节点的负载;例如,当存在3个候选分区,则存在与每个候选分区对应的负载,进而可以基于负载得到每个候选分区的数据处理强度,并且,一般情况下,当一个候选分区的负载越高,该候选分区的数据处理强度也越高。
步骤S102,根据每个候选分区的负载以及目标负载阀值,判断候选分区中是否存在高负载分区,其中,高负载分区的负载高于目标负载阀值。
在确定每个候选分区的负载之后,可以通过预先设定的目标负载阀值确定出候选分区中是否存在高负载分区。
目标负载阀值可以是预先设定的,用于判断负载是否属于高负载的阀值。例如,当目标负载阀值中只包括一个类型为A的阀值a时,则候选分区中类型为A的负载为a’,当a’≥a时,即判定该候选分区为高负载分区,当a’<a时,即判定该候选分区为低负载分区。
步骤S103,在确定存在至少一个高负载分区的情况下,生成用于对目标消息队列进行分区扩容的目标指令。
当在所有候选分区中确定出至少一个高负载分区的情况下。在目标消息队列中存在至少一个高负载分区的情况下,即可以将目标消息队列判定为需要进行分区扩容,以将部分流量切换到通过新的分区,进而降低各个高负载分区的负载。并可通过生成用于对目标消息队列进行分区扩容的目标指令。
目标指令可以是能够触发在目标消息队列中新增分区的指令。并且,只需目标指令满足能够触发进行分区扩容的要求即可,包括但不限于:“存在高负载分区”、“需要进行扩容”等等。
步骤S104,按照目标指令,在目标消息队列中增加至少一个新增分区。
在生成目标指令之后,即可通过执行该目标指令,通过对目标消息队列进行分区扩容,新增至少一个新分区。进一步的,可以预先设定新分区的个数与消息队列的整体负载之间的对应关系,并且可以根据每个高负载分区的负载,得到目标消息队列的整体目标负载,进而根据对应关系以及整体目标负载匹配得到所需新增的新分区的个数。
通过本实施例中的方法,可以在目标消息队列中存在高负载分区的情况下,自动触发对该目标消息队列增加至少一个新增分区,进而可以提高目标消息队列的负载能力,并且便于后期通过新增分区分担高负载分区的负载目的。
作为一种可选的实时方式,如前述的方法,所述步骤S102根据每个候选分区的负载以及目标负载阀值,判断候选分区中是否存在高负载分区包括:
在候选分区的负载指示候选分区的数据负载大于或等于目标数据负载阀值,或候选分区的计算资源负载大于或等于目标计算资源负载阀值的情况下,将候选分区确定为高负载分区。
数据负载可以是用于指示对应的候选分区待处理消息的数据量;例如,当存在3个候选分区,则存在与每个候选分区对应的数据负载,进而可以基于数据负载得到每个候选分区待处理消息的数据量;数据负载可以通过每秒写入的消息的数量进行表征,例如,1000qps(queries-per-second,每秒请求数)。
在确定每个候选分区的数据负载之后,可以通过预先设定的目标数据负载阀值确定出所有候选分区中是否存在高负载分区。
目标数据负载阀值可以是预先设定的,用于判断数据负载是否属于高负载的阀值。例如,当目标数据负载阀值为b时,则候选分区中存在一个候选分区的数据负载为b’,且b’≥b时,即判定该候选分区为高负载分区,当目标消息队列中不存在任一个候选分区的负载大于或等于a时,即判定该目标消息队列中不存在高负载分区,因此无需进行分区扩容。此外,数据负载可以包括多个维度的负载,因此目标数据负载阈值也可以包括与每个维度对应的子目标数据负载阈值;并且可以在数据负载的其中一个维度的子负载大于或等于该维度对应的子目标数据负载阈值的情况下,即将该数据负载对应的候选分区判定为高负载分区。
计算资源负载可以包括对不同的运算单元或存储单元的使用率情况,当计算资源负载是针对运算单元的使用率时,则可以是运算单元被占用的运算资源占该运算单元的所有运算资源的比例,当计算资源负载是针对存储单元的使用率时,则可以是存储单元中已用于存储数据的存储资源占该存储单元的所有存储资源的比例。例如,计算资源负载可以是对应的候选分区所在的节点的CPU负载、内存负载以及磁盘存储负载等使用情况进行表征。
目标计算资源负载阀值可以是预先设定的,用于判断计算资源负载是否属于高负载的阀值。当目标计算资源负载阀值中包括多个类型的子目标计算资源负载阀值(例如,CPU使用率阀值、内存使用率阀值以及磁盘存储使用率阀值)时,则可以获取候选分区的计算资源负载也可以包括当前CPU使用率、当前磁盘使用率以及当前内存使用率;并且,当满足当前CPU使用率大于或等于CPU使用率阀值,当前磁盘使用率大于或等于内存使用率阀值,当前内存使用率大于或等于磁盘存储使用率阀值中的一个条件时,即判定候选分区为高负载分区。例如,当目标消息队列中一共有三个分区,即,候选分区1、候选分区2以及候选分区3,分别在三个不同的节点中,CPU使用率阀值为70%,磁盘使用率阈值为90%,内存使用率阀值为70%。候选分区1当前CPU使用率、当前磁盘使用率以及当前内存使用率为(20%,30%,35%),候选分区2当前CPU使用率、当前磁盘使用率以及当前内存使用率为(30%,95%,35%),候选分区3当前CPU使用率、当前磁盘使用率以及当前内存使用率为(80%,40%,85%),候选分区1的当前CPU使用率、当前磁盘使用率以及当前内存使用率均小于对应的阀值,因此候选分区1为低负载分区;候选分区2的当前磁盘使用率大于磁盘使用率阈值,因此虽然候选分区2的当前CPU使用率小于CPU使用率阀值,当前内存使用率小于内存使用率阀值,候选分区2仍然为高负载分区;候选分区3的当前CPU使用率大于CPU使用率阀值,且当前内存使用率大于内存使用率阀值,因此虽然当前磁盘使用率小于磁盘使用率阈值,候选分区3仍然为高负载分区。
如图2所示,作为一种可选的实施方式,如前述的方法,在所述步骤S103在确定存在至少一个高负载分区的情况下,生成用于对目标消息队列进行分区扩容的目标指令之前,方法还包括如下所述步骤:
步骤S301,在除高负载分区之外的所有候选分区中,确定出目标低负载分区。
在所有候选分区中确定出高负载分区之后,即可在除高负载分区之外的所有候选分区中,确定出目标低负载分区。
目标低负载分区可以是用于确定新增分区所在节点的目标消息队列中的候选分区。
在确定出目标低负载分区之后,由于目标低负载分区的负载与该目标低负载分区所在的节点的负载一致,因此后期可以在目标低负载分区所在的节点中进行分区的新增。
步骤S302,确定目标低负载分区的目标分区标识。
在确定目标低负载分区之后,由于每个候选分区都位于一个对应的节点中,同时,每个候选分区都相当于每个节点中的一个文件夹,进而可以确定出每个目标低负载分区的目标分区标识。
目标分区标识可以是与目标低负载分区唯一对应的标识信息,可以是目标低负载分区的位置信息或者编码信息等等。并且,每个候选分区都具有唯一对应的分区标识。
通过本实施例中的方法,可以在所有候选分区中,确定出较低负载的目标低负载分区,以及目标低负载分区的目标分区标识,由于目标低负载分区的负载与该目标低负载分区所在的节点的负载一致,因此后期可以在目标低负载分区所在的节点中增加新的分区,以避免在负载较高的节点中增加新的分区,导致进一步增加负载较高的节点的负载的问题。
作为一种可选的实施方式,如前述的方法,所述步骤S104按照目标指令,在目标消息队列中增加至少一个新增分区包括如下所述步骤:
步骤S401,按照目标分区标识,将目标指令发送至目标低负载分区。
在确定目标分区标识之后,即可在所有候选分区中确定用于接收该目标指令的低负载分区,进而可以按照目标分区标识,准确的将目标指令发送至目标低负载分区。
步骤S402,按照目标指令,在目标低负载分区所在的目标节点中增加至少一个新增分区。
在目标低负载分区接收到该目标指令之后,即可通过其中用于进行分区扩容的组件按照该目标指令,在目标低负载分区所在的目标节点中增加至少一个新增分区。
目标节点可以是节点集群中,目标低负载分区所在的节点,并且,由于目标低负载分区为负载较低的候选分区,因此,目标节点也是在节点集群中负载相对较低的节点。
新增分区可以是在目标节点中按照目标指令新生成的分区。
进一步的,新增分区的个数还可以根据目标消息队列的整体负载情况进行确定:先确定目标消息队列中高负载分区的个数;按照预设的分区新增方案,根据高负载分区的个数确定出新增分区的个数,其中,分区新增方案用于指示不同的高负载分区的个数所需增加的新增分区的个数之间的对应关系。
例如,topic(即,目标消息队列)的partition分区(即,候选分区)会分布在不同的broker(即,节点)中,其中,可以将不同的partition分区分为两个角色,一个角色是leader(主分区,只设置一个),一个角色是follower(从分区,将leader之外的partition分区均设置为follower)。leader和follower之间可以通过tcp的心跳保持心跳链接,通过心跳可以同步各个partition分区的基本信息(包括负载以及分区标识等等)。
并且,负载的获取,可以通过在topic这一层新增的一个分区管理器(manager)进行采集,由这个分区管理器来采集一些当前各个partition分区的负载,比如分区所在的broker的cpu、内存的资源使用情况、分区的数据写入流量大小等等。follower将负载通过心跳的方式上报到leader中,leader接收到各个follower心跳之后根据预先设置的目标负载阀值(用户可以自主在配置文件中配置扩容的条件进行设定),判断topic中是否存在高负载分区,以在存在高负载分区的情况下,判断在哪个目标partition分区(即,目标低负载分区)所在的目标broker(即,目标节点)中进行分区扩容。
通过本实施例中的方法,可以快速实现在目标低负载分区所在的目标节点中进行分区扩容,并得到至少一个新的新增分区。
作为一种可选的实施方式,如前述的方法,所述步骤S301在除高负载分区之外的所有候选分区中,确定出目标低负载分区包括如下所述步骤:
步骤S501,将除高负载分区之外的所有候选分区确定为低负载分区;
步骤S502,确定每个低负载分区的负载;
步骤S503,在所有低负载分区中,确定出负载最低的目标低负载分区。
在确定出所有候选分区中的高负载分区之后,可以确定出除高负载分区之外的其他候选分区,并将除高负载分区之外的其他候选分区记为低负载分区。由于高负载分区是负载大于或等于目标负载阀值的候选分区,因此低负载分区的负载均小于目标负载阈值,因此,低负载分区所在的节点可以用于分配更多的负载。
在确定出每个低负载分区之后,可以按照前述实施例中的方法确定出每个低负载分区的负载。
在确定出每个低负载分区的负载之后,可以通过比对各个负载的大小,在所有低负载分区中,确定出负载最低的目标低负载分区。
例如,在确定出存在低负载分区D1以及低负载分区D2的情况下,可以获取低负载分区D1的负载F1以及低负载分区D2的负载F2,当负载中只存在一个维度的数值时,可以直接比对F1和F2的大小判断出目标低负载分区;当负载中存在多个维度的子负载(例如,CPU负载、内存负载、磁盘存储负载等等)的情况下可以对各个维度的使用率对应的占比进行加权处理后得到加权值,再根据加权值对各个低负载分区进行判断,以确定出加权值最小的目标低负载分区。例如,在CPU负载、内存负载、磁盘存储负载的权重分别为0.3、0.4、0.3,低负载分区D1的CPU负载为50%、内存负载为40%、磁盘存储负载为40%,低负载分区D2的CPU负载为40%、内存负载为50%、磁盘存储负载为40%时,则低负载分区D1对应的加权值为(50%×0.3)+(40%×0.4)+(40%×0.3)=43%,低负载分区D2对应的加权值为(40%×0.3)+(50%×0.4)+(40%×0.3)=48%,因此,低负载分区D1对应的加权值小于低负载分区D2对应的加权值,将低负载分区D1作为目标低负载分区。
通过本实施例中的方法,可以快速选择出目标低负载分区,进而可以更快的进行分区扩容,有效提高分区扩容的效率,更快的降低目标消息队列中高负载分区的负载。
作为一种可选的实施方式,如前述的方法,所述步骤S101获取目标消息队列中每个候选分区的负载包括如下所述步骤:
步骤S601,获取目标集群中每个候选消息队列的负载信息,其中,每个负载信息包括对应的候选消息队列中每个分区的负载。
目标集群可以是由多个broker节点构成的运算集群,并且,每个broker节点中可以设有一个或多个候选消息队列的分区。
在确定每个候选消息队列之后,即可确定出候选消息队列的负载信息。
负载信息包括该负载信息对应的候选消息队列中每个分区的负载。即,当负载信息k对应于候选消息队列k’,因此,负载信息k中包括候选消息队列k’中每个分区的负载。
步骤S602,根据负载信息在所有候选消息队列中确定出目标消息队列,并确定目标消息队列每个候选分区的负载,其中,目标消息队列中存在至少一个候选分区的负载高于目标负载阀值。
在获取每个候选消息队列的负载信息之后,即可根据负载信息在所有候选消息队列中确定出目标消息队列,并且目标消息队列需要满足至少存在一个候选分区的负载高于目标负载阀值的要求。
进一步的,每个候选消息队列都可以对应有使用率阈值,目标使用率阈值为目标消息队列对应的使用率阈值,因此,可以将每个候选分区的资源使用率与目标负载阀值进行比对,并在至少存在一个候选分区对应的资源使用率高于目标负载阀值,即表征目标消息队列中存在至少一个高负载分区。进而可以判定该目标消息队列需要进行负载均衡,并获取目标消息队列中每个候选分区的负载。
通过本实施例中的方法,可以在存在多个候选消息队列的情况下,确定出需要进行负载均衡的目标消息队列。
如图3所示,作为一种可选的实施方式,如前述的方法,在所述步骤S104按照目标指令,在目标消息队列中增加至少一个新增分区之后,方法还包括如下所述步骤:
步骤S701,获取新增分区的分区信息。
在目标节点中新增分区之后,可以获取新增分区分分区信息。
分区信息可以包括但不限于:新增分区位置信息、实时负载等等。
步骤S702,根据分区信息对目标消息队列的历史元数据信息进行更新,得到更新后元数据信息。
在确定新增分区的分区信息之后,即可根据分区信息对目标消息队列的历史元数据信息进行更新,得到更新后元数据信息。
历史元数据信息中可以记录有在分区扩容前的目标消息队列和候选分区的分布情况(例如,各个候选分区对应的位置信息),以及各个候选分区的负载(包括,实时负载)。
更新后元数据信息中则可以记录有在分区扩容后的目标消息队列中各个当前分区(即,候选分区及新增分区)的分布情况,以及各个当前分区的负载。
步骤S703,按照更新后元数据信息将待写入数据写入至新增分区中。
在得到更新元数据信息之后,便可以将待写入数据写入到新扩容的新增分区中。
待写入数据可以是在对目标消息队列进行分区扩容之后,所收到需要写入目标消息队列的所有数据中用于写入新增分区中的数据。
并且,在得到更新后元数据信息之后,可以得到用于对所有数据进行分流的分流方案,该分流方案中可以指示分配给高负载分区的数据流量低于分区扩容前的数据流量,并将部分数据流量分配给新增分区;然后按照该分流方案对所有数据进行分流,以将其中的待写入数据写入新增分区中,进而降低高负载分区的负载。
能过本实施例中的方法,可以通过对历史元数据信息进行更新,得到更新后元数据信息,以达到快速对新增分区进行启用,并用于写入待写入数据,进而可以更快的实现对高负载分区的负载进行分流的目的。
如图4所示,根据本申请另一方面的一个实施例,还提供了一种用于消息队列的自动扩容装置,包括:
获取模块1,用于获取目标消息队列中每个候选分区的负载;
判断模块2,用于根据每个候选分区的负载以及目标负载阀值,判断候选分区中是否存在高负载分区,其中,高负载分区的负载高于目标负载阀值;
生成模块3,用于在确定存在至少一个高负载分区的情况下,生成用于对目标消息队列进行分区扩容的目标指令;
新增模块4,用于按照目标指令,在目标消息队列中增加至少一个新增分区。
如图5所示的消息队列架构中,topic(即,目标消息队列)的partition分区(即,候选分区)会分布在不同的broker(即,节点)中,其中,可以将不同的partition分区分为两个角色,一个角色是leader(主分区,只设置一个),一个角色是follower(从分区,将leader之外的partition分区均设置为follower)。leader和follower之间可以通过tcp的心跳保持心跳链接,通过心跳可以同步各个partition分区的基本信息(包括负载以及分区标识等等),每个partition分区中可以设置有上述的新增模块4。
该自动扩容装置,可以包括设于可以通过在topic中分区管理器(manager,设有上述的获取模块1、判断模块2以及生成模块3),分区管理器来采集一些当前各个partition分区(即,候选分区)的负载,比如分区所在的broker的cpu、内存的资源使用情况、分区的数据写入流量大小等等。follower将负载通过心跳的方式上报到leader中,leader接收到各个follower心跳之后根据预先设置的目标负载阀值(用户可以自主在配置文件中配置扩容的条件进行设定),判断topic中是否存在高负载分区,以在存在高负载分区的情况下,判断在哪个目标partition分区(即,目标低负载分区)所在的目标broker(即,目标节点)中进行分区扩容。
如果有某一个partition分区负载达到了目标负载阀值,则该partition分区为高负载分区,并且该topic需要进行分区扩容了,那么leader也会通过心跳的方式将扩容的目标指令发送给某一个负载比较低的follower中,follower中的新增模块4接收到该目标指令之后可以会在自动创建一个partition。同时将该新生成的新增partition分区(即,新增分区)的基本信息进行上报到leader中。
当原消息队列中的partition分区数量为3个,新增partition分区为1个时,在消息队列中的partition分区数量就由原来的3个自动扩容为4个,同时对于topic和partition分区的元数据信息也会更新。以便于对于数据可以正常的被写入到新扩容的partition中。
根据本申请的另一个实施例,还提供一种电子设备,包括:如图6所示,电子设备可以包括:处理器1501、通信接口1502、存储器1503和通信总线1504,其中,处理器1501,通信接口1502,存储器1503通过通信总线1504完成相互间的通信。
存储器1503,用于存放计算机程序;
处理器1501,用于执行存储器1503上所存放的程序时,实现上述方法实施例的步骤。
上述电子设备提到的总线可以是外设部件互连标准(Peripheral ComponentInterconnect,PCI)总线或扩展工业标准结构(Extended Industry StandardArchitecture,EISA)总线等。该总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
通信接口用于上述电子设备与其他设备之间的通信。
存储器可以包括随机存取存储器(Random Access Memory,RAM),也可以包括非易失性存储器(Non-Volatile Memory,NVM),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。
上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(Network Processor,NP)等;还可以是数字信号处理器(Digital SignalProcessor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
本申请实施例还提供一种计算机可读存储介质,存储介质包括存储的程序,其中,程序运行时执行上述方法实施例的方法步骤。
需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述仅是本发明的具体实施方式,使本领域技术人员能够理解或实现本发明。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所申请的原理和新颖特点相一致的最宽的范围。
Claims (10)
1.一种用于消息队列的自动扩容方法,其特征在于,包括:
获取目标消息队列中每个候选分区的负载;
根据每个所述候选分区的负载以及目标负载阀值,判断所述候选分区中是否存在高负载分区,其中,所述高负载分区的负载高于所述目标负载阀值;
在确定存在至少一个所述高负载分区的情况下,生成用于对所述目标消息队列进行分区扩容的目标指令;
按照所述目标指令,在所述目标消息队列中增加至少一个新增分区。
2.根据权利要求1所述的方法,其特征在于,所述根据每个所述候选分区的负载以及目标负载阀值,判断所述候选分区中是否存在高负载分区包括:
在所述候选分区的负载指示所述候选分区的数据负载大于或等于目标数据负载阀值,或所述候选分区的计算资源负载大于或等于目标计算资源负载阀值的情况下,将所述候选分区确定为所述高负载分区。
3.根据权利要求1所述的方法,其特征在于,在所述在确定存在至少一个所述高负载分区的情况下,生成用于对所述目标消息队列进行分区扩容的目标指令之前,所述方法还包括:
在除所述高负载分区之外的所有所述候选分区中,确定出目标低负载分区;
确定所述目标低负载分区的目标分区标识。
4.根据权利要求3所述的方法,其特征在于,所述按照所述目标指令,在所述目标消息队列中增加至少一个新增分区包括:
按照所述目标分区标识,将所述目标指令发送至所述目标低负载分区;
在所述目标低负载分区执行所述目标指令之后,在所述目标低负载分区所在的目标节点中增加至少一个所述新增分区。
5.根据权利要求3所述的方法,其特征在于,所述在除所述高负载分区之外的所有所述候选分区中,确定出目标低负载分区包括:
将除所述高负载分区之外的所有所述候选分区确定为低负载分区;
确定每个所述低负载分区的负载;
在所有所述低负载分区中,确定出所述负载最低的所述目标低负载分区。
6.根据权利要求1所述的方法,其特征在于,所述获取目标消息队列中每个候选分区的负载包括:
获取目标集群中每个候选消息队列的负载信息,其中,每个所述负载信息包括对应的所述候选消息队列中每个分区的负载;
根据所述负载信息在所有所述候选消息队列中确定出所述目标消息队列,并确定所述目标消息队列每个所述候选分区的负载,其中,所述目标消息队列中存在至少一个所述候选分区的负载高于目标负载阀值。
7.根据权利要求1所述的方法,其特征在于,在所述按照所述目标指令,在所述目标消息队列中增加至少一个新增分区之后,所述方法还包括:
获取所述新增分区的分区信息;
根据所述分区信息对所述目标消息队列的历史元数据信息进行更新,得到更新后元数据信息;
按照所述更新后元数据信息将待写入数据写入至所述新增分区中。
8.一种用于消息队列的自动扩容装置,其特征在于,包括:
获取模块,用于获取目标消息队列中每个候选分区的负载;
判断模块,用于根据每个所述候选分区的负载以及目标负载阀值,判断所述候选分区中是否存在高负载分区,其中,所述高负载分区的负载高于所述目标负载阀值;
生成模块,用于在确定存在至少一个所述高负载分区的情况下,生成用于对所述目标消息队列进行分区扩容的目标指令;
新增模块,用于按照所述目标指令,在所述目标消息队列中增加至少一个新增分区。
9.一种电子设备,其特征在于,包括:处理器、通信接口、存储器和通信总线,其中,所述处理器、通信接口和存储器通过通信总线完成相互间的通信;
所述存储器,用于存放计算机程序;
所述处理器,用于执行所述计算机程序时,实现权利要求1至7任一项所述的方法。
10.一种计算机可读存储介质,其特征在于,所述存储介质包括存储的程序,其中,所述程序运行时执行上述权利要求1至7中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110859802.8A CN113609071A (zh) | 2021-07-28 | 2021-07-28 | 一种用于消息队列的自动扩容方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110859802.8A CN113609071A (zh) | 2021-07-28 | 2021-07-28 | 一种用于消息队列的自动扩容方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113609071A true CN113609071A (zh) | 2021-11-05 |
Family
ID=78305844
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110859802.8A Pending CN113609071A (zh) | 2021-07-28 | 2021-07-28 | 一种用于消息队列的自动扩容方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113609071A (zh) |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020129085A1 (en) * | 2001-03-08 | 2002-09-12 | International Business Machines Corporation | Inter-partition message passing method, system and program product for managing workload in a partitioned processing environment |
US20150381453A1 (en) * | 2014-06-30 | 2015-12-31 | Microsoft Corporation | Integrated global resource allocation and load balancing |
CN108920613A (zh) * | 2018-06-28 | 2018-11-30 | 郑州云海信息技术有限公司 | 一种元数据管理方法、系统及设备和存储介质 |
CN109995839A (zh) * | 2018-01-02 | 2019-07-09 | 中国移动通信有限公司研究院 | 一种负载均衡方法、系统及负载均衡器 |
CN110321226A (zh) * | 2019-07-09 | 2019-10-11 | 西安点告网络科技有限公司 | 主机的自动扩缩容方法、装置、主机及存储介质 |
CN110489225A (zh) * | 2018-05-15 | 2019-11-22 | 中国移动通信集团浙江有限公司 | 一种基于消息队列的服务扩容方法、装置及设备 |
CN110633151A (zh) * | 2019-09-20 | 2019-12-31 | 北京小米移动软件有限公司 | 分布式发布消息集群分区平衡的方法、装置及存储介质 |
CN111767147A (zh) * | 2020-06-24 | 2020-10-13 | 北京工业大学 | 云计算中一种针对分布式消息系统的负载均衡方法 |
US20210168204A1 (en) * | 2019-12-02 | 2021-06-03 | Microsoft Technology Licensing, Llc | Processing and ordering messages in partitions |
-
2021
- 2021-07-28 CN CN202110859802.8A patent/CN113609071A/zh active Pending
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020129085A1 (en) * | 2001-03-08 | 2002-09-12 | International Business Machines Corporation | Inter-partition message passing method, system and program product for managing workload in a partitioned processing environment |
US20150381453A1 (en) * | 2014-06-30 | 2015-12-31 | Microsoft Corporation | Integrated global resource allocation and load balancing |
CN109995839A (zh) * | 2018-01-02 | 2019-07-09 | 中国移动通信有限公司研究院 | 一种负载均衡方法、系统及负载均衡器 |
CN110489225A (zh) * | 2018-05-15 | 2019-11-22 | 中国移动通信集团浙江有限公司 | 一种基于消息队列的服务扩容方法、装置及设备 |
CN108920613A (zh) * | 2018-06-28 | 2018-11-30 | 郑州云海信息技术有限公司 | 一种元数据管理方法、系统及设备和存储介质 |
CN110321226A (zh) * | 2019-07-09 | 2019-10-11 | 西安点告网络科技有限公司 | 主机的自动扩缩容方法、装置、主机及存储介质 |
CN110633151A (zh) * | 2019-09-20 | 2019-12-31 | 北京小米移动软件有限公司 | 分布式发布消息集群分区平衡的方法、装置及存储介质 |
US20210168204A1 (en) * | 2019-12-02 | 2021-06-03 | Microsoft Technology Licensing, Llc | Processing and ordering messages in partitions |
CN111767147A (zh) * | 2020-06-24 | 2020-10-13 | 北京工业大学 | 云计算中一种针对分布式消息系统的负载均衡方法 |
Non-Patent Citations (1)
Title |
---|
鲍春健;吴俊敏;许胤龙;李黄海;王文韬;: "支持动态负载平衡的分层消息队列模型", 计算机工程与应用, no. 01, 1 January 2007 (2007-01-01), pages 155 - 158 * |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109218355B (zh) | 负载均衡引擎,客户端,分布式计算系统以及负载均衡方法 | |
CN115328663B (zh) | 基于PaaS平台进行资源调度的方法、装置、设备和存储介质 | |
CN109800204B (zh) | 数据分配方法及相关产品 | |
CN109802986B (zh) | 设备管理方法、系统、装置及服务器 | |
JP2012079242A (ja) | 複合イベント分散装置、複合イベント分散方法および複合イベント分散プログラム | |
WO2021254331A1 (zh) | 资源管理方法、系统、代理服务器及存储介质 | |
CN104639645A (zh) | 网络负载均衡方法、装置及集群服务系统 | |
CN105242983A (zh) | 一种数据存储方法以及一种数据存储管理服务器 | |
CN113010313A (zh) | 一种负载均衡方法、装置、电子设备及计算机存储介质 | |
CN111475108A (zh) | 一种分布式存储方法、计算机设备及计算机可读存储介质 | |
CN116708450A (zh) | 负载均衡方法、装置、电子设备及计算机可读存储介质 | |
EP3672203A1 (en) | Distribution method for distributed data computing, device, server and storage medium | |
CN111400045B (zh) | 一种负载均衡方法及装置 | |
CN113609071A (zh) | 一种用于消息队列的自动扩容方法及装置 | |
CN113835905B (zh) | 一种消息队列负载均衡方法、装置、电子设备及介质 | |
CN114090256A (zh) | 一种基于云计算的应用交付负载管理方法及其系统 | |
JP6259408B2 (ja) | 分散処理システム | |
CN113590319A (zh) | 一种消息队列的计算资源负载均衡方法及装置 | |
CN113608870A (zh) | 消息队列的负载均衡方法及装置、电子设备及存储介质 | |
CN113377866A (zh) | 一种虚拟化数据库代理服务的负载均衡方法及装置 | |
CN112541038A (zh) | 时序数据管理方法、系统、计算设备及存储介质 | |
CN113190347A (zh) | 一种边缘云系统及任务管理方法 | |
CN112491599B (zh) | 一种网络服务对象的部署方法及装置 | |
Jadhav et al. | Performance evaluation in distributed system using dynamic load balancing | |
CN113507441B (zh) | 安全资源扩充方法及安全防护管理平台、数据节点 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |