本申请涉及通信技术领域,尤其涉及一种数据限流方法及装置。
背景技术:
在缓存写数据的业务模型下,提供网络附加存储(networkattachedstorage,nas)业务的存储节点只需要将写请求所请求的写数据写到缓存中,以提高缓存写数据的性能。但同时也导致存储节点积压大量的缓存回写请求。在分布式文件系统中,这种问题尤为明显,具体表现为存储节点存在很多回写的对象存储设备(objectstoragedevice,osd)请求,这就无法及时处理读请求,最终导致读请求和写请求所需的带宽相差很大,即出现了写抢读的问题。
目前,存储节点通常基于linuxtc(trafficcontrol)工具配置限流策略,以实现对读请求和写请求的限流处理。具体地,在实体网卡上配置基于ip地址和端口的读请求对应的限流策略,不同文件协议的读请求对应不同的限流策略,后续实体网卡基于配置的限流策略对来自用户设备的读请求进行限流;在创建的虚拟网卡上配置基于ip地址和端口的写请求对应的限流策略,不同文件协议的写请求对应不同的限流策略,后续虚拟网卡基于配置的限流策略,对来自用户设备的写请求进行限流,最终在实体网卡完成写操作。
在上述限流方案中,需要基于不同的文件协议配置不同的限流策略,配置操作较为繁琐,并且,受虚拟网卡自身处理性能的限制,还容易出现限流精度不高的问题,再者,如果实体网卡还负责与osd设备进行存储业务的通信,部分业务请求可能因匹配上相应的限流策略被限流,进而影响存储节点所在集群的集群性能。
技术实现要素:
为克服相关技术中存在的问题,本申请提供了一种数据限流法及装置。
根据本申请实施例的第一方面,提供一种数据限流方法,所述方法应用于提供nas业务的存储节点中的分布式文件系统客户端,所述方法包括:
在接收到来自用户设备的读/写请求时,根据所述读/写请求对应的限流类型,确定所述读/写请求所需的令牌数量;
读取所述读/写请求对应的令牌桶内的令牌数量;
判断读取的令牌数量是否小于确定出的令牌数量;
在判断结果为否时,对所述读/写请求进行处理,并在所述令牌桶中删除第一数量个令牌,其中,所述第一数量为读取的令牌数量与确定出的令牌数量的差值;
当到达令牌添加周期时,根据首次在所述令牌桶中添加令牌时确定出的所述令牌桶对应的最大令牌数量和第一令牌添加数量、以及当前读取的所述令牌桶内的令牌数量,确定当前次的第二令牌添加数量,并在所述令牌桶中添加第二数量个令牌,其中,所述最大令牌数量为本客户端根据获取的针对读/写请求配置的限流类型和限流值确定出的,所述第一令牌添加数量为本客户端根据一个令牌添加周期的时长和所述最大令牌数量计算出的,添加后的令牌桶内的令牌数量不大于所述最大令牌数量,且所述第一数量为所述第二令牌添加数量;
在判断结果为是时,根据所述第一令牌添加数量、所述时长、和确定出的令牌数量与读取的令牌数量的差值计算等待时长,并在所述等待时长到达后,返回执行读取所述读/写请求对应的令牌桶内的令牌数量的步骤。
根据本申请实施例的第二方面,提供一种数据限流装置,所述装置应用于提供nas业务的存储节点中的分布式文件系统客户端,所述装置包括:
确定模块,用于在接收到来自用户设备的读/写请求时,根据所述读/写请求对应的限流类型,确定所述读/写请求所需的令牌数量;
读取模块,用于读取所述读/写请求对应的令牌桶内的令牌数量;
判断模块,用于判断读取的令牌数量是否小于确定出的令牌数量;
处理模块,用于在判断结果为否时,对所述读/写请求进行处理,并在所述令牌桶中删除第一数量个令牌,其中,所述第一数量为读取的令牌数量与确定出的令牌数量的差值;
当到达令牌添加周期达时,根据首次在所述令牌桶中添加令牌时确定出的所述令牌桶对应的最大令牌数量和第一令牌添加数量、以及当前读取的所述令牌桶内的令牌数量,确定当前次的第二令牌添加数量,并在所述令牌桶中添加第二数量个令牌,其中,所述最大令牌数量为本客户端根据获取的针对读/写请求配置的限流类型和限流值确定出的,所述第一令牌添加数量为本客户端根据一个令牌添加周期的时长和所述最大令牌数量计算出的,添加后的令牌桶内的令牌数量不大于所述最大令牌数量,且所述第一数量为所述第二令牌添加数量;以及
在判断结果为是时,根据所述第一令牌添加数量、所述时长、和确定出的令牌数量与读取的令牌数量的差值计算等待时长,并在等待时长到达后,返回执行读取所述读/写请求对应的令牌桶内的令牌数量的步骤。
本申请的实施例提供的技术方案可以包括以下有益效果:
在本申请实施例中,在提供nas业务的存储节点中的分布式文件系统客户端侧,基于针对读请求和写请求配置的限流类型和限流值,配置对应的令牌桶,利用配置的令牌桶,实现读/写请求的限流,并且,分布式文件系统客户端还按照令牌添加周期不断地在这些令牌桶中添加令牌,以保证限流的正常进行。这种限流方式,无需区分文件协议,配置较为简单,并且无需创建虚拟网卡,可以提高限流精度,再者,也不会影响实体网卡与osd设备之间的通信,提高了存储节点所在集群的稳定性。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本申请。
附图说明
此处的附图被并入说明书中并构成本申请的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。
图1为本申请实施例提供的一种数据限流方法的流程示意图;
图2为本申请实施例提供的一种数据限流装置的结构示意图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
在本申请使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本申请和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本申请可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
接下来对本申请实施例进行详细说明。
本申请实施例提供了一种数据限流方法,该方法应用于提供nas业务的存储节点中的分布式文件系统客户端,如图1所示,该方法可以包括如下步骤:
s11、在接收到来自用户设备的读/写请求时,根据读/写请求对应的限流类型,确定读/写请求所需的令牌数量。
s12、读取读/写请求对应的令牌桶内的令牌数量。
s13、判断读取的令牌数量是否小于确定出的令牌数量;在判断结果为否时,执行步骤s14;在判断结果为是时,执行步骤s16。
s14、对读/写请求进行处理,并在令牌桶中删除第一数量个令牌。
其中,第一数量为读取的令牌数量与确定出的令牌数量的差值。
s15、当到达令牌添加周期时,根据首次在令牌桶中添加令牌时确定出的令牌桶对应的最大令牌数量和第一令牌添加数量、以及当前读取的令牌桶内的令牌数量,确定当前次的第二令牌添加数量,并在令牌桶中添加第二数量个令牌。
其中,最大令牌数量为本客户端根据获取的针对读/写请求配置的限流类型和限流值确定出的;
第一令牌添加数量为本客户端根据一个令牌添加周期的时长和最大令牌数量计算出的;
添加后的令牌桶内的令牌数量不大于最大令牌数量,且第一数量为第二令牌添加数量。
s16、根据第一令牌添加数量、时长、和确定出的令牌数量与读取的令牌数量的差值计算等待时长。
s17、在等待时长到达后,返回执行步骤s12。
需要说明的是,在本申请实施例中,为了提高限流精度,并且不影响存储节点所在集群的集群能,事先在分布式文件系统客户端侧分别配置需要进行限流的读请求和写请求对应的令牌桶,以及配置令牌添加周期(具体时长可根据实际经验设置)。初始时,这两个令牌桶中均没有令牌。
在这里,不管是读请求,还是写请求,相应的协议类型可以是通用网络文件系统(commoninternetfilesytem,cifs)协议,也可以是网络文件系统(networkfilesytem,nfs)协议,还可以是网络时间协议(networktimeprotocol,ntp)。
web服务器专门提供限流配置页面,供管理者在该页面上配置针对读请求的限流类型和限流值、以及针对写请求的限流类型和限流值。
在这里,不管是针对读请求的限流类型,还是针对写请求的限流类型,具体的限流类型可以是限制带宽,也可以是限制每秒读写次数(inputoutputoperationspersecond,iops)。
后续管理者在该页面上输入针对读请求配置的限流类型和限流值、以及针对写请求的限流类型和限流值之后,web服务器通知给存储节点中的web客户端,再由web客户端通过proc文件系统将这些信息通知给分布式文件系统客户端。
在存储节点所在的存储设备仅包括这一个存储节点时,web服务器将这些信息通知给这一个存储节点中的web客户端,再由web客户端将这些信息通过proc文件系统通知给分布式文件系统客户端。
在存储节点所在的存储设备包括有多个提供nas业务的存储节点时,web服务器将这些信息分别通知给这些提供nas业务的存储节点中的web客户端,再由每个web客户端将这些信息通过proc文件系统通知给位于同一个存储节点中的分布式文件系统客户端。
对于分布式文件系统客户端而言,在正式运行之后,开始按照令牌添加周期,调用令牌添加函数获取针对读请求配置的限流类型和限流值、以及针对写请求配置的限流类型和限流值。
在未获取到这些信息时,分布式文件系统客户端不做任何操作;一旦在某个令牌添加周期到达后获取到了这些信息,分布式文件系统客户端会执行在读请求对应的令牌桶中添加令牌的流程以及在写请求对应的令牌桶中添加令牌的流程,具体如下:
在读请求对应的令牌桶中添加令牌的流程:分布式文件系统客户端可以根据获取的针对读请求配置的限流类型和限流值确定读请求对应的令牌桶的最大令牌数量,以及根据一个令牌添加周期的时长和最大令牌数量计算出需要添加到读请求对应的令牌桶中的令牌添加数量(此令牌添加数量是首次计算出的);之后,分布式文件系统客户端可以直接调用atomic(原子)_cmpxchg(比较和交换)函数在读请求对应的令牌桶中添加令牌,添加的令牌数量为首次确定出的令牌添加数量。
在这里,由于此次是首次在读请求对应的令牌桶中添加令牌,添加前的令牌桶中没有令牌,所以,在此次添加令牌时可以不用读取读请求对应的令牌桶内的令牌数量。
例如,假设令牌添加周期为100微秒(us),假设针对读请求配置的限流类型为ipos,限流值为每秒读写1次,假设ipos对应1万个令牌(可称之为基准令牌数量),则确定最大令牌数量为ipos对应的令牌数量(即,1万个令牌);计算最大令牌数量与计算出的1秒添加的次数(即,1s/100us=1万次)的比值,将计算结果确定为需要添加到读请求对应的令牌桶中的令牌添加数量。
又例如,仍以令牌添加周期为100us为例,假设针对读请求配置的限流类型为带宽,限流值为1mb/s,假设1k对应10个令牌(可称之为基准令牌数量),则确定最大令牌数量为1万个令牌(即,1000*10=1万);计算最大令牌数量与计算出的1秒添加的次数(即,1s/100us=1万次)的比值,将计算结果确定为需要添加到读请求对应的令牌桶中的令牌添加数量。
在写请求对应的令牌桶中添加令牌的流程:分布式文件系统客户端可以根据一个令牌添加周期的时长、获取的针对写请求配置的限流类型和限流值确定出需要添加到写请求对应的令牌桶中的令牌添加数量(此令牌添加数量是首次计算出的),根据获取的针对写请求配置的限流值确定写请求对应的令牌桶的最大令牌数量;之后,分布式文件系统客户端可以直接调用atomic(原子)-_cmpxchg(比较和交换)函数在写请求对应的令牌桶中添加令牌,添加的令牌数量为首次确定出的令牌添加数量。
在这里,由于此次是首次在写请求对应的令牌桶中添加令牌,添加前的令牌桶中没有令牌,所以,在此次添加令牌时可以不用读取写请求对应的令牌桶内的令牌数量。
后续再到达某个令牌添加周期时,不管是对于读请求对应的令牌桶,还是对于写请求对应的令牌桶,分布式文件系统客户端执行的在相应令牌桶中添加令牌的流程详见上述步骤s15。
进一步需要说明的是,对于分布式文件系统客户端而言,在每个令牌添加周期到达时,可以先执行在读请求对应的令牌桶中添加令牌的流程,再执行在写请求对应的令牌桶中添加令牌的流程;也可以先执行在写请求对应的令牌桶中添加令牌的流程,再执行在读请求对应的令牌桶中添加令牌的流程。
对于分布式文件系统客户端而言,在接收到来自用户设备的读/写请求时,如果还无法知晓读/写请求对应的限流类型,可以暂停处理,直到获取到相应的限流类型之后再开始执行根据读/写请求对应的限流类型,确定读/写请求所需的令牌数量的步骤。
如果已知晓读/写请求对应的限流类型,分布式文件系统客户端直接执行根据读/写请求对应的限流类型,确定读/写请求所需的令牌数量的步骤即可。
另外,如果令牌添加周期的到达时间与接收到来自用户设备的读/写请求的时间是同一时间点,则分布式文件系统客户端可以优先处理读/写请求。
具体地,分布式文件系统客户端可以通过以下方式确定读/写请求所需的令牌数量:
若读/写请求对应的限流类型为限制带宽,则根据读/写请求所请求的读/写数据的大小,确定读/写请求所需的令牌数量;
若读/写请求对应的限流类型为限制ipos,则确定读/写请求所需的令牌数量为设定令牌数量。
例如,在限流类型为限制带宽的情形下,假设1k对应10个令牌,则分布式文件系统客户端可以根据读/写请求所请求的读/写数据的实际大小计算出所需的令牌数量。
具体地,在上述步骤s12中,分布式文件系统客户端读取读/写请求对应的令牌桶内的令牌数量时,可以调用atomic_read(读)函数读取读/写请求对应的令牌桶内的令牌数量。
在上述步骤s14中,分布式文件系统客户端在令牌桶中删除第一数量个令牌时,也可以调用atomic_cmpxchg函数来完成删除操作。
在上述步骤s15中,分布式文件系统客户端可以通过以下方式确定当前次的第二令牌添加数量:
若第一令牌添加数量与当前读取的令牌桶内的令牌数量之和不大于最大令牌数量,则确定当前次的第二令牌添加数量为第一令牌添加数量;
若第一令牌添加数量与当前读取的令牌桶内的令牌数量之和大于最大令牌数量,则进一步判断当前读取的令牌桶内的令牌数量是否为最大令牌数量;
在判断结果为是时,确定当前次的第二令牌添加数量为0;
在判断结果为否时,确定当前次的第二令牌添加数量为最大令牌数量与当前读取的令牌桶内的令牌数量的差值。
例如,假设最大令牌数量为50个,假设当前读取的令牌桶内的令牌数量为20个,假设第一令牌添加数量为20个,在这种情形下,第一令牌添加数量与当前读取的令牌桶内的令牌数量之和不大于最大令牌数量,分布式文件系统客户端确定当前次的第二令牌添加数量为20个。
又例如,假设当前读取的令牌桶内的令牌数量为40个,在这种情形下,第一令牌添加数量与当前读取的令牌桶内的令牌数量之和大于最大令牌数量,此时,分布式文件系统客户端进一步判断当前读取的令牌桶内的令牌数量是否为最大令牌数量,由于判断结果为否,所以分布式文件系统客户端确定当前次的第二令牌添加数量为最大令牌数量与当前读取的令牌桶内的令牌数量的差值(即,30个)。在上述步骤s16中,分布式文件系统客户端可以通过以下方式计算等待时长:
计算确定出的令牌数量与读取的令牌数量的差值与第一令牌添加数量的比值;
将比值与时长进行乘积运算,得到等待时长。
例如,假设令牌添加周期的时长为200us,假设第一令牌添加数量为1个,假设确定出的令牌数量与读取的令牌数量的差值为10个,那么,计算出的确定出的令牌数量与读取的令牌数量的差值与第一令牌添加数量的比值为10;将比值与时长进行乘积运算(即,10*200),得到等待时长(即,2毫秒)。
需要说明的是,在执行完上述步骤s15之后,如果分布式文件系统客户端再次接收到了读/写请求,则重新开始执行上述步骤s11。
由以上技术方案可以看出,在本申请实施例中,在提供nas业务的存储节点中的分布式文件系统客户端侧,基于针对读请求和写请求配置的限流类型和限流值,配置对应的令牌桶,利用配置的令牌桶,实现读/写请求的限流,并且,分布式文件系统客户端还按照令牌添加周期不断地在这些令牌桶中添加令牌,以保证限流的正常进行。这种限流方式,无需区分文件协议,配置较为简单,并且无需创建虚拟网卡,可以提高限流精度,再者,也不会影响实体网卡与osd设备之间的通信,提高了存储节点所在集群的稳定性。
基于同一发明构思,本申请还提供了一种数据限流装置,所述装置应用于提供nas业务的存储节点中的分布式文件系统客户端,其结构示意图如图2所示,具体包括:
确定模块21,用于在接收到来自用户设备的读/写请求时,根据所述读/写请求对应的限流类型,确定所述读/写请求所需的令牌数量;
读取模块22,用于读取所述读/写请求对应的令牌桶内的令牌数量;
判断模块23,用于判断读取的令牌数量是否小于确定出的令牌数量;
处理模块24,用于在判断结果为否时,对所述读/写请求进行处理,并在所述令牌桶中删除第一数量个令牌,其中,所述第一数量为读取的令牌数量与确定出的令牌数量的差值;
当到达令牌添加周期时,根据首次在所述令牌桶中添加令牌时确定出的所述令牌桶对应的最大令牌数量和第一令牌添加数量、以及当前读取的所述令牌桶内的令牌数量,确定当前次的第二令牌添加数量,并在所述令牌桶中添加第二数量个令牌,其中,所述最大令牌数量为本客户端根据获取的针对读/写请求配置的限流类型和限流值确定出的,所述第一令牌添加数量为本客户端根据一个令牌添加周期的时长和所述最大令牌数量计算出的,添加后的令牌桶内的令牌数量不大于所述最大令牌数量,且所述第一数量为所述第二令牌添加数量;以及
在判断结果为是时,根据所述第一令牌添加数量、所述时长、和确定出的令牌数量与读取的令牌数量的差值计算等待时长,并在所述等待时长到达后,返回执行读取所述读/写请求对应的令牌桶内的令牌数量的步骤。
优选地,所述针对读/写请求配置的限流类型和限流值为管理者在web服务器提供的限流配置页面上输入的,且由web服务器通知给所述存储节点中的web客户端,由所述web客户端通过proc文件系统通知给本客户端的。
也就是说,所述针对读/写请求配置的限流类型和限流值为本客户端接收的所述存储节点中的web客户端通过proc文件系统发过来的,且所述针对读/写请求配置的限流类型和限流值为管理者在web服务器提供的限流配置页面上输入的,且由web服务器通知给所述web客户端的。
优选地,所述确定模块21,具体用于通过以下方式确定所述读/写请求所需的令牌数量:
若所述读/写请求对应的限流类型为限制带宽,则根据所述读/写请求所请求的读/写数据的大小,确定所述读/写请求所需的令牌数量;
若所述读/写请求对应的限流类型为限制每秒读写次数ipos,则确定所述读/写请求所需的令牌数量为设定令牌数量。
优选地,所述处理模块24,具体用于通过以下方式确定当前次的第二令牌添加数量:
若所述第一令牌添加数量与当前读取的所述令牌桶内的令牌数量之和不大于所述最大令牌数量,则确定当前次的第二令牌添加数量为所述第一令牌添加数量;
若所述第一令牌添加数量与当前读取的所述令牌桶内的令牌数量之和大于所述最大令牌数量,则进一步判断当前读取的所述令牌桶内的令牌数量是否为所述最大令牌数量;
在判断结果为是时,确定当前次的第二令牌添加数量为0;
在判断结果为否时,确定当前次的第二令牌添加数量为所述最大令牌数量与当前读取的所述令牌桶内的令牌数量的差值。
优选地,所述处理模块24,具体用于通过以下方式计算等待时长:
计算确定出的令牌数量与读取的令牌数量的差值与所述第一令牌添加数量的比值;
将所述比值与所述时长进行乘积运算,得到等待时长。
由以上技术方案可以看出,在本申请实施例中,在提供nas业务的存储节点中的分布式文件系统客户端侧,基于针对读请求和写请求配置的限流类型和限流值,配置对应的令牌桶,利用配置的令牌桶,实现读/写请求的限流,并且,分布式文件系统客户端还按照令牌添加周期不断地在这些令牌桶中添加令牌,以保证限流的正常进行。这种限流方式,无需区分文件协议,配置较为简单,并且无需创建虚拟网卡,可以提高限流精度,再者,也不会影响实体网卡与osd设备之间的通信,提高了存储节点所在集群的稳定性。
以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。
1.一种数据限流方法,其特征在于,所述方法应用于提供网络附加存储nas业务的存储节点中的分布式文件系统客户端,所述方法包括:
在接收到来自用户设备的读/写请求时,根据所述读/写请求对应的限流类型,确定所述读/写请求所需的令牌数量;
读取所述读/写请求对应的令牌桶内的令牌数量;
判断读取的令牌数量是否小于确定出的令牌数量;
在判断结果为否时,对所述读/写请求进行处理,并在所述令牌桶中删除第一数量个令牌,其中,所述第一数量为读取的令牌数量与确定出的令牌数量的差值;
当到达令牌添加周期时,根据首次在所述令牌桶中添加令牌时确定出的所述令牌桶对应的最大令牌数量和第一令牌添加数量、以及当前读取的所述令牌桶内的令牌数量,确定当前次的第二令牌添加数量,并在所述令牌桶中添加第二数量个令牌,其中,所述最大令牌数量为本客户端根据获取的针对读/写请求配置的限流类型和限流值确定出的,所述第一令牌添加数量为本客户端根据一个令牌添加周期的时长和所述最大令牌数量计算出的,添加后的令牌桶内的令牌数量不大于所述最大令牌数量,且所述第一数量为所述第二令牌添加数量;
在判断结果为是时,根据所述第一令牌添加数量、所述时长、和确定出的令牌数量与读取的令牌数量的差值计算等待时长,并在所述等待时长到达后,返回执行读取所述读/写请求对应的令牌桶内的令牌数量的步骤。
2.根据权利要求1所述的方法,其特征在于,所述针对读/写请求配置的限流类型和限流值为管理者在web服务器提供的限流配置页面上输入的,且由web服务器通知给所述存储节点中的web客户端,再由所述web客户端通知给本客户端的。
3.根据权利要求1所述的方法,其特征在于,通过以下方式确定所述读/写请求所需的令牌数量:
若所述读/写请求对应的限流类型为限制带宽,则根据所述读/写请求所请求的读/写数据的大小,确定所述读/写请求所需的令牌数量;
若所述读/写请求对应的限流类型为限制每秒读写次数ipos,则确定所述读/写请求所需的令牌数量为设定令牌数量。
4.根据权利要求1所述的方法,其特征在于,通过以下方式确定当前次的第二令牌添加数量:
若所述第一令牌添加数量与当前读取的所述令牌桶内的令牌数量之和不大于所述最大令牌数量,则确定当前次的第二令牌添加数量为所述第一令牌添加数量;
若所述第一令牌添加数量与当前读取的所述令牌桶内的令牌数量之和大于所述最大令牌数量,则进一步判断当前读取的所述令牌桶内的令牌数量是否为所述最大令牌数量;
在判断结果为是时,确定当前次的第二令牌添加数量为0;
在判断结果为否时,确定当前次的第二令牌添加数量为所述最大令牌数量与当前读取的所述令牌桶内的令牌数量的差值。
5.根据权利要求1所述的方法,其特征在于,通过以下方式计算等待时长:
计算确定出的令牌数量与读取的令牌数量的差值与所述第一令牌添加数量的比值;
将所述比值与所述时长进行乘积运算,得到等待时长。
6.一种数据限流装置,其特征在于,所述装置应用于提供网络附加存储nas业务的存储节点中的分布式文件系统客户端,所述装置包括:
确定模块,用于在接收到来自用户设备的读/写请求时,根据所述读/写请求对应的限流类型,确定所述读/写请求所需的令牌数量;
读取模块,用于读取所述读/写请求对应的令牌桶内的令牌数量;
判断模块,用于判断读取的令牌数量是否小于确定出的令牌数量;
处理模块,用于在判断结果为否时,对所述读/写请求进行处理,并在所述令牌桶中删除第一数量个令牌,其中,所述第一数量为读取的令牌数量与确定出的令牌数量的差值;
当到达令牌添加周期时,根据首次在所述令牌桶中添加令牌时确定出的所述令牌桶对应的最大令牌数量和第一令牌添加数量、以及当前读取的所述令牌桶内的令牌数量,确定当前次的第二令牌添加数量,并在所述令牌桶中添加第二数量个令牌,其中,所述最大令牌数量为本客户端根据获取的针对读/写请求配置的限流类型和限流值确定出的,所述第一令牌添加数量为本客户端根据一个令牌添加周期的时长和所述最大令牌数量计算出的,添加后的令牌桶内的令牌数量不大于所述最大令牌数量,且所述第一数量为所述第二令牌添加数量;以及
在判断结果为是时,根据所述第一令牌添加数量、所述时长、和确定出的令牌数量与读取的令牌数量的差值计算等待时长,并在所述这等待时长到达后,返回执行读取所述读/写请求对应的令牌桶内的令牌数量的步骤。
7.根据权利要求6所述的装置,其特征在于,所述针对读/写请求配置的限流类型和限流值为管理者在web服务器提供的限流配置页面上输入的,且由web服务器通知给所述存储节点中的web客户端,再由所述web客户端通过proc文件系统通知给本客户端的。
8.根据权利要求6所述的装置,其特征在于,所述确定模块,具体用于通过以下方式确定所述读/写请求所需的令牌数量:
若所述读/写请求对应的限流类型为限制带宽,则根据所述读/写请求所请求的读/写数据的大小,确定所述读/写请求所需的令牌数量;
若所述读/写请求对应的限流类型为限制每秒读写次数ipos,则确定所述读/写请求所需的令牌数量为设定令牌数量。
9.根据权利要求6所述的装置,其特征在于,所述处理模块,具体用于通过以下方式确定当前次的第二令牌添加数量:
若所述第一令牌添加数量与当前读取的所述令牌桶内的令牌数量之和不大于所述最大令牌数量,则确定当前次的第二令牌添加数量为所述第一令牌添加数量;
若所述第一令牌添加数量与当前读取的所述令牌桶内的令牌数量之和大于所述最大令牌数量,则进一步判断当前读取的所述令牌桶内的令牌数量是否为所述最大令牌数量;
在判断结果为是时,确定当前次的第二令牌添加数量为0;
在判断结果为否时,确定当前次的第二令牌添加数量为所述最大令牌数量与当前读取的所述令牌桶内的令牌数量的差值。
10.根据权利要求6所述的装置,其特征在于,所述处理模块,具体用于通过以下方式计算等待时长:
计算确定出的令牌数量与读取的令牌数量的差值与所述第一令牌添加数量的比值;
将所述比值与所述时长进行乘积运算,得到等待时长。
技术总结