一种基于消息的多实例负载均衡方法和系统与流程

文档序号:30518429发布日期:2022-06-25 04:06阅读:107来源:国知局
一种基于消息的多实例负载均衡方法和系统与流程

1.本发明涉及物联网通信技术领域,具体涉及一种基于消息的多实例负载均衡方法和系统。


背景技术:

2.现有的mqtt客户端分为单实例和多实例,其中单实例客户端之间的通信在大部分情景下能有良好的表现,不过在指令集物联网操作系统下,设备集成需要能够接入百万量级的设备,通常的单实例客户端已经无法满足这样的需求了,使用单实例的客户端在处理高并发请求情况下,出现了消息丢失、连接断开的情况,并且在单实例出现异常后,整个设备接入就无法正常工作了,系统稳定性差。为了进一步适应物联网操作系统的高并发请求,多实例系统逐步发展。
3.多实例系统通常由一个mqtt服务器与多个实例连接,实现消息的订阅与发布。现有技术中,存在待发布消息时,需选择一个目标实例作为发布实例发布消息,目前现有技术中通常是按照顺序选择一个空闲实例或者随机进行选择,未能根据消息的内容选择最适合发布当前消息的目标实例,未能达到资源使用最优。
4.在从多个实例中选择目标实例时,部分现有技术借助服务器负载均衡方法从实例的网络连接、cpu、磁盘驱动器等因素中考虑其负载处理能力,以实现负载均衡、避免过载。然而上述方式仅仅考虑了目标实例自身的能力,没有考虑目标实例处理特定类型消息的能力。
5.综上所述,传统的目标实例选择方式不能根据当前消息的实际情况进行适应性选择,导致资源优化效果不足,难以适应当前物联网系统高并发量下的数据处理速度需求,亟需一种改进的多实例负载均衡方法和系统。


技术实现要素:

6.本发明提供一种基于消息的多实例负载均衡方法,包括如下步骤:步骤s1:获取待发布的消息,确定消息的消息属性;步骤s2:根据多实例建立第一哈希环;步骤s3:根据消息属性给多实例中各实例打分,根据各实例的得分调整第一哈希环,获得第二哈希环;调整第一哈希环具体包括:根据各实例的得分确定候选实例,计算候选实例对应的虚拟实例的个数和位置,插入第一哈希环,各个候选实例对应的虚拟实例的个数不完全相同;步骤s4:根据待发布的消息的主题计算待发布的消息的哈希值,基于待发布的消息的哈希值从第二哈希环中选择目标实例;步骤s5:利用目标实例发布待发布的消息。
7.优选的,第一哈希环为仅包含多实例的哈希环,计算多实例中各个实例的哈希值,根据哈希值找到各个实例在哈希环上的位置插入实例,以建立第一哈希环。
8.优选的,构建哈希圆环,根据多实例中各个实例订阅的主题计算各个实例的哈希值,根据各个实例的哈希值将各个实例插入至哈希圆环中,获得第一哈希环。
9.优选的,消息属性包括消息类型和消息紧急程度,根据消息属性给各实例打分,具体包括:根据消息类型计算各实例的针对当前消息类型的处理得分;根据消息紧急程度计算各实例的负载能力得分;基于各实例的处理得分和负载能力得分计算各实例的得分。
10.优选的,处理得分用于表示当前实例发布同一消息类型的速度水平,取任一未打分的实例作为当前实例,基于当前实例历史消息发布速度和所有节点消息发布速度计算当前实例的得分,直至所有实例打分完毕。
11.优选的,基于历史一段时间内同一时刻发布同一消息类型的平均速度与所有实例前一时刻平均消息发布速度的比值与网速调整因子的乘积计算处理得分。
12.优选的,负载能力得分用于表示当前实例处理待发布消息的能力水平,取任一未打分的实例作为当前实例,基于当前实例的状态参数与发布待处理消息所需最低资源信息和待处理消息的消息紧急程度计算当前实例的能力得分,直至所有实例打分完毕。
13.优选的,能力得分为当前时刻当前实例cpu功耗、内存容量、历史一段时间内网络连接最小掉线时间分别与待处理消息所需最低cpu功耗、待处理消息所需最低内存容量、历史一段时间内所有实例网络连接平均掉线时间的比值之和。
14.优选的,根据各实例的得分计算实例得分区间;根据实例得分区间计算实例增设得分区间;根据实例增设得分区间筛选候选实例,候选实例为需增设虚拟实例的实例;根据候选实例计算虚拟实例的个数,计算各个虚拟实例的位置;在第一哈希环上插入各个虚拟实例,以获得第二哈希环。
15.本发明还提供一种基于消息的多实例负载均衡系统,系统包括多个实例终端,服务器,服务器中包括:获取模块,用于获取待发布的消息,确定消息的消息属性;构建模块,用于根据多实例建立第一哈希环;调整模块,用于根据消息属性给多实例中各实例打分,根据各实例的得分调整第一哈希环,获得第二哈希环;选择模块,用于根据待发布的消息主题计算待发布的消息的哈希值,基于待发布的消息的哈希值从第二哈希环中选择目标实例;发布模块:利用目标实例发布待发布的消息。
16.本发明提供的一种基于消息的多实例负载均衡方法和系统,相较于现有技术中顺序选择或随机选择的方式,一方面,本发明利用负载均衡思想从多个实例中选择目标实例进行消息发布,避免实例过载或闲置。另一方面,本发明能够根据待发布消息的类型、紧急程度选择更适合当前处理待发布消息的实例,优化了目标实例选择过程,选择过程中选择高分实例构建虚拟实例,使得第二哈希环上高分实例的数量多于低分实例,引导待发布消息选择更优的实例进行消息发布,实现了资源的优化。
17.进一步的,本发明提供的哈希环中首先通过待处理的任务对实例进行评价,与之相匹配的,为了使节点分布更加均匀,仅筛选得分较高的实例增设虚拟实例,从而在第二哈希环上,得分较高的实例节点多于得分较低的实例节点,增加了得分较高的实例节点被选中的概率,在保证节点分布均匀的同时引导待发布消息选择更适合处理该消息的实例,从
而提高待发布消息的处理速度。
附图说明
18.图1为实施例一提供的各实例在哈希环上的位置示意图;图2为实施例一提供的候选实例在哈希环上的位置示意图;图3为实施例一提供的插入虚拟节点后的哈希环示意图。
具体实施方式
19.下面结合附图对本技术实施例中的技术方案进行清楚、完整的描述,显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。本领域普通技术人员可知,随着技术的发展和新场景的出现,本技术实施例提供的技术方案对于类似的技术问题,同样适用。
20.本技术的说明书和权利要求书及上述附图中的术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,以便包含一系列单元的过程、方法、系统、产品或设备不必限于那些单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它单元。
21.实施例一本发明的第一实施方式涉及一种基于消息的多实例负载均衡方法,包括如下步骤:步骤s1:获取待发布的消息,确定消息的消息属性;本发明的基于消息的多实例负载均衡方法应用于基于mqtt架构的物联网系统中,一个实例代表一个客户端,mqtt架构的物联网系统包括多个客户端,即多实例和一个mqtt服务器。
22.物联网系统运行过程中,对于同一个进程,会产生多种类型的消息。消息属性包括消息类型和消息紧急程度,在同一个进程中,根据时间先后顺序获取当前时刻待发布的一个消息,确定消息的消息类型和消息紧急程度,消息类型至少包括日常通知类、数据采集类、指令下达类、异常提示类,消息紧急程度至少包括非常紧急、紧急和不紧急。
23.步骤s2:根据多实例建立第一哈希环;根据多实例建立第一哈希环,具体来说,以4个实例为例,系统包括4个实例a、b、c、d,分别计算4个实例在哈希圆环上的位置,将其插入至哈希圆环上,如图1所示。第一哈希环为仅包含多实例的哈希环,多实例可以为物联网系统中的所有实例,也可以为物联网系统中自当前时刻起第一时间段内空闲的实例,其中第一时间段t=m/v,m为待发布的消息的大小,v为历史前n天与当前时刻同一时刻的平均网络速度。计算多实例中各个实例的哈希值,根据哈希值找到各个实例在哈希环上的位置插入实例,以建立第一哈希环。
24.作为一种可选的实施例,根据多实例建立第一哈希环具体包括:构建哈希圆环,根据多实例中各个实例的实例名计算各个实例的哈希值,根据各个实例的哈希值将各个实例插入至哈希圆环中,获得第一哈希环。
25.作为另一种可选的实施例,各实例既可以作为发布者也可以作为订阅者,各实例作为订阅者,会事先注册其订阅的主题。根据多实例建立第一哈希环具体包括:构建哈希圆
环,根据多实例中各个实例订阅的主题计算各个实例的哈希值,根据各个实例的哈希值将各个实例插入至哈希圆环中,获得第一哈希环。本发明提供的实施例中,利用各个实例订阅的主题计算各个实例对应的哈希值,与在后选择目标实例的参考因素相匹配,相较于直接通过实例名字计算实例对应的哈希值,在后续利用消息主题选择实例时,二者均采用消息主题进行哈希值计算,从而在目标实例选择时优先选择订阅消息主题的实例进行消息发布,即目标实例获得待发布的消息之后,因自身也是该消息的订阅者,直接接收消息,无需再依赖网络进行消息发布,本发明提供的实施例能够减少消息的发布时间,降低了网络压力,提高了消息处理的速度。
26.步骤s3:根据消息属性给多实例中各实例打分,根据各实例的得分调整第一哈希环,获得第二哈希环;消息属性包括消息类型和消息紧急程度,根据消息属性给各实例打分,具体包括:根据消息类型计算各实例的针对当前消息类型的处理得分;根据消息紧急程度计算各实例的负载能力得分;基于各实例的处理得分和负载能力得分计算各实例的得分,其中处理得分用于表示当前实例发布同一消息类型的速度水平,取任一未打分的实例作为当前实例,基于当前实例历史消息发布速度和所有节点消息发布速度计算当前实例的得分,直至所有实例打分完毕。具体来说,基于历史一段时间内同一时刻发布同一消息类型的平均速度与所有实例前一时刻平均消息发布速度的比值与网速调整因子的乘积计算处理得分。
27.负载能力得分用于表示当前实例处理待发布消息的能力水平,取任一未打分的实例作为当前实例,基于当前实例的状态参数与发布待处理消息所需最低资源信息和待处理消息的消息紧急程度计算当前实例的能力得分,直至所有实例打分完毕。能力得分为当前时刻当前实例cpu功耗、内存容量、历史一段时间内网络连接最小掉线时间分别与待处理消息所需最低cpu功耗、待处理消息所需最低内存容量、历史一段时间内所有实例网络连接平均掉线时间的比值之和。
28.具体来说,i表示实例编号,0《i《n,n表示物联网系统中的实例总个数。第i个实例的得分pi=p
ci
+p
fi
,p
ci
表示第i个实例的处理得分,p
fi
表示第i个实例的负载能力得分,其中,k(t)表示当前时刻的网速调整因子,vi表示第i个实例第一历史时间段内同一时刻发布同一消息的平均速度,为所有实例时刻t-1下的平均消息发布速度,t表示当前时刻。作为一种可选的实施例,第一历史时间段为预设的,例如一个月,作为另一种可选的实施例,为了提高消息发布的速度,第一历史时间段为根据消息紧急程度预设的,对于非常紧急的消息第一历史时间段为一周,对于紧急的消息第一历史时间段为两周,对于不紧急的消息,第一历史时间段为一个月。相较于预设单一历史时间段,将需要统计的时间段信息与消息紧急程度相对应,从而在发布紧急消息时优先保证发布速度,降低统计的计算量,缩短计算时间,在发布非紧急的消息时优先保证实例打分的准确度,准确评估实例的状态,从而选择最优的实例实消息发布,兼顾了计算量和评估的准确度。
29.第i个实例的负载能力得,rm表示待处理消息的紧急干预因子,为根据消息紧急程度预设的参数,其中,非常紧急、紧急和不紧急状态下紧急干预因子大小逐步减小。cg(t)、cn(t)、td分别表示当前时刻t下当前实例cpu功耗、内存容量和第一历史时间段内网络连接最小掉线时间,c
gmin
、c
nmin
、分别为发布待处理消息所需的最低cpu功耗、最低内存容量和第一历史时间段内所有实例网络连接平均掉线时间。相较于当前实例工作状态的简单评估,本发明负载能力的得分计算时引入紧急干预因子,紧急程度越高,该紧急干预因子取值越大,此时所需的最低参数信息被放大预设倍数,对实例的要求越高,负载能力的得分计算方式根据待处理消息的实际情况进行适应性调整,优化了目标实例选择方式。
30.本发明提供的实例打分根据待处理消息的属性信息、实例当前的状态信息和实例历史工作状态信息进行综合评价,相较于现有技术中仅从被选择实例自身性能出发进行实例评估,本发明从待处理消息的实际情况出发,为实例打分,获得的实例得分更具有针对性,更加符合发布当前待处理消息的需求,从而能够根据实例的实际情况选择针对该待处理消息最优的目标实例,提高了消息发布速度。
31.逐个为多实例中各个实例进行打分,获得各个实例的得分。根据各实例的得分调整第一哈希环,获得第二哈希环。调整第一哈希环具体包括:根据各实例的得分确定候选实例,计算候选实例对应的虚拟实例的个数和位置,插入第一哈希环。具体来说,根据各实例的得分计算实例得分区间;根据实例得分区间计算实例增设得分区间;根据实例增设得分区间筛选候选实例,候选实例为需增设虚拟实例的实例;根据候选实例计算虚拟实例的个数,计算各个虚拟实例的位置;在第一哈希环上插入各个虚拟实例,以获得第二哈希环,各个候选实例对应的虚拟实例的个数不完全相同。
32.具体来说,根据各实例的得分计算实例得分区间,包括:根据各实例中最低得分和最高得分计算获得实例得分区间d1:[p
min
,p
max
],其中p
min
为n个实例中分数最低的实例的得分,p
max
为n个实例中分数最高的实例的得分。
[0033]
根据实例得分区间计算实例增设得分区间,包括:从实例得分区间d1中选择实例增设得分区间d2,作为一种可选的实施例,可以预设增设因子a(a》1),选择实例增设得分区间为d2:[a*p
min
,p
max
](a*p
min
《p
max
),本发明在实例打分环节已经根据待发布消息实际情况对实例进行评价,此时实例的得分已经代表其处理待发布消息的优先级,为了简化实例选择过程,直接通过预设增设因子选择得分最高,即最优的实例进行虚拟实例增设,基于在先环节的打分结果直接通过简单的区间筛选即可选择出最合适的实例,降低实例选择的计算量。
[0034]
根据实例增设得分区间筛选候选实例,包括:将得分在实例增设得分区间d2内的实例选为候选实例。根据候选实例计算虚拟实例的个数,具体为:候选实例的个数为m,m《n,第j个候选实例的虚拟实例个数n
vj
=[d
yj
/d
jun
],d
yj
表示第j个候选实例距离第一方向的相邻实例的圆弧距离,d
jun
为最佳实例间距,为一预设常数,优选的,第一方向可以为逆时针方向,也可以为顺时针方向。虚拟实例的个数nv为,j表示第j个候选实
例,n
vj
表示第j个候选实例的虚拟实例个数。
[0035]
以第一方向为逆时针方向为例,如图2所示,假设实例a、b为候选实例,a实例逆时针方向距离相邻实例圆弧距离为d
y1
,b实例逆时针方向距离相邻实例圆弧距离为d
y2
,则虚拟实例的个数nv=[d
y1
/d
jun
]+[d
y2
/d
jun
]。
[0036]
获得虚拟实例后,根据各个候选实例生成与之对应的虚拟实例的第一属性,根据虚拟实例的第一属性计算各个候选实例对应的虚拟实例的位置。第一属性可以为实例名,第一属性还可以为订阅的主题名。若第一属性为实例名,根据候选实例的实例名生成对应的虚拟实例的实例名,且各个虚拟实例的实例名各不相同,作为一种可选的实施例,在候选实例的实例名后依次加入数字编号,得到各个虚拟实例的实例名。例如,候选实例的实例名为idk,与之对应的虚拟实例的实例名分别为idk1、idk2、

。若第一属性为订阅的主题名,根据候选实例的订阅的主题名生成对应的虚拟实例的订阅的主题名,且各个虚拟实例的订阅的主题名各不相同,作为一种可选的实施例,在候选实例的订阅的主题名后依次加入数字编号,得到各个虚拟实例的订阅的主题名。例如,候选实例的订阅的主题名为“weather”,与之对应的虚拟实例的订阅的主题名分别为“weather1”、“weather2”、

。根据虚拟实例的第一属性计算虚拟实例的哈希值,作为虚拟实例在第一哈希环上的位置。根据各个虚拟实例的位置在第一哈希环上插入各个虚拟实例,以获得第二哈希环,如图3所示,插入各个虚拟实例后,获得第二哈希环上得分较高的实例分布更加均匀,被选中的概率更高。
[0037]
现有技术中的一致性哈希算法,为了使节点分布更均匀,通常是所有节点均增设相同数量的虚拟节点,使得节点分布更加均匀,而本发明提供的哈希环中首先通过待处理的任务对实例进行评价,与之相匹配的,为了使节点分布更加均匀,仅筛选得分较高的实例增设虚拟实例,从而在第二哈希环上,得分较高的实例节点多于得分较低的实例节点,增加了得分较高的实例节点被选中的概率,本发明提供的虚拟实例设置方式能够在保证节点分布均匀的同时引导待发布消息选择更适合处理该消息的实例,从而提高待发布消息的处理速度。
[0038]
此外,现有技术中虚拟节点的个数通常为用户根据经验设置的,不确定性较大,相较于此,本发明提供的虚拟节点个数获取方式根据每个实例的实际间距情况进行计算,候选实例的虚拟节点个数可以各不相同也可以存在部分相同,也可以完全相同,虚拟实例生成更为灵活,降低对人为经验的依赖,提高了虚拟实例新增方法的适用性。
[0039]
步骤s4:根据待发布的消息的主题计算待发布的消息的哈希值,基于待发布的消息的哈希值从第二哈希环中选择目标实例;计算待发布消息的主题的哈希值,根据待发布消息的主题的哈希值定位待发布消息,自定位点起延顺时针方向选择,选择第一个邻近实例为目标实例。
[0040]
若第一个邻近实例为虚拟实例,选择虚拟实例对应的候选实例为目标实例。
[0041]
步骤s5:利用目标实例发布待发布的消息。
[0042]
利用目标实例发布消息。判断消息队列中是否还存在待发布消息,若存在,取下一个待发布消息,返回步骤s1。
[0043]
本发明提供的基于消息的多实例负载均衡方法,相较于现有技术中顺序选择或随机选择的方式,一方面,本发明利用负载均衡思想从多个实例中选择目标实例进行消息发布,避免实例过载或闲置。另一方面,本发明能够根据待发布消息的类型、紧急程度选择更
适合当前处理待发布消息的实例,优化了目标实例选择过程,选择过程中选择高分实例构建虚拟实例,使得第二哈希环上高分实例的数量多于低分实例,引导待发布消息选择更优的实例进行消息发布,实现了资源的优化。
[0044]
作为一种可选的实施例,待发布消息包括多个,获取待发布消息包括获取当前时刻待发布消息队列,根据待发布消息队列中各待发布消息的请求时间将待发布消息分类至处理数组和等待数组,根据消息紧急程度从处理数组中选择待发布消息,可选的,优先选择消息紧急程度最高的待发布消息进行处理。
[0045]
作为另一种可选的实施例,待发布消息包括多个,获取待发布消息包括获取当前时刻待发布消息队列,根据待发布消息队列中各待发布消息的消息类型将待发布消息分类至处理数组和等待数组,根据消息紧急程度从处理数组中选择待发布消息,可选的,优先选择消息紧急程度最高的待发布消息进行处理。在该实施例中消息类型相同的待发布消息一起处理,则对于消息类型、消息紧急程度相同的待发布消息,无需重新构建第二哈希环,在保证实例选择效果的同时降低计算量,提供消息发布处理速度。
[0046]
利用目标实例发布待发布的消息后,还包括调整目标实例在第二哈希环上虚拟实例的个数和位置,处理下一个同消息类型、同紧急程度的待发布消息。
[0047]
利用目标实例发布待发布的消息后,还包括判断是否存在新增实例,若存在,根据消息属性为新增实例打分,若新增实例得分小于等于候选实例的最低得分,将新增实例插入至第二哈希环中;若新增实例得分大于候选实例的最低得分,从第二哈希环上删除最低得分的候选实例对应的虚拟实例,重新计算新增实例的虚拟实例个数和位置,插入至第二哈希环上,处理下一个同消息类型、同紧急程度的待发布消息。
[0048]
本发明提供的第二哈希环是动态变动的,不断根据实例的实际情况调整目标实例选择的引导方向,优化了实例选择的效果,进而提高消息发布速度。
[0049]
作为一种可选的实施例,消息发布包括第一、第二和第三传输模式,其中,第一传输模式为数据的传输发生最多一次,第二传输模式为数据的传输最小发生一次,第三传输模式为数据的传输仅一次。根据等待数组内待发布消息的数量和当前待发布消息的消息类型选择传输模式。若等待数组内待发布消息的数量大于等于第一等待阈值,日常通知类、数据采集类、指令下达类选择第一传输模式,异常提示类选择第三传输模式;若等待数组内待发布消息的数量小于第一等待阈值,日常通知类选择第一传输模式,数据采集类、指令下达类选择第二传输模式、异常提示类选择第三传输模式。本发明为不同的消息类型和待发布消息数量级配备不同的传输模式,进一步提高了消息发布的速度。
[0050]
上面各种方法的步骤划分,只是为了描述清楚,实现时可以合并为一个步骤或者对某些步骤进行拆分,分解为多个步骤,只要包括相同的逻辑关系,都在本专利的保护范围内;对算法中或者流程中添加无关紧要的修改或者引入无关紧要的设计,但不改变其算法和流程的核心设计都在该专利的保护范围内。
[0051]
实施例二本发明的第二实施方式涉及一种基于消息的多实例负载均衡系统,系统包括多个实例终端,服务器,服务器中包括:获取模块,用于获取待发布的消息,确定消息的消息属性;构建模块,用于根据多实例建立第一哈希环;
调整模块,用于根据消息属性给多实例中各实例打分,根据各实例的得分调整第一哈希环,获得第二哈希环;选择模块,用于根据待发布的消息主题计算待发布的消息的哈希值,基于待发布的消息的哈希值从第二哈希环中选择目标实例;发布模块:利用目标实例发布待发布的消息。
[0052]
值得一提的是,本实施方式中所涉及到的各模块均为逻辑模块,在实际应用中,一个逻辑单元可以是一个物理单元,也可以是一个物理单元的一部分,还可以以多个物理单元的组合实现。此外,为了突出本发明的创新部分,本实施方式中并没有将与解决本发明所提出的技术问题关系不太密切的单元引入,但这并不表明本实施方式中不存在其它的单元。
[0053]
本领域的普通技术人员可以理解,上述各实施方式是实现本发明的具体实施例,而在实际应用中,可以在形式上和细节上对其作各种改变,而不偏离本发明的精神和范围。
[0054]
上述实例仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉此技术领域的技术人员均可在不违背本发明的精神及范畴下,对上述实施例进行修饰或改变。因此,举凡所属技术领域中具有通常知识者在未脱离本发明所揭示的精神与技术思想下所完成的一切等效修饰或改变,仍应由本发明的权利要求所涵盖。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1