一种用于分布式存储的流控方法和装置

阅读: 评论:0

著录项
  • CN201911372275.7
  • 20191227
  • CN111190544A
  • 20200522
  • 天津中科曙光存储科技有限公司
  • 纪志祥;沈海嘉;张廷全;苗艳超
  • G06F3/06
  • G06F3/06 H04L12/801 H04L29/08

  • 天津市滨海新区华苑产业区(环外)海泰华科大街15号3层
  • 天津(12)
  • 北京德恒律治知识产权代理有限公司
  • 章社杲;卢军峰
摘要
本发明提供了一种用于分布式存储的流控方法和装置,包括:计算资源分配方的总资源数和与资源分配方对应的资源申请端节点的最小预留配额;将总预留配额从总资源数中扣除,得到剩余资源配额,其中,总预留配额等于最小预留配额乘以所有资源申请端节点的数量;计算包括所有资源申请端节点的所有节点的权重;根据权重和剩余资源配额分配资源配额。不限于对基于层4的协议、ip、端口力度的流控,还可以对同协议类型、同种业务进行精准流控。并且,可有效提升分布式存储系统的性能上线,在同样的性能下可降低系统的响应时间。
权利要求

1.一种用于分布式存储的流控方法,其特征在于,包括:

计算资源分配方的总资源数和与所述资源分配方对应的资源申请端节点的最小预留配额;

将总预留配额从所述总资源数中扣除,得到剩余资源配额,其中,所述总预留配额等于所述最小预留配额乘以所有所述资源申请端节点的数量;

计算包括所有所述资源申请端节点的所有节点的权重;

根据所述权重和所述剩余资源配额分配资源配额。

2.根据权利要求1所述的用于分布式存储的流控方法,其特征在于,还包括:检查资源配额剩余,如果有资源配额剩余,则查第一个权重不为零的所述资源申请端节点,并更新所述第一个权重不为零的资源申请端节点的配额;如果资源配额分配完毕,遍历所有所述资源申请端节点,使配额信息生效。

3.根据权利要求2所述的用于分布式存储的流控方法,其特征在于,更新所述第一个权重不为零的资源申请端节点的配额包括:如果新分配的配额小于当前的配额,则直接更新配额信息给对应的所述资源申请端节点。

4.根据权利要求2所述的用于分布式存储的流控方法,其特征在于,更新所述第一个权重不为零的资源申请端节点的配额包括:如果新分配的配额小于当前的配额,且当前使用的配额大于所述新分配的配额,则释放相应的配额,其中,所述释放的相应的配额等于所述当前使用的配额减去所述新分配的配额。

5.根据权利要求2所述的用于分布式存储的流控方法,其特征在于,更新所述第一个权重不为零的资源申请端节点的配额包括:如果新分配的配额大于当前的配额,则从全局资源配额中分配对应配额给所述资源申请端节点。

6.根据权利要求2所述的用于分布式存储的流控方法,其特征在于,更新所述第一个权重不为零的资源申请端节点的配额包括:如果分配配额失败,则将所述资源申请端节点加入到配额等待队列中,等待下一次分配。

7.根据权利要求1所述的用于分布式存储的流控方法,其特征在于,所述资源申请端节点每次进行业务前,检查对应的所述资源分配方节点是否有足够的配额供使用,如果无足够的配额,则将请求挂起,等待配额更新后再发送;如果有足够的配额,更新所述资源申请端节点的资源请求压力值并将对应的所述资源分配方节点的配额扣除。

8.一种用于分布式存储的流控装置,其特征在于,包括资源分配方和资源申请端节点,

其中,所述资源分配方用于:

计算资源分配方的总资源数和与所述资源分配方对应的资源申请端节点的最小预留配额;

将总预留配额从所述总资源数中扣除,得到剩余资源配额,其中,所述总预留配额等于所述最小预留配额乘以所有所述资源申请端节点的数量;

计算包括所有所述资源申请端节点的所有节点的权重;

根据所述权重和所述剩余资源配额分配资源配额。

9.根据权利要求8所述的用于分布式存储的流控装置,其特征在于,还包括:检查资源配额剩余,如果有资源配额剩余,则查第一个权重不为零的所述资源申请端节点,并更新所述第一个权重不为零的资源申请端节点的配额;如果资源配额分配完毕,遍历所有所述资源申请端节点,使配额信息生效。

10.根据权利要求8所述的用于分布式存储的流控装置,其特征在于,其中,所述资源申请端节点用于:

每次进行业务前,检查对应的所述资源分配方节点是否有足够的配额供使用,如果无足够的配额,则将请求挂起,等待配额更新后再发送;如果有足够的配额,更新所述资源申请端节点的资源请求压力值并将对应的所述资源分配方节点的配额扣除。

说明书
技术领域

本发明涉及一种用于分布式存储的流控方法和装置。

常见的流控分为两类:一是传统的流控方式:通过路由器、交换机的QoS模块实现针对IP、端口以及协议类型的流量控制。二是智能流控:通过专用的设备、软件应用组件实现基于应用层的流控。

方式一的传统流控方式只能实现基于层4的协议、ip、端口力度的流控,无法对同协议类型、同种业务进行精准流控。

方式二的智能流控,和每种业务类型、产品的关联度很大,无成熟的可贴合应用于分布式存储产品的流控技术。

针对相关技术中存在的问题,本发明的目的在于提供一种用于分布式存储的流控方法和装置,不限于对基于层4的协议、ip、端口力度的流控,还可以同协议类型、同种业务进行精准流控。并且,可有效提升分布式存储系统的性能上线,在同样的性能下可降低系统的响应时间。经测试可以提升10%以上的系统吞吐性能。在纠删模式极端情况下,最高可提升近30%~50%的系统吞吐性能。

根据本发明的实施例,分布式存储的流控方法,包括:计算资源分配方的总资源数和与资源分配方对应的资源申请端节点的最小预留配额;将总预留配额从总资源数中扣除,得到剩余资源配额,其中,总预留配额等于最小预留配额乘以所有资源申请端节点的数量;计算包括所有资源申请端节点的所有节点的权重;根据权重和剩余资源配额分配资源配额。

根据本发明的实施例,分布式存储的流控方法,还包括:检查资源配额剩余,如果有资源配额剩余,则查第一个权重不为零的资源申请端节点,并更新第一个权重不为零的资源申请端节点的配额;如果资源配额分配完毕,遍历所有资源申请端节点,使配额信息生效。

根据本发明的实施例,更新第一个权重不为零的资源申请端节点的配额包括:如果新分配的配额小于当前的配额,则直接更新配额信息给对应的资源申请端节点。

根据本发明的实施例,更新第一个权重不为零的资源申请端节点的配额包括:如果新分配的配额小于当前的配额,且当前使用的配额大于新分配的配额,则释放相应的配额,其中,释放的相应的配额等于当前使用的配额减去新分配的配额。

根据本发明的实施例,更新第一个权重不为零的资源申请端节点的配额包括:如果新分配的配额大于当前的配额,则从全局资源配额中分配对应配额给资源申请端节点。

根据本发明的实施例,更新第一个权重不为零的资源申请端节点的配额包括:如果分配配额失败,则将资源申请端节点加入到配额等待队列中,等待下一次分配。

根据本发明的实施例,资源申请端节点每次进行业务前,检查对应的资源分配方节点是否有足够的配额供使用,如果无足够的配额,则将请求挂起,等待配额更新后再发送;如果有足够的配额,更新资源申请端节点的资源请求压力值并将对应的资源分配方节点的配额扣除。

根据本发明的实施例,用于分布式存储的流控装置,包括资源分配方和资源申请端节点,其中,资源分配方用于:计算资源分配方的总资源数和与资源分配方对应的资源申请端节点的最小预留配额;将总预留配额从总资源数中扣除,得到剩余资源配额,其中,总预留配额等于最小预留配额乘以所有资源申请端节点的数量;计算包括所有资源申请端节点的所有节点的权重;根据权重和剩余资源配额分配资源配额。

根据本发明的实施例,用于分布式存储的流控装置,还包括:检查资源配额剩余,如果有资源配额剩余,则查第一个权重不为零的资源申请端节点,并更新第一个权重不为零的资源申请端节点的配额;如果资源配额分配完毕,遍历所有资源申请端节点,使配额信息生效。

根据本发明的实施例,其中,资源申请端节点用于:每次进行业务前,检查对应的资源分配方节点是否有足够的配额供使用,如果无足够的配额,则将请求挂起,等待配额更新后再发送;如果有足够的配额,更新资源申请端节点的资源请求压力值并将对应的资源分配方节点的配额扣除。

本发明的有益技术效果在于:本发明提供的用于分布式存储的流控方法和装置,不限于对基于层4的协议、ip、端口力度的流控,还可以对同协议类型、同种业务进行精准流控。并且,可有效提升分布式存储系统的性能上线,在同样的性能下可降低系统的响应时间。经测试可以提升10%以上的系统吞吐性能。在纠删模式极端情况下,最高可提升近30%~50%的系统吞吐性能。

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是根据本发明一个实施例的用于分布式存储的流控方法的流程图;

图2是根据本发明一个实施例的资源分配方与资源申请端节点对应关系的示意图;

图3是根据本发明一个实施例的资源分配方的配额计算过程的示意图;

图4是根据本发明一个实施例的配额更新过程的示意图;

图5是根据本发明另一个实施例的配额更新过程的示意图;

图6是根据本发明一个实施例的资源申请端配额的控制的示意图。

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员所获得的所有其他实施例,都属于本发明保护的范围。

如图1所示,本发明提供了一种用于分布式存储的流控方法,包括:

S11,计算资源分配方的总资源数和与资源分配方对应的资源申请端节点的最小预留配额;

S12,将总预留配额从总资源数中扣除,得到剩余资源配额,其中,总预留配额等于最小预留配额乘以所有资源申请端节点的数量;

S13,计算包括所有资源申请端节点的所有节点的权重;

S14,根据权重和剩余资源配额分配资源配额。

本发明的上述技术方案,通过配额计算以及最小预留配额机制,可以实现不限于对基于层4的协议、ip、端口力度的流控,还可以对同协议类型、同种业务进行精准流控。并且,可有效提升分布式存储系统的性能上线,在同样的性能下可降低系统的响应时间。经测试可以提升10%以上的系统吞吐性能。在纠删模式极端情况下,最高可提升近30%~50%的系统吞吐性能。

本发明提供的用于分布式存储的流控方法,还包括:

S15,检查资源配额剩余,如果有资源配额剩余,则查第一个权重不为零的资源申请端节点,并更新第一个权重不为零的资源申请端节点的配额;如果资源配额分配完毕,遍历所有资源申请端节点,使配额信息生效。

其中,在S15中,更新第一个权重不为零的资源申请端节点的配额包括:如果新分配的配额小于当前的配额,则直接更新配额信息给对应的资源申请端节点。

其中,在S15中,更新第一个权重不为零的资源申请端节点的配额包括:如果新分配的配额小于当前的配额,且当前使用的配额大于新分配的配额,则释放相应的配额,其中,释放的相应的配额等于当前使用的配额减去新分配的配额。

其中,在S15中,更新第一个权重不为零的资源申请端节点的配额包括:如果新分配的配额大于当前的配额,则从全局资源配额中分配对应配额给资源申请端节点。

其中,在S15中,更新第一个权重不为零的资源申请端节点的配额包括:如果分配配额失败,则将资源申请端节点加入到配额等待队列中,等待下一次分配。

其中,在S11中,还可以包括:资源申请端节点每次进行业务前,检查对应的资源分配方节点是否有足够的配额供使用,如果无足够的配额,则将请求挂起,等待配额更新后再发送;如果有足够的配额,更新资源申请端节点的资源请求压力值并将对应的资源分配方节点的配额扣除。

在一些实施例中,如图2所示,本发明的流控分为Applicant和Dispatcher两部分,Applicant为资源申请端(如图2中所示的A1、A2、A3),Dispatcher为资源分配方(如图2中所示的D1、D2)。资源的申请不单独定义申请流程,而是嵌入每次的业务流程,具体内容参见表1。资源分配嵌入ACK消息,内容参考表2。

表1

表2

字段名 描述 quota 新分配资源绝对值。

Applicant每发送一次消息,就将自身对应Dispatcher的资源减一,每收到一个ACK就根据其携带的资源配比更新其资源池。Applicant在对应Dispatcher资源配额为0时,将后续对该Dispatcher的请求挂起,待有新的资源配比释放时才进行发送。

为保证所有Applicant节点不被饿死,在系统初始化时,会为每个上线的Applicant分配固定的最小配额quota-mini,该配额即使是Applicant没有负载时也不会被收回。

在每个Applicant节点内会维护所有上线的Dispatcher的节点对象(如图2中所示的D1~、D2~),对象维护对应Dispatcher为Applicant节点分配的配额、已使用的配额值、Press压力值等信息。在每个Dispatcher节点内会维护所有的上线的Applicant的节点对象(如图2中所示的A1~、A2~、A3~),对象维护Applicant节点的配额信息、Press压力值、最小配额quota-mini等信息。

在本发明的一个实施例中,Dispatcher端的配额计算过程如图3所示。包括:

(1)根据系统规格和能力,计算Dispatcher的总的资源数quota_max、Applicant节点app_node的最小预留配额quota_mini。并将总的配额预留(quota_mini*Applicant_noumber)从quota_max中扣除,得到剩余资源配额quota_left。Applicant_noumber为app_node的数量

(2)计算所有已经上线的Applicant的权重(weight),和所有节点的权重总和(total_weight)。资源配额的分配根据每个权重和剩余资源配额按比例分配。

(3)检查是否有资源配额剩余。

(4)如果有资源配额剩余,则查第一个权重不为0的app_node,并更新其配额。再次回到步骤3。

(5)如果资源配额分配完毕,遍历所有app_node,使配额信息生效。

在本发明的一个实施例中,配额更新过程如图4所示,包括:

(1)如果新的配额(quota_new)和当前的配额(quota_current)相等,直接结束流程。

(2)如果新的配额配额减少,则直接跟新配额信息(version)给对应的Applicant。

(3)如果新的配额配额增加,从全局资源配额(token_global)中分配对应配额给Applicant。

(4)分配配额成功,结束流程。

(5)分配配额失败,则将该app_node加入到配额等待队列中,等待下一次分配。

在本发明的一个实施例中,配额更新过程如图5所示,包括:

(1)如果新分配的配额大于当前的配额,结束流程。

(2)如果当前使用的配额(quota_inuse)小于新分配的配额,结束流程。

(3)如果当新分配的配额小于当前的配额,且当前使用的配额大于新分配的配额,释放相应的配额。其中,释放的相应的配额(quota_release)等于当前使用的配额减去新分配的配额。

在本发明的一个实施例中,Applicant端配额的控制如图6所示,包括:

(1)每次进行业务前,先检查对应的dispatcher节点(dispatcher_node)是否有足够的配额供使用。

(2)无足够配额,则将请求挂起(pending),等待配额更新后再发送。

(3)有足够配额,更新本端的press压力值并将对应dispatcher节点的配额扣除。

本发明还提供了一种用于分布式存储的流控装置,包括资源分配方和资源申请端节点,其中,资源分配方用于:计算资源分配方的总资源数和与资源分配方对应的资源申请端节点的最小预留配额;将总预留配额从总资源数中扣除,得到剩余资源配额,其中,总预留配额等于最小预留配额乘以所有资源申请端节点的数量;计算包括所有资源申请端节点的所有节点的权重;根据权重和剩余资源配额分配资源配额。

在一个实施例中,本发明的用于分布式存储的流控装置,还包括:检查资源配额剩余,如果有资源配额剩余,则查第一个权重不为零的资源申请端节点,并更新第一个权重不为零的资源申请端节点的配额;如果资源配额分配完毕,遍历所有资源申请端节点,使配额信息生效。

在一个实施例中,资源申请端节点用于:每次进行业务前,检查对应的资源分配方节点是否有足够的配额供使用,如果无足够的配额,则将请求挂起,等待配额更新后再发送;如果有足够的配额,更新资源申请端节点的资源请求压力值并将对应的资源分配方节点的配额扣除。

以上仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

本文发布于:2023-04-14 01:13:57,感谢您对本站的认可!

本文链接:https://patent.en369.cn/patent/3/86331.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 369专利查询检索平台 豫ICP备2021025688号-20 网站地图