一种基于动态反馈的微服务负载均衡优化方法

文档序号:26590437发布日期:2021-09-10 20:44阅读:128来源:国知局
一种基于动态反馈的微服务负载均衡优化方法

1.本发明涉及一种基于动态反馈的一致性哈希微服务负载均衡优化方法,属于微服务架构领域。


背景技术:

2.随着互联网技术的高速发展,业务需求的日益复杂化,用微服务框架开发的各种系统在日常应用中越来越广泛。随着互联网用户的不断增长导致网站流量呈现爆炸式增长,web服务器过载、拥塞、响应延迟和服务器崩溃等问题接踵而至,对服务器性能带来了巨大的挑战。为了使用户达到最佳的体验,最常用的解决方案就是集群技术。当大量的服务请求在单位时间内到达时,单一的服务器已经无法满足高并发大规模的访问了,因此采用集群技术来提高服务器的并发性,而其中最为核心的问题就是如何对到来的大量的服务请求进行合理的任务调度即负载均衡的问题。
3.负载均衡策略主要分为两大类,静态负载均衡策略和动态负载均衡策略。静态负载均衡策略是采用预先确定好了的算法,当请求进入时,根据确定了的算法分配请求到相应的服务器,如轮询策略、随机策略、哈希一致性策略等都属于静态负载均衡策略。因为是预先确定好的算法,调度过程中缺少与服务器实时交互的过程,不考虑服务器当前状态的负载能力,所以容易产生负载不均衡的情况发生,导致出现服务器过载、拥塞、响应延迟和服务器崩溃等问题。而动态负载均衡策略则会实时的考虑服务器的负载状态,在合适的时机获取当前服务器的负载状态,如接收到请求时或者周期性的访问等时机,能够更为合理的考虑服务器的负载状态并分配任务,如最小连接数策略、加权最小连接数策略等都属于动态负载均衡算法。但是它们的动态指标仅有一个服务器当前的连接数,并不能充分反映当前服务器的负载情况和处理请求的能力。
4.因此,选择合理的动态负载指标,设计合适的动态负载均衡策略是研究负载均衡需要研究的最核心的问题。


技术实现要素:

5.发明目的:针对当前负载均衡策略中未考虑服务器实时负载信息或考虑负载信息不充分的情况,研究提出了一种基于动态反馈的一致性哈希微服务负载均衡优化方法,充分考虑节点处理能力和实时负载信息,实现更合理、更均衡的负载调度策略,提高服务器的负载均衡能力。
6.技术方案:本发明所述的一种基于动态反馈的一致性哈希微服务负载均衡优化方法,包括:
7.(1)对一致性哈希算法中虚拟节点进行分配;
8.(2)采用负载均衡算法计算负载量,将请求分配到负载量相对较小的节点;
9.(3)以各个节点负载量的平均值乘以平衡参数的方式获取的每个节点的负载界限,用于控制各个节点之间的负载均衡,通过修改连接数来实现的负载量的动态调整;
10.(4)节点的插入、删除;
11.进一步地,步骤(1)的具体方法如下:
12.对于节点s
i
的性能c(s
i
),综合考虑其cpu数量n
i
、cpu频率c(c
i
)、内存容量c(m
i
)、磁盘i/o速率c(d
i
)、网络吞吐量c(n
i
),计算节点性能的公式如下所示:
13.i=0,1,

,n

1,∑k=1
14.其中,k
x
表示各性能指标的权重,权重总和为1;
15.计算节点权重w
i
的公式如下所示:
[0016][0017]
其中,c(s
i
)表示第i个节点的处理性能。节点权重w
i
是通过当前节点性能c(s
i
)除以所有节点总性能的方式计算得来的。
[0018]
根据节点权重w
i
计算虚拟节点个数的公式如下:
[0019]
num

i
=integer.max_value
·
w
i
[0020]
m=getmaxcommondivisor(num
′0,num
′1,

,num

n
‑1)
[0021]
num
i
=num

i
/m
[0022]
其中,num

i
表示初始计算得到的第i个节点的虚拟节点个数,它是由2
31

1(即integer.max_value)乘以该节点权重w
i
得到的;m表示每个节点初始虚拟节点个数的最大公约数;getmaxcommondivisor()表示计算参数中所有元素的最大公约数的方法;num
i
表示实际应该设置的每个节点的虚拟节点个数;
[0023]
得到每个节点的虚拟节点个数,并且均匀的分布在哈希环上。
[0024]
进一步地,步骤(2)的具体方法如下:
[0025]
算法综合考虑最小响应时间和当前活跃数两个负载指标,计算各节点的负载量,把负载量作为负载均衡的衡量参数,具体方法如下:
[0026]
负载量的计算公式如下所示:
[0027]
ε
i
=t
i
×
n
i i=0,1,

,n
‑1[0028]
其中,ε
i
表示某节点的负载量;t
i
表示该节点收集到的节点响应时间;n
i
表示该节点的连接数。
[0029]
进一步地,步骤(3)的具体方法如下:
[0030]
以各个节点负载量的平均值乘以平衡参数的方式获取的每个节点的负载界限ε
h

[0031][0032]
其中,ε
h
表示负载界限;c表示设置的统一的平衡参数,n表示服务器节点总数;ε
k
表示第k个节点的负载量;
[0033]
分配请求:当请求进入系统,均衡调度器会根据请求的ip地址和请求名进行hash计算,得到具体的哈希值,并将哈希值同2
31

1相与,将其初步映射到步骤1中设计的哈希表
上,然后根据顺时针查询的原则,检索出顺时针方向上,距离最近的服务节点进行命中。命中的定义为,当前节点的负载量小于计算得到的负载界限,判断条件如下公式所示:
[0034]
ε
i
<ε
h
ꢀꢀ
i=0,1,

,n
‑1[0035]
其中,ε
i
表示当前判断是否命中的节点的负载量;ε
h
表示计算得到的负载界限;
[0036]
如果命中,则分配请求给该服务节点;如果未命中,也就是当前节点的负载量大于负载界限,则继续进行顺时针查询,直到找到第一个命中的节点为止;
[0037]
通过连接数来动态的调整每个节点的负载量,当某节点被分配了一个服务请求后,连接数就增加1,如果顺时针遍历完整个环都没有找到命中的节点,则释放该请求并进行重分配的操作,将该请求重新加入待分配的请求队列中;
[0038]
请求处理完毕:在请求处理完毕时,连接数减少1进行负载量的修正,同时重新计算该节点的负载量和负载界限。
[0039]
进一步地,步骤(4)的具体方法如下:
[0040]
当整体负载过高,需要进行扩容时,新增的物理节点被抽象为多个负责不同请求处理虚拟节点,以插入虚拟节点的方式选择分区进行插入,扩容后,高负载的节点将高于平均负载部分的请求释放,重新进行基于算法的分配;
[0041]
对于节点删除,一个物理节点被移除,其相应的虚拟节点也被移除,同时释放待处理的请求,这些请求被视作新进入系统的请求,重新进行节点的分配,从而确保数据的迁移。
[0042]
有益效果:
[0043]
与现有技术相比,本发明的有益效果是:本发明提供了一种充分考虑服务器处理能力和实时负载信息、动态调整节点负载量的负载均衡策略,实现了一种基于动态反馈的一致性哈希微服务负载均衡优化方法,降低了负载不均衡的风险,提高了系统的稳定性。
附图说明
[0044]
图1为一致性哈希算法。
[0045]
图2为带虚拟节点的一致性哈希算法。
[0046]
图3为负载均衡运行流程。
具体实施方式
[0047]
下面将对本发明作进一步描述。本发明包括以下步骤:
[0048]
步骤1,对一致性哈希算法中虚拟节点进行分配
[0049]
一致性哈希是一种运用于服务器集群的动态扩展技术,由于其良好的弹性横向扩展性而广为运用。传统的一致性哈希采用哈希函数来处理,其中integer.max_value表示最大的正整数,即2
31

1,将其和哈希函数得到的值进行与运算,保证最终的target值落在取值范围为[0,2
31

1]的哈希环上。
[0050]
target=gethashcode(request.ipv4)&integer.max_value
[0051]
其中,gethashcode()方法表示根据输入的参数计算哈希值;request.ipv4表示接收到的请求的ip地址;target表示计算得到的该请求在哈希环上对应的位置。这个哈希环通常由2
31
个点构成,其取值区间为0到2
31

1。当请求进入这个系统时,会根据ip地址、名称
等参数来进行哈希运算,将其映射到哈希环上,然后按照顺时针的方向找到最近的节点,作为其服务节点。
[0052]
一致性哈希可以解决系统的横向扩展问题,然而它本身没有相关的负载均衡措施,很容易导致节点间的数据倾斜。图1一致性哈希算法,图2带虚拟节点的一致性哈希算法。一般引入虚拟节点来避免单一依靠物理节点的哈希值而导致的环状结构上分配不均的问题。由于这些虚拟节点数量很多,均匀分布,因此不会造成“雪崩”现象。
[0053]
不同服务器的处理能力和负载都各不相同。由于所有的虚拟节点是平均分配在环形结构上,某个物理节点对应的虚拟节点越多,那么在环上的区域越多,可承担的负载越大。所以性能好的服务器可以拥有更多的虚拟节点。在虚拟节点的分配过程中,需要根据节点服务器的性能确定分配给每个物理节点的虚拟节点个数。
[0054]
对于节点s
i
的性能c(s
i
),本实施例主要从这几个方面考虑:cpu数量n
i
、cpu频率c(c
i
)、内存容量c(m
i
)、磁盘i/o速率c(d
i
)、网络吞吐量c(n
i
)。计算节点性能的公式如下所示:
[0055]
i=0,1,

,n

1,∑k=1
[0056]
其中,k
x
表示各性能指标的权重,权重总和为1。
[0057]
计算节点权重w
i
的公式如下所示:
[0058][0059]
其中,c(s
i
)表示第i个节点的处理性能。节点权重w
i
是通过当前节点性能c(s
i
)除以所有节点总性能的方式计算得来的。
[0060]
根据节点权重w
i
计算虚拟节点个数num
i

[0061]
num

i
=integer.max_value
·
w
i
[0062]
m=getmaxcommondivisor(num
′0,num
′1,

,num

n
‑1)
[0063]
num
i
=num

i
/m
[0064]
其中,num

i
表示初始计算得到的第i个节点的虚拟节点个数,它是由2
31

1(即integer.max_value)乘以该节点权重w
i
得到的;m表示每个节点初始虚拟节点个数的最大公约数;getmaxcommondivisor()表示计算参数中所有元素的最大公约数的方法;num
i
表示实际应该设置的每个节点的虚拟节点个数。
[0065]
得到每个节点的虚拟节点总数,并且相对均匀的分布在哈希环上,即实现了根据机器性能差异而实现的负载均衡。当某一个请求被分配到虚拟节点时,该虚拟节点的负载量其实就是对应物理节点的当前负载,从而可以根据负载均衡算法的步骤,去决定是否选择命中该节点。
[0066]
步骤2,负载均衡算法
[0067]
最小连接数法是根据每个节点当前的连接情况,动态地选取其中当前积压连接数最少的一个节点处理当前请求,尽可能地提高后端服务的利用效率,将请求合理地分流到每一台服务器。这种算法可以根据节点状态实时变化,但是提高了复杂度,每次连接断开需
要进行计数。
[0068]
最小响应时间法能够根据请求的响应时间,来动态调整每个节点的权重,将响应速度快的服务节点分配更多的请求,响应速度慢的服务节点分配更少的请求。这种算法是实时变化的,能较好地反映服务器的当前运行状态。但是在高并发的情况下,在下一次响应之前,会出现请求全部落在同一个节点上的情况,造成请求分布不均衡。
[0069]
本实施例对上述这两种算法进行了改进,综合考虑,请求应被分配到负载量的最小值对应的节点。负载量的计算公式如下所示:
[0070]
ε
i
=t
i
×
n
i
ꢀꢀ
i=0,1,

,n
‑1[0071]
其中,ε
i
表示第i个节点的负载量;t
i
表示该节点收集到的节点响应时间;n
i
表示该节点的连接数。节点被分配请求后,需要先对其活跃数加1,以免出现响应前大量并发同时被分配到同一节点的状况,响应时间在响应前仍集成最后一次的,待响应后再更新。这种算法可以相对的保证了各个节点之间的平衡。
[0072]
步骤3,任务调度和动态调整
[0073]
由于传统的一致性哈希算法没有能够根据实施的负载情况进行任务的合理分配,所以非常容易发生负载的倾斜,产生负载不均衡的情况,因此本实施例引入了负载界限的概念,用于控制各个节点之间的负载均衡。本实施例是以各个节点负载量的平均值乘以平衡参数的方式获取的每个节点的负载界限的。这里采用的是统一设置的平衡参数,也可以根据情况为每个节点设置不同的平衡参数,以达到更好的控制负载均衡的效果。计算负载界限的公式如下所示:
[0074][0075]
其中,ε
h
表示负载界限;c表示设置的统一的平衡参数,通常c>1的,这里本实施例设置c的值是1.1;n表示服务器节点总数;ε
k
表示第k个节点的负载量。
[0076]
分配请求:当请求进入系统,均衡调度器会根据请求的ip地址和请求名进行哈希计算,得到具体的哈希值,并将哈希值同2
31

1相与,将其初步映射到步骤1中设计的哈希表上。然后根据顺时针查询的原则,检索出顺时针方向上,距离最近的服务节点进行命中。命中的定义为,当前节点的负载量小于计算得到的负载界限,判断条件如下公式所示:
[0077]
ε
i
<ε
h
ꢀꢀ
i=0,1,

,n
‑1[0078]
其中,ε
i
表示当前判断是否命中的节点的负载量;ε
h
表示计算得到的负载界限。
[0079]
如果命中,则分配请求给该服务节点;如果未命中,也就是当前节点的负载量大于负载界限,则继续进行顺时针查询,直到找到第一个命中的节点为止。这里本实施例引入连接数来动态的调整每个节点的负载量,当某节点被分配了一个服务请求后,连接数就增加1,由于节点负载量是由响应时间和连接数的乘积计算得来的,所以当连接数增加后,相应的节点负载量也会增加,这样就能起到动态调整节点负载的作用了。如果顺时针遍历完整个环都没有找到命中的节点,则释放该请求并进行重分配的操作,将该请求重新加入待分配的请求队列中。
[0080]
请求处理完毕:当某个请求完成,最终相应到用户端后,处理该请求的节点的负载量会因为释放了资源而下降,因此还需要在请求处理完毕时,做相应的负载量的修正。这里
本实施例同样是通过修改连接数来实现的负载量的动态调整,当请求处理完成时,连接数减少1。
[0081]
不管是分配任务还是任务处理完成,都需要修改连接数,同时重新计算该节点的负载量和负载界限。计算节点负载量和负载界限的公式同前面步骤的计算公式。
[0082]
步骤4,节点的插入、删除
[0083]
在微服务架构中,本实施例还需要考虑节点的插入和删除对负载均衡系统产生的影响。当整体负载过高,需要进行扩容时,新增的物理节点应当抽象为多个负责不同请求处理虚拟节点,以类似插入虚拟节点的方式选择合适的分区进行插入。扩容后,高负载的节点可将高于平均负载部分的请求释放,重新进行基于算法的分配。对于节点删除,一个物理节点被移除,其相应的虚拟节点也被移除,同时释放待处理的请求。这些请求可被视作新进入系统的请求,重新进行节点的分配,从而确保数据的迁移。
[0084]
本发明所公开的技术手段不仅限于上述技术手段所公开的技术手段,还包括由以上技术特征等同替换所组成的技术方案。本发明的未尽事宜,属于本领域技术人员的公知常识。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1