分布式存储系统中IO流量控制方法、装置和存储介质
技术领域
本发明涉及软件定义存储技术领域,尤其涉及一种分布式存储系统中IO流量控制方法、装置和存储介质。
背景技术
分布式存储系统是将各台服务器的存储资源虚拟化成一个存储池,为虚拟机提供存储组件。也就是说,由服务器组成的存储集群的直接使用者是集群自身。该系统中用户的业务运行在虚拟机,虚拟机使用存储集群,往往是给多个用户提供服务,多个点同时进行IO(Input/Output,读写)。
这种情况下,为了保证系统的QoS(Quality of Service,服务质量),现有技术提出了通过令牌桶算法对分布式存储系统进行访问流量控制。令牌桶算法是基于令牌桶中是否存在令牌来指示什么时候可以发送流量,每个令牌都代表一个字节,如果令牌桶中存在令牌(token),则允许发送流量。令牌桶算法会跟进设置的QPS(每秒查询率)限制值计算出恒定的时间间隔作为发送周期往令牌桶里加入token,新请求到来时,会拿走一个token,当token已拿完请求就阻塞或拒绝服务。
上述通过令牌桶算法对分布式存储系统进行访问流量控制,存在以下问题:请求延迟不稳定,当令牌桶中没有token时,请求将被阻塞等待,直到下次发送周期放入新的token,而且如果大量请求发生阻塞,将占用大量内存,可能导致系统内存不足,影响服务质量。
发明内容
本发明提供一种分布式存储系统中IO流量控制方法、装置和存储介质,用以提高IO请求处理的均衡性,避免IO请求抖动,保证系统服务质量。
第一方面,提供一种分布式存储系统中IO流量控制方法,包括:
在每一发送周期内,当每发送一次读写IO请求后,按照休眠调整步长增加休眠时长;
判断所述休眠时长是否大于预设的时长阈值;
如果是,则暂停发送IO请求进入休眠阶段,直至达到所述休眠时长后,继续发送IO请求;
如果否,则继续发送IO请求。
在一种实施方式中,在所述分布式存储系统启动时,按照以下方法确定所述休眠调整步长:
根据第一预设值和预设的每秒读写次数IOPS限制值确定所述休眠调整步长。
在一种实施方式中,在所述分布式存储系统运行过程中,按照以下方法调整所述休眠调整步长:
在所述分布式存储系统运行过程中,采集所述IOPS实际值;
根据所述IOPS实际值和所述IOPS限制值调整所述休眠调整步长。
在一种实施方式中,根据所述IOPS实际值和所述IOPS限制值,按照以下公式调整所述休眠调整步长:
其中:
Intervalr为调整后的休眠调整步长;
Intervals为调整前的休眠调整步长;
count为IOPS实际值;
IOPS为IOPS限制值;
n为第二预设值。
在一种实施方式中,本发明实施例提供的分布式存储系统中IO流量控制方法,还包括:
如果更新了所述IOPS限制值,则根据所述第一预设值和更新后的IOPS限制值调整所述休眠调整步长。
第二方面,提供一种分布式存储系统中IO流量控制装置,包括:
发送模块,用于在每一发送周期内,发送读写IO请求;
采集模块,用于当所述发送模块每发送一次读写IO请求后,按照休眠调整步长增加休眠时长;判断所述休眠时长是否大于预设的时长阈值;如果判断结果为是,则暂停所述发送模块发送IO请求进入休眠阶段,直至达到所述休眠时长后,控制所述发送模块继续发送IO请求;如果判断结果为否,则控制所述发送模块继续发送IO请求。
在一种实施方式中,本发明实施例提供的分布式存储系统中IO流量控制装置,还包括:
确定模块,用于在所述分布式存储系统启动时,根据第一预设值和预设的每秒读写次数IOPS限制值确定所述休眠调整步长。
在一种实施方式中,本发明实施例提供的分布式存储系统中IO流量控制装置,还包括:
第一调整模块,用于在所述分布式存储系统运行过程中,采集所述IOPS实际值;根据所述IOPS实际值和所述IOPS限制值调整所述休眠调整步长。
在一种实施方式中,所述第二调整模块,具体用于根据所述IOPS实际值和所述IOPS限制值,按照以下公式调整所述休眠调整步长:
其中:
Intervalr为调整后的休眠调整步长;
Intervals为调整前的休眠调整步长;
count为IOPS实际值;
IOPS为IOPS限制值;
n为第二预设值。
在一种实施方式中,本发明实施例提供的分布式存储系统中IO流量控制装置,还包括:
第二调整模块,用于如果更新了所述IOPS限制值,则根据所述第一预设值和更新后的IOPS限制值调整所述休眠调整步长。
第三方面,还提供一种计算装置,所述计算装置包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现上述任一分布式存储系统中IO流量控制方法所述的步骤。
第四方面,还提供一种计算机存储介质,所述计算机存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述任一分布式存储系统中IO流量控制方法所述的步骤。
采用上述技术方案,本发明至少具有下列优点:
本发明所述的分布式存储系统中IO流量控制方法、装置和存储介质,在一个发送周期内,每发送一次IO后,累计一次休眠时长,通过设定休眠时长阈值,在发送一定数量的IO请求后,执行休眠,通过上述方法,控制一个发送周期内休眠的时长和频度,避免IO抖动,提高IO请求处理的均衡性,保证系统服务质量。
附图说明
图1为本发明实施例的分布式存储系统中IO流量控制方法的应用场景示意图;
图2为本发明实施例的第一种分布式存储系统中IO流量控制方法对应的时间分布示意图;
图3为本发明实施例的第二种分布式存储系统中IO流量控制方法对应的时间分布示意图;
图4为本发明实施例的第三种分布式存储系统中IO流量控制方法对应的时间分布示意图;
图5为本发明实施例的分布式存储系统中IO流量控制方法实施流程示意图;
图6为本发明实施例的分布式存储系统中IO流量控制装置的结构示意图。
具体实施方式
为更进一步阐述本发明为达成预定目的所采取的技术手段及功效,以下结合附图及较佳实施例,对本发明进行详细说明如后。
需要说明的是,本发明实施例中的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。
在本文中提及的“多个或者若干个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。
如图1所示,其为超融合系统中分布式存储系统架构示意图,系统包括:应用主机11,策略主机12和存储主机13,其中,应用主机11,用于生成虚拟磁盘,接收并转发IO,本发明实施例在应用主机上的虚拟磁盘IO处理模块上实现IOPS限制。策略主机:超融合系统中分布式存储系统的元数据管理与控制,仅仅负责管理集群,具体的IO并不经过策略主机。存储主机:超融合系统中分布式存储系统数据最终的存放地点,将存储资源抽象成多个存储组件。应用主机中的发送模块负责根据确定出的发送周期,在每一发送周期内,将发送队列中的IO(读写)请求发送到网络上。采集模块负责计算在当前周期内,累计的休眠时长,根据累计的休眠时长,控制发送模块是否进入休眠。
本发明实施例中,针对确定出的每一发送周期,可以根据发送周期时长、用户设定的IOPS(每秒读写次数)限制值和每一IO请求的处理时间确定出当前发送周期的休眠时间,基于此,可以按照以下任一方式进行IO请求发送流量控制:
第一种实施方式、
在一个实施例中,可以将当前发送周期的所有IO在该发送周期开始时全部发送,在全部发送完成或者根据IOPS限制值达到IOPS限制值时,停止发送进入休眠阶段,直至下一发送周期到达,如图2所示,其为该种发送方式的时间分配示意图。采用这种方式,实现简单,IO请求发送控制精确,但是会使得IO请求发送过于集中,导致IO请求发送抖动明显,容易引起网络拥塞和磁盘负载抖动。
第二种实施方式、
在另一实施例中,可以将休眠时间均匀分布到每个IO发送阶段,即每发送一个IO请求,休眠一段时间,其对应的时间分配示意图如图3所示,采用这种方式,应用主机进入休眠过于频繁,休眠时间较短,操作系统无法精确控制毫秒以下的休眠。
第三种实施方式
有鉴于此,具体实施时,在第二种实施方式的基础上,可以将一批IO请求发送完成,才进入1次休眠,以此来控制休眠时间的时长和频度,避免休眠过于频繁,操作系统无法精确控制,或者集中一次处理导致的IO抖动,引起网络拥塞和磁盘负载抖动,保证系统服务质量。
如图4所示,其为本发明实施例提供的分布式存储系统中IO流量控制方法实时流程示意图,可以包括以下步骤:
S41、在每一发送周期内,当每发送一次IO请求后,按照休眠调整步长增加休眠时长。
S42、判断休眠时长是否大于预设的时长阈值,如果是,执行步骤S43,如果否,执行步骤S44。
S43、暂停发送IO请求进入休眠阶段,直至达到所述休眠时长,并执行步骤S41。
具体实施时,在休眠时长到达后,如果当前发送周期尚未结束,则继续发送IO请求,并执行步骤S41。
S44、继续发送IO请求,并执行步骤S41。
具体实施时,在上述第二种实施方式中确定出每个IO请求发送对应的休眠时长的基础上,每发送完成一个IO请求,便累计一次休眠调整步长,例如,以第二种实施方式中确定出的每个IO请求发送对应的休眠时长为1ms为例,每发送完成一次IO请求,则累计1ms,发送完成两次IO请求,则在第一次发送的基础上再累计1ms,即休眠时长达到2ms,以此类推,发送3次,累计的休眠时长可以达到3ms,……发送5次IO请求,累计的休眠时长可以达到5ms。以预先设定的时长阈值为5ms为例,则每发送5次IO请求,便进入休眠状态,休眠时长为5ms,休眠5ms后,继续进行IO请求发送,每发送5次,再休眠5ms,如此循环,直至当前发送周期结束。如图5所示,其为第三种实施方式对应的一个发送周期内的时间分配示意图。
本发明实施例中,在系统启动之初,由于还没有IO的统计数据,仅有用户设置的IOPS限制值,本发明实施例中,可以采用慢启动方式完成初始化。这种情况下,休眠调整步长可以根据第一预设值和预设的IOPS限制值确定,例如,可以按照以下公式确定休眠调整步长:m/IOPS,其中,m表示第一预设值。具体实施时,第一预设值可以由用户根据实际需要进行设定,本发明实施例对此不进行限定,例如可以设置为1000000,即休眠调整步长=1000000/IOPS。
在分布式系统运行过程中,可以按照以下方法调整休眠调整步长:在分布式存储系统运行过程中,采集IOPS实际值;根据IOPS实际值和IOPS限制值调整休眠调整步长。具体地,可以按照以下公式调整休眠调整步长:
其中:
Intervalr为调整后的休眠调整步长;
Intervals为调整前的休眠调整步长;
count为IOPS实际值;
IOPS为IOPS限制值;
n为第二预设值。
具体实施中,第二预设值可以根据经验值设定,例如,可以设定为200,通过第二预设值,在IO抖动和快速调整IOPS之间取一个均衡值。
需要说明的是,具体实施时,如果用户更新了IOPS限制值,则需要根据第一预设值和更新后的IOPS限制值调整休眠调整步长。
本发明实施例提供的分布式存储系统中IO流量控制方法中,在一个发送周期内,每发送一次IO后,累计一次休眠时长,通过设定休眠时长阈值,在发送一定数量的IO请求后执行休眠,通过上述方法,控制一个发送周期内休眠的时长和频度,避免IO抖动,提高IO请求处理的均衡性,保证系统服务质量。
基于相同的技术构思,本发明实施例还提供了一种分布式存储系统中IO流量控制装置,如图6所示,可以包括:
发送模块61,用于在每一发送周期内,发送读写IO请求;
采集模块62,用于当所述发送模块每发送一次读写IO请求后,按照休眠调整步长增加休眠时长;判断所述休眠时长是否大于预设的时长阈值;如果判断结果为是,则暂停所述发送模块发送IO请求进入休眠阶段,直至达到所述休眠时长后,控制所述发送模块继续发送IO请求;如果判断结果为否,则控制所述发送模块继续发送IO请求。
在一种实施方式中,本发明实施例提供的分布式存储系统中IO流量控制装置,还包括:
确定模块,用于在所述分布式存储系统启动时,根据第一预设值和预设的每秒读写次数IOPS限制值确定所述休眠调整步长。
在一种实施方式中,本发明实施例提供的分布式存储系统中IO流量控制装置,还包括:
第一调整模块,用于在所述分布式存储系统运行过程中,采集所述IOPS实际值;根据所述IOPS实际值和所述IOPS限制值调整所述休眠调整步长。
在一种实施方式中,所述第二调整模块,具体用于根据所述IOPS实际值和所述IOPS限制值,按照以下公式调整所述休眠调整步长:
其中:
Intervalr为调整后的休眠调整步长;
Intervals为调整前的休眠调整步长;
count为IOPS实际值;
IOPS为IOPS限制值;
n为第二预设值。
在一种实施方式中,本发明实施例提供的分布式存储系统中IO流量控制装置,还包括:
第二调整模块,用于如果更新了所述IOPS限制值,则根据所述第一预设值和更新后的IOPS限制值调整所述休眠调整步长。
基于相同的技术构思,本发明实施例还提供一种计算装置,所述计算装置包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现上述任一分布式存储系统中IO流量控制方法所述的步骤。
基于相同的技术构思,本发明实施例还提供一种计算机存储介质,所述计算机存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述任一分布式存储系统中IO流量控制方法所述的步骤。
通过具体实施方式的说明,应当可对本发明为达成预定目的所采取的技术手段及功效得以更加深入且具体的了解,然而所附图示仅是提供参考与说明之用,并非用来对本发明加以限制。