并发度调节方法、装置、计算机设备和存储介质与流程

文档序号:17125395发布日期:2019-03-16 00:21阅读:181来源:国知局
并发度调节方法、装置、计算机设备和存储介质与流程

本发明涉及通信技术领域,特别是涉及一种并发度调节方法、装置、计算机设备和存储介质。



背景技术:

云存储是云计算范畴的一个领域,是以分布式的技术架构,提供海量的数据存储服务以及高速读写访问的能力。云存储是一种服务,是由许许多多存储设备和服务器所构成的集合体。对使用者来说,使用云存储不是使用某一个具体的物理存储设备,而是使用整个云存储系统带来的一种数据访问服务。

云存储通常由大量的存储服务器和存储设备构成,通过软件来进行协作。按照功能进行模块划分,有存储模块、协作模块、客户端模块。此外,分布式块存储以块设备接口的形式提供对外服务。

qos(qualityofservice,服务质量)指一个网络能够利用各种基础技术,为指定的网络通信提供更好的服务能力,是网络的一种安全机制,是用来解决网络延迟和阻塞等问题的一种技术。qos通常指网络上的数据流控制,不仅可包含传统的网络数据流控制(即网络io控制),还可包括了本地磁盘的读写控制,比如iops等。

在分布式存储系统中,由于网络、存储节点磁盘、cpu等硬件,都是有其服务极限的,一旦超过极限,就会引起大量的请求阻塞,从而引起请求处理的抖动,过期,重发等现象,为了能够使存储服务系统能够对外提供一个良好服务质量,qos控制是必要的。

传统技术中,动态调整并发度通常是根据当前系统性能参数,根据公式计算出并发度,从而实现对系统的控制。这种直接计算并发度的方式会使得并发度调节方式不够平缓,从而使得系统所提供的服务质量有限。



技术实现要素:

基于此,有必要针对上述技术问题,提供一种能更平缓的动态调节并发度从而能提高系统服务质量的并发度调节方法、装置、计算机设备和存储介质。

一种并发度调节方法,包括:

按照预设时间间隔获取系统负载状态;

当所述系统负载状态为重负载状态时,按照预设幅度减小并发度;

当所述系统负载状态为轻负载状态时,按照预设幅度增大并发度。

一种并发度调节的装置,包括:

仲裁模块,用于按照预设时间间隔获取系统负载状态;

调节模块,用于当所述系统负载状态为重负载状态时,按照预设幅度减小并发度;

所述调节模块还用于当所述系统负载状态为轻负载状态时,按照预设幅度增大并发度。

一种计算机设备,包括存储器、处理器及存储在所述存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如上所述的并发度调节方法的步骤。

一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如上所述的并发度调节方法的步骤。

上述并发度调节方法、装置、计算机设备及可读存储介质,在按照预设时间间隔获取到系统负载状态后,根据系统的负载状态按照预设幅度调节并发度,当所述系统负载状态为重负载状态时,按照预设幅度减小并发度;当所述系统负载状态为轻负载状态时,按照预设幅度增大并发度,通过逐步按照预设幅度调节并发度的方式,并发度的调节会变得更加平缓,使得系统逐步恢复正常,从而能够提高系统的服务质量。

附图说明

图1为一个实施例中并发度调节的流程示意图;

图2为另一个实施例中并发度调节的流程示意图;

图3为一个实施例中判定系统负载状态的流程示意图;

图4为一个实施例中并发度调节装置的结构框图;

图5为图4中仲裁模块的结构框图;

图6为一个实施例中计算机设备的内部结构图。

具体实施方式

为使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步的详细说明。应当理解,此处所描述的具体实施方式仅仅用以解释本发明,并不限定本发明的保护范围。

如图1所示,在一个实施例中,提供了一种并发度调节方法,包括:

步骤102,按照预设时间间隔获取系统负载状态。

步骤104,当上述系统负载状态为重负载状态时,按照预设幅度减小并发度。

步骤106,当上述系统负载状态为轻负载状态时,按照预设幅度增大并发度。

上述预设时间间隔可以根据实际情况进行调节,获取到系统的负载状态后,根据当时的负载状态对并发度进行对应的调节,当系统负载状态为重负载状态时则需要减小并发度;当系统负载状态为轻负载状态时则需要增大并发度;当系统为合理状态时,则不需要调节并发度,且每次调节的幅度均为预设幅度,因此每次的调节都能保证系统不会有大幅度的变化。

在实际运行过程中,请求数以及系统负载状态是一直在不断变化的,如果期望一次性调节至预设的合理值,那么计算过程相对较复杂,计算的算法也较为繁琐。因此,本实施例中采用逐步对并发度进行固定调节预设幅度的方式,当系统负载状态处于非平衡状态时,就对并发度进行一个预设的固定幅度的调节。这种处理方式与一次性调节至预设合理值相对比,并发度的调节会变得更加平缓,使得系统逐步恢复到平衡状态。

在一个实施例中,并发度调节方法还包括:当按照预设幅度增大并发度时,判断增大后的并发度是否超出并发度预设范围,若是,则增大并发度至并发度预设范围中的最大值;当按照预设幅度减小并发度时,判断减小后的并发度是否超出并发度预设范围,若是,则减少并发度至并发度预设范围中的最小值。

设定一个并发度的预设范围,包括最大值及最小值,当调节了预设幅度超过设定的最大值或最小值时,则调节至最大值或最小值。通过设定边界值,能够避免在调节过程中无限制的增大并发度或者减少并发度,从而避免了导致系统更加不稳定的情况出现。

图2示出了一个实施例中的并发度调节方法,参见图2,该方法包括:

步骤202,按照预设时间间隔获取系统负载状态。

步骤204,当系统负载状态为重负载状态时,需要按照预设幅度减小并发度。

步骤206,判断减小后的并发度是否超出并发度预设范围,若是,则进入步骤208,否则进入步骤210。

步骤208,减小并发度至并发度预设范围中的最小值。

步骤210,减小预设幅度的并发度。

步骤212,当系统负载状态为轻负载状态时,需要按照预设幅度增大并发度。

步骤214,判断增大后的并发度是否超出并发度预设范围,若是,则进入步骤216,否则进入步骤218。

步骤216,增大并发度至并发度预设范围中的最大值。

步骤218,增大预设幅度的并发度。

本实施例中,设置了一个并发度的预设范围,避免调节后超出系统应该保持的合理值,因此设置一个并发度的最大值和最小值可更好的保证系统的稳定性。

在一个实施例中,如图3所示,判定系统负载状态,包括:

步骤302,周期性检测请求的时延。

步骤304,根据上述请求的时延判定系统负载状态。

周期性检测请求的时延,然后统计此周期内请求时延大于第一时间的请求数、请求时延小于第一时间的请求数、请求时延大于第二时间的请求数,,当前周期请求时延大于第一时间的请求数等于零,并且当前周期请求时延小于第一时间的请求数大于零时,判定系统的负载状态为轻负载状态;当前周期请求时延大于第二时间的请求数大于零时,则判定系统的负载状态为重负载状态。

时延现象在并行计算环境中是普遍存在的,请求的时延也是能较直观的反映系统当前状态的一个预判条件,当系统处于重负载状态时,队列里请求数积压较多,就会导致请求的时延加长,超过了预设时延;当系统处于轻负载状态时,队列里需处理的请求数较少,处理的速度较快,请求的时延相对降低。因此,根据请求的时延能有效直观的得到系统的当前负载状态,而周期性的检测系统状态也能够及时的发现系统问题以便处理。

在一个实施例中,根据请求的时延判定系统负载状态,包括:获取当前周期内时延小于第一时间的请求数与时延大于第一时间的请求数,当前周期内时延小于第一时间的请求数大于零,且当前周期内时延大于第一时间的请求数等于零时,判定系统负载状态为轻负载状态。

统计出当前周期内每个请求的请求时延,再统计出当前周期内时延小于第一时间的请求数、时延大于第一时间的请求数,如果当前周期内统计的时延小于第一时间的请求数大于上零,并且,当前周期内时延大于第一时间的请求数等于零,这时,判定系统为轻负载状态。比如,当前周期内时延小于第一时间的请求数为10,大于第一时间的请求数为0,这种情况下则判定为系统负载状态为轻负载状态。

如果当前周期内时延小于第一时间的请求数为10,大于第一时间的请求数为5,由于当前周期内时延大于第一时间的请求数不等于零,所以不会判定系统负载状态为轻负载状态。

具体的,在一个实施例中,可实时统计时延小于第一时间的请求数和时延大于第一时间的请求数,即每次收到请求时获取该请求的时延,如果是时延小于第一时间,则将时延小于第一时间的请求数加1,如果时延大于第一时间,则将时延大于第一时间的请求数加1。每隔预设时间间隔获取统计到的时延小于第一时间的请求数和时延大于第一时间的请求数。例如,对于时延小于第一时间的请求数,在上一个周期结束的时间点统计一次,在当前周期结束的时间点统计一次,两次统计的数值之差即为当前周期内时延小于第一时间的请求数,如果当前周期内时延小于第一时间的请求数大于零,则表明时延小于第一时间的请求数在增长。同理,如果时延大于第一时间的请求数等于零,则表明时延大于第一时间的请求数没有增加,判定系统处于轻负载状态。

在另一个实施例中,也可直接统计每个周期内时延小于第一时间的请求数和时延大于第一时间的请求数,直接判断每个周期内统计的时延小于第一时间段请求数是否大于零,每个周期内统计的时延大于第一时间的请求数是否等于零。

此处判断系统负载状态为轻负载状态时有两个条件,一个是时延大于第一时间的请求数是否等于零,另一个是时延小于第一时间的请求数是否大于零,当这两个条件都满足的情况下,才判定系统状态为轻负载状态。此处使用双重判断,更能保证判定的准确性,避免因为只统计了时延小于第一时间的请求数在增加,而忽略了实际上有时延大于第一时间的请求数也在增加,造成判定为需要增大并发度而导致加重系统的负载状态,使得原本较平衡的系统状态被错误的调节为重负载状态。

在一个实施例中,第一时间t1为服务端接收数据请求与服务端返回数据请求的时延、主副服务器之间数据同步的时延、在服务端一次io的时延以及副本节点一次io的时延的总和的两倍。

其中,服务端接收数据请求与服务端返回数据请求的时延为2*t_net,主副服务器之间数据同步的时延为2*t_net,在服务端一次io的时延为t_storage,在副本节点一次io的时延为t_storage,所以,第一时间t1的计算公式为:t1=2*(2*t_net+2*t_net+t_storage+t_storage)。

t1是判断系统处于轻负载状态的时间点,对于分布式存储系统来说,当系统处于轻负载状态时,一个io的时延,主要由网络传输最小时延和存储介质io最小时延决定,从终端传输到服务端有一个最小时延t_net,再从服务端返回给终端也有一个最小时延t_net,即2*t_net。在分布式存储系统中,主副服务器之间数据同步有两个时延,即2*t_net,此处的t_net是取其最小值。io在服务端主要落一次盘,即有一个存储时延t_storage,io在副本节点也要落盘一次,也有一个存储时延t_storage。因此一个io的最小时延t_min为:t_min=4*t_net+2*t_storage,然而在实际运行中,io会有一些排队等引起的时延,故适当放宽一个的t_min时间的限制,因此,第一时间t1的计算公式为:t1=2*t_min=2*(4*t_net+2*t_storage)。

此处计算出来的第一时间t1为其最小值,作为一个判断请求时延的临界点,如果一个请求的时延达到t1时,那么这个请求的时延跟正常状态下相比是偏低的,因此当请求的时延小于t1时,可以认为此请求处理较快,系统有偏向于轻负载状态的趋势。此处不需要考虑分布式系统内服务器的数量,因为服务器之间采用的并行处理方式,服务器的多少实际上对于存储时延的影响并不大。在t1的计算公式上,放宽了一个t_min时间的限制,可以避免在实际运行中,正常的时延会被认为请求响应过长,从而错误的判定系统状态。

在一个实施例中,根据请求的时延判定系统负载状态,包括:获取当前周期内时延大于第二时间的请求数,当上述当前周期内时延大于第二时间的请求数大于零时,判定系统负载状态为重负载状态。

统计出当前周期内每个请求的请求时延,再统计出当前周期内时延大于第二时间的请求数,如果当前周期内统计的时延大于第二时间的请求数大于零,说明大于第二时间的请求数在增加,这时,判定系统负载状态为重负载状态。

具体的,在一个实施例中,可实时统计时延大于第二时间的请求数,即每次收到一个请求时获取该请求的时延,如果该时延大于第二时间,则将时延大于第二时间的请求数加1。每个预设时间间隔(时间周期)获取统计到的时延大于第二时间的请求数。具体在上一周期结束的时间点获取一次计数,在当前周期结束的时间点获取一次计数,两次获取的计数进行相减即为当前周期内时延大于第二时间的请求数。如果当前周期内时延大于第二时间的请求数大于零,表明时延大于第二时间的请求在增长,可判定系统处于重负载状态。

在另一个实施例中,也可直接统计每个周期内时延大于第二时间的请求数,直接判断统计得到的当前周期内时延大于第二时间的请求数是否大于零。

判断系统为重负载状态与判断系统为轻负载状态有所不同,在判断系统为重负载状态时,只需要判断当前周期内统计的时延大于第二时间的请求数,是否大于零即可,第二时间是判断系统处于重负载状态的时间点,也是请求时延的最长时间点,如果请求时延接近第二时间,那么可以合理的推测系统趋向于重负载状态,如果本周期大于第二时间的请求数大于零,那么可以判定为系统为重负载状态,此时则需要减少并发度,使系统状态趋近于平衡状态。在一个实施例中,第二时间t2为请求最大等待响应时延与最大调节并发度范围所消耗时间的差值,上述最大调节并发度所消耗时间为最大调节并发度调节范围和上述预设时间间隔的乘积与上述预设幅度的商。

其中,请求最大等待响应时延为t_exp,最大调节并发度调节范围是并发度预设范围的最大值max与并发度预设范围的最小值min的差值;上述预设时间间隔,即周期性获取系统负载状态的预设时间,设为t;上述预设幅度为step。因此,第二时间t2的计算公式为:t2=t_exp-(max-min)*t/step。

当客户端发送请求的速率超过了系统的服务能力时,就会出现部分请求在队列中积压,等待处理,而客户端一般会设置一个最大等待响应时延t_exp,也称之为io的过期时间。如果超过了这个时延请求还未得到响应,客户端会自动重新发送请求,或者自动认为该请求失败,因此并发度的调节就必须要在t_exp内完成。在实际情况中,调节幅度最大的情况也就是最坏的情况是,并发度需要从最大值max,调节到最小值min,而这个调节所需的时间为(max-min)*t/step,由上述可知,并发度的调节必须要在请求的最大等待响应时延t_exp内完成,因此并发度的调节时间必须小于t_exp-t2,即(max-min)*t/step<t_exp-t2,所以,第二时间t2的最大值计算公式为:t2=t_exp-(max-min)*t/step。

t2是判断系统处于重负载状态的时间点,此处的t2是一个最大值,因此当请求的时延接近t2时,此请求的时延较长,有倾向于过期的趋势,可以合理的推测系统的负载状态趋向于重负载,所以,当前周期的请求时延大于t2的请求数大于零时,即时延大于t2的请求数在不断增加时,可以判定系统已经处于重负载状态,这个时候有必要对并发度进行减小的调节操作,避免系统负载过重导致崩溃,因此设定t2可以很好的检测当前周期内的请求时延是否正常,进而对系统的负载状态进行一个判断。

如图4所示,在一个实施例中,提供了一种并发度调节的装置,包括:

仲裁模块402,用于按照预设时间间隔获取系统负载状态。

调节模块404,用于当系统负载状态为重负载状态时,按照预设幅度增大并发度;

该调节模块404还用于当系统负载状态为轻负载状态时,按照预设幅度减小并发度。

在一个实施例中,上述调节模块404还用于判断当按照预设幅度增大并发度时,增大后的并发度是否超出并发度预设范围,若是,则增大并发度至并发度预设范围中的最大值;当按照预设幅度减小并发度时,判断减小后的并发度是否超出并发度预设范围,若是,则减少并发度至并发度预设范围中的最小值。

在一个实施例中,如图5所示,仲裁模块402还包括检测模块402a以及状态判定模块402b,检测模块402a用于周期性检测请求的时延,状态判定模块402b用于根据检测模块402a的检测结果判定系统负载状态。

在一个实施例中,上述检测模块402a还用于获取当前周期内时延小于第一时间的请求数,当上述当前周期内时延小于第一时间的请求数大于零,且当前周期内时延大于第一时间的请求数等于零时,状态判定模块402b根据此结果判定系统负载状态为轻负载状态。

在一个实施例中,第一时间t1为服务端接收数据请求与服务端返回数据请求的时延、主副服务器之间数据同步的时延、在服务端一次io的时延以及副本节点一次io的时延的总和的两倍。

其中,服务端接收数据请求与服务端返回数据请求的时延为2*t_net,主副服务器之间数据同步的时延为2*t_net,在服务端一次io的时延为t_storage,在副本节点一次io的时延为t_storage,所以,第一时间t1的计算公式为:t1=2*(2*t_net+2*t_net+t_storage+t_storage)。

在一个实施例中,上述检测模块402a还用于获取当前周期内时延大于第二时间的请求数,当上述当前周期内时延大于第二时间的请求数大于零时,状态判定模块402b根据此结果判定系统负载状态为重负载状态。

在一个实施例中,第二时间t2为请求最大等待响应时延与最大调节并发度范围所消耗时间的差值,上述最大调节并发度所消耗时间为最大调节并发度调节范围和上述预设时间间隔的乘积与上述预设幅度的商。

其中,请求最大等待响应时延为t_exp,最大调节并发度调节范围是并发度预设范围的最大值max与并发度预设范围的最小值min的差值;上述预设时间间隔,即周期性获取系统负载状态的预设时间,设为t;上述预设幅度为step。因此,第二时间t2的计算公式为:t2=t_exp-(max-min)*t/step。

图6为一个实施例中计算机设备的内部结构示意图。参照图6,该计算机设备包括通过系统总线连接的处理器、非易失性存储介质、内存储器和网络接口。其中,该计算机设备的非易失性存储介质可存储操作系统和实现并发度调节装置的计算机程序,该计算机程序被执行时,可使得处理器执行一种并发度调节方法。该计算机设备的处理器用于提供计算和控制能力,支撑整个计算机设备的运行。该内存储器中可储存有计算机程序,该计算机程序被处理器执行时,可使得处理器执行并发度调节方法。

在一个实施例中,上述处理器执行上述计算机程序时包括以下步骤:按照预设时间间隔获取系统负载状态;当系统负载状态为重负载状态时,按照预设幅度减小并发度;当系统负载状态为轻负载状态时,按照预设幅度增大并发度。每次调节的幅度均为预设幅度,因此每次的调节都能保证系统不会有大幅度的变化。

在一个实施例中,还提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:按照预设时间间隔获取系统负载状态;当系统负载状态为重负载状态时,按照预设幅度减小并发度;当系统负载状态为轻负载状态时,按照预设幅度增大并发度。

在一个实施例中,计算机程序被处理器执行按照预设时间间隔获取系统负载状态步骤时,还包括:周期性检测请求的时延;根据上述请求的时延判定系统负载状态。

在一个实施例中,计算机程序被处理器执行根据上述请求的时延判定系统负载状态步骤时,包括:获取当前周期内时延小于第一时间的请求数,当上述当前周期内时延小于第一时间的请求数大于零,且当前周期内时延大于第一时间的请求数等于零时,判定系统负载状态为轻负载状态。

在一个实施例中,第一时间t1为服务端接收数据请求与服务端返回数据请求的时延、主副服务器之间数据同步的时延、在服务端一次io的时延以及副本节点一次io的时延的总和的两倍。

其中,服务端接收数据请求与服务端返回数据请求的时延为2*t_net,主副服务器之间数据同步的时延为2*t_net,在服务端一次io的时延为t_storage,在副本节点一次io的时延为t_storage,所以,第一时间t1的计算公式为:t1=2*(2*t_net+2*t_net+t_storage+t_storage)。

在一个实施例中,计算机程序被处理器执行根据上述请求的时延判定系统负载状态的步骤时,包括:获取当前周期内时延大于第二时间的请求数,当上述当前周期内时延大于第二时间的请求数大于零时,判定系统负载状态为重负载状态。

在一个实施例中,第二时间t2为请求最大等待响应时延与最大调节并发度范围所消耗时间的差值,上述最大调节并发度所消耗时间为最大调节并发度调节范围和上述预设时间间隔的乘积与上述预设幅度的商。

其中,请求最大等待响应时延为t_exp,最大调节并发度调节范围是并发度预设范围的最大值max与并发度预设范围的最小值min的差值;上述预设时间间隔,即周期性获取系统负载状态的预设时间,设为t;上述预设幅度为step。因此,第二时间t2的计算公式为:t2=t_exp-(max-min)*t/step。

在一个实施例中,计算机程序被处理器执行上述并发度调节的计算机程序时,还包括如下步骤:当按照预设幅度增大并发度时,判断增大后的并发度是否超出并发度预设范围,若是,则增大并发度至并发度预设范围中的最大值;当按照预设幅度减小并发度时,判断减小后的并发度是否超出并发度预设范围,若是,则减小并发度至并发度预设范围中的最小值。

上述并发度调节方法、装置、计算机设备和存储介质,通过按照预设时间间隔获取系统的负载状态,当系统状态为重负载状态时,按照预设幅度减小并发度;当系统负载状态为轻负载状态时,按照预设幅度增大并发度,使用这种逐步调节并发度的方法,能够让系统逐渐恢复到正常的状态,保证了系统的稳定性,从而能够提供系统的服务质量。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,该计算机程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流5程。其中,前述的存储介质可为磁碟、光盘、只读存储记忆体(read-onlymemory,rom)等非易失性存储介质,或随机存储记忆体(randomaccessmemory,ram)等。

以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1