一种分布式多级动态限流方法及系统

文档序号:1819806 发布日期:2021-11-09 浏览:9次 >En<

阅读说明:本技术 一种分布式多级动态限流方法及系统 (Distributed multi-stage dynamic current limiting method and system ) 是由 成树云 闫庆贝 段海波 郭永昌 于 2021-08-05 设计创作,主要内容包括:本发明公开了一种分布式多级动态限流方法及系统,所述方法包括:获得第一初始化指令,获得第一请求指令,对第一令牌池发出获取令牌请求,获得第一请求结果;当第一请求结果为获取到第一令牌时,此时获得第二请求指令,对第二令牌池发出获取令牌请求,获得第二请求结果,当第二请求结果中包含第二令牌时,则完成第二请求结果中携带的请求信息;当检测完成第二请求结果中携带的请求信息时,获得API的实时响应速率,根据实时响应速率控制第二请求结果中包含的第一令牌和第二令牌的归还速率。现有技术无法实现多级流控和阈值动态调整,范围内自适应请求速度控制难的技术问题。(The invention discloses a distributed multi-stage dynamic current limiting method and a system, wherein the method comprises the following steps: obtaining a first initialization instruction, obtaining a first request instruction, sending a token obtaining request to a first token pool, and obtaining a first request result; when the first request result is that the first token is acquired, acquiring a second request instruction at the moment, sending a token acquisition request to a second token pool, acquiring a second request result, and when the second request result contains a second token, completing request information carried in the second request result; and when the request information carried in the second request result is detected, obtaining the real-time response rate of the API, and controlling the return rate of the first token and the second token contained in the second request result according to the real-time response rate. The prior art can not realize the multi-level flow control and the dynamic threshold adjustment, and the self-adaption within the range requests the technical problem of speed control difficulty.)

一种分布式多级动态限流方法及系统

技术领域

本发明涉及流量管理技术领域,尤其涉及一种分布式多级动态限流方法及系统。

背景技术

限流是指限制到达系统的并发请求数,即单位时间内到达系统的请求数,使得系统能够正常的处理部分用户的请求,来保证系统的稳定性,限流不可避免的会造成用户的请求变慢或者被拒的情况,从而会影响用户体验,因此限流是需要在用户体验和系统稳定性之间做平衡的。目前该领域用到的主要限流思想有:计数限流,固定窗口,滑动窗口,漏桶,令牌桶。从单机限流发展到分布式限流,主要用于保证服务稳定性,难点在于在自动化伸缩的情况下,实现动态调整阈值,以及多级限流。

本申请发明人在实现本申请实施例中发明技术方案的过程中,发现上述技术至少存在如下技术问题:

现有技术无法实现多级流控和阈值动态调整,范围内自适应请求速度控制难的技术问题。

发明内容

本申请实施例通过提供一种分布式多级动态限流方法及系统,所述方法包括:获得第一初始化指令,获得第一请求指令,对第一令牌池发出获取令牌请求,获得第一请求结果;当第一请求结果为获取到第一令牌时,此时获得第二请求指令,对第二令牌池发出获取令牌请求,获得第二请求结果,当第二请求结果中包含第二令牌时,则完成第二请求结果中携带的请求信息;当检测完成第二请求结果中携带的请求信息时,获得API的实时响应速率,根据实时响应速率控制第二请求结果中包含的第一令牌和第二令牌的归还速率。解决了现有技术无法实现多级流控和阈值动态调整,范围内自适应请求速度控制难的技术问题。达到了基于Redis(共享存储),实现分布式多级TPS动态控制。通过多级令牌池,根据API的响应速度,自动变更令牌的取、还速率,从而实现多级TPS动态控制,避免内部的业务高并发调用主动引起API服务发生降级、熔断、限流,保护API,避免影响客户正常使用,提高用户体验感,实时自动增加TPS,提升内部使用效率。

鉴于上述问题,本申请实施例提供一种分布式多级动态限流方法及系统。

第一方面,本申请提供了一种分布式多级动态限流方法,其中,所述方法包括:获得第一初始化指令,通过所述第一初始化指令初始化多级令牌池,其中,所述多级令牌池包括第一令牌池和第二令牌池,所述第一令牌池为产品令牌池,所述第二令牌池为API令牌池;获得第一请求指令,根据所述第一请求指令对所述第一令牌池发出获取令牌请求,获得第一请求结果;当所述第一请求结果为获取到第一令牌时,此时获得第二请求指令,根据所述第二请求指令对所述第二令牌池发出获取令牌请求,获得第二请求结果,其中,所述第二请求结果中携带有所述第一令牌;当所述第二请求结果中包含第二令牌时,则完成所述第二请求结果中携带的请求信息;当检测完成所述第二请求结果中携带的请求信息时,获得API的实时响应速率,根据所述实时响应速率控制所述第二请求结果中包含的所述第一令牌和所述第二令牌的归还速率。

另一方面,本申请还提供了一种分布式多级动态限流系统,其中,所述系统包括:第一获得单元,所述第一获得单元用于获得第一初始化指令,通过所述第一初始化指令初始化多级令牌池,其中,所述多级令牌池包括第一令牌池和第二令牌池,所述第一令牌池为产品令牌池,所述第二令牌池为API令牌池;第二获得单元,所述第二获得单元用于获得第一请求指令,根据所述第一请求指令对所述第一令牌池发出获取令牌请求,获得第一请求结果;第三获得单元,所述第三获得单元用于当所述第一请求结果为获取到第一令牌时,此时获得第二请求指令,根据所述第二请求指令对所述第二令牌池发出获取令牌请求,获得第二请求结果,其中,所述第二请求结果中携带有所述第一令牌;第一执行单元,所述第一执行单元用于当所述第二请求结果中包含第二令牌时,则完成所述第二请求结果中携带的请求信息;第四获得单元,所述第四获得单元用于当检测完成所述第二请求结果中携带的请求信息时,获得API的实时响应速率,根据所述实时响应速率控制所述第二请求结果中包含的所述第一令牌和所述第二令牌的归还速率。

另一方面,本申请实施例还提供了一种分布式多级动态限流方法及系统,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,所述处理器执行所述程序时实现上述第一方面所述方法的步骤。

本申请实施例中提供的一个或多个技术方案,至少具有如下技术效果或优点:

本申请实施例提供了一种分布式多级动态限流方法及系统,获得第一初始化指令,通过所述第一初始化指令初始化多级令牌池,其中,所述多级令牌池包括第一令牌池和第二令牌池,所述第一令牌池为产品令牌池,所述第二令牌池为API令牌池;获得第一请求指令,根据所述第一请求指令对所述第一令牌池发出获取令牌请求,获得第一请求结果;当所述第一请求结果为获取到第一令牌时,此时获得第二请求指令,根据所述第二请求指令对所述第二令牌池发出获取令牌请求,获得第二请求结果,其中,所述第二请求结果中携带有所述第一令牌;当所述第二请求结果中包含第二令牌时,则完成所述第二请求结果中携带的请求信息;当检测完成所述第二请求结果中携带的请求信息时,获得API的实时响应速率,根据所述实时响应速率控制所述第二请求结果中包含的所述第一令牌和所述第二令牌的归还速率。解决了现有技术无法实现多级流控和阈值动态调整,范围内自适应请求速度控制难的技术问题。达到了基于Redis(共享存储),实现分布式多级TPS动态控制。通过多级令牌池,根据API的响应速度,自动变更令牌的取、还速率,从而实现多级TPS动态控制,避免内部的业务高并发调用主动引起API服务发生降级、熔断、限流,保护API,避免影响客户正常使用,提高用户体验感,实时自动增加TPS,提升内部使用效率。

上述说明是本申请技术方案的概述,为了能够更清楚了解本申请的技术手段,而可依照说明书的内容予以实施,并且为了让本申请的上述和其它目的、特征和优点能够更明显易懂,以下特举本申请的

具体实施方式

附图说明

图1为本申请实施例一种分布式多级动态限流方法的流程示意图;

图2为本申请实施例一种分布式多级动态限流方法中将第一时间标定结果对应的第一令牌和第二时间标定结果对应的第二令牌归还的流程示意图;

图3为本申请实施例一种分布式多级动态限流方法中通过所述第一初始化指令初始化产品令牌池的流程示意图;

图4为本申请实施例一种分布式多级动态限流方法中获得第一请求结果的流程示意图;

图5为本申请实施例一种分布式多级动态限流系统的结构示意图;

图6为本申请实施例示例性电子设备的结构示意图。

附图标记说明:第一获得单元11,第二获得单元12,第三获得单元13,第一执行单元14,第四获得单元15,电子设备300,存储器301,处理器302,通信接口303,总线架构304。

具体实施方式

本申请实施例通过提供一种分布式多级动态限流方法及系统,解决了现有技术无法实现多级流控和阈值动态调整,范围内自适应请求速度控制难的技术问题。达到了基于Redis(共享存储),实现分布式多级TPS动态控制。通过多级令牌池,根据API的响应速度,自动变更令牌的取、还速率,从而实现多级TPS动态控制,避免内部的业务高并发调用主动引起API服务发生降级、熔断、限流,保护API,避免影响客户正常使用,提高用户体验感,实时自动增加TPS,提升内部使用效率。

下面,将参考附图详细的描述本申请的示例实施例,显然,所描述的实施例仅是本申请的一部分实施例,而不是本申请的全部实施例,应理解,本申请不受这里描述的示例实施例的限制。

申请概述

限流是指限制到达系统的并发请求数,即单位时间内到达系统的请求数,使得系统能够正常的处理部分用户的请求,来保证系统的稳定性,限流不可避免的会造成用户的请求变慢或者被拒的情况,从而会影响用户体验,因此限流是需要在用户体验和系统稳定性之间做平衡的。目前该领域用到的主要限流思想有:计数限流,固定窗口,滑动窗口,漏桶,令牌桶。从单机限流发展到分布式限流,主要用于保证服务稳定性,难点在于在自动化伸缩的情况下,实现动态调整阈值,以及多级限流。

针对上述技术问题,本申请提供的技术方案总体思路如下:

本申请提供了一种分布式多级动态限流方法,所述方法应用于一分布式动态限流管理系统,其中,所述方法包括:获得第一初始化指令,通过所述第一初始化指令初始化多级令牌池,其中,所述多级令牌池包括第一令牌池和第二令牌池,所述第一令牌池为产品令牌池,所述第二令牌池为API令牌池;获得第一请求指令,根据所述第一请求指令对所述第一令牌池发出获取令牌请求,获得第一请求结果;当所述第一请求结果为获取到第一令牌时,此时获得第二请求指令,根据所述第二请求指令对所述第二令牌池发出获取令牌请求,获得第二请求结果,其中,所述第二请求结果中携带有所述第一令牌;当所述第二请求结果中包含第二令牌时,则完成所述第二请求结果中携带的请求信息;当检测完成所述第二请求结果中携带的请求信息时,获得API的实时响应速率,根据所述实时响应速率控制所述第二请求结果中包含的所述第一令牌和所述第二令牌的归还速率。

在介绍了本申请基本原理后,下面将结合说明书附图来具体介绍本申请的各种非限制性的实施方式。

实施例一

如图1所示,本申请实施例提供一种分布式多级动态限流方法,所述方法应用于一分布式动态限流管理系统,其中,所述方法包括:

步骤S100:获得第一初始化指令,通过所述第一初始化指令初始化多级令牌池,其中,所述多级令牌池包括第一令牌池和第二令牌池,所述第一令牌池为产品令牌池,所述第二令牌池为API令牌池;

进一步而言,如图3所示,本申请实施例步骤S100包括:

步骤S110:获得各级设备的TPS值集合;

步骤S120:对所述TPS值集合进行TPS数值比较,获得所述TPS值集合中最小TPS数值对应的第一设备;

步骤S130:判断所述第一设备是否存在对应令牌池;

步骤S140:当所述第一设备不存在所述对应令牌池时,则根据所述第一初始化指令,通过所述第一设备对应的TPS值获得所述第一令牌池。

具体而言,限流是指限制到达系统的并发请求数,即单位时间内到达系统的请求数,使得系统能够正常的处理部分用户的请求,来保证系统的稳定性。所述分布式动态限流管理系统是基于Redis(共享存储),实现分布式多级TPS动态控制。所述TPS(TransactionsPer Second),是指每秒传输的事物处理个数,即服务器每秒处理的事务数。TPS包括一条消息入和一条消息出,加上一次用户数据库访问。所述API(Application ProgrammingInterface,应用程序接口)是一些预先定义的接口(如函数、HTTP接口),或指软件系统不同组成部分衔接的约定。用来提供应用程序与开发人员基于某软件或硬件得以访问的一组例程,而又无需访问源码,或理解内部工作机制的细节。所述初始化是指令牌池控制流入令牌速度的前提是需要提前往池内放入足够的令牌,以防请求的速度大于放入令牌的速度,造成一部分请求因为池内没有令牌而被拒绝。

在每批任务中,如果包含多个产品,获得每个产品的TPS值,且各产品的TPS值不尽相同,在这种情况下,合理地选取TPS值就成了重中之重。选择TPS值最高或者中间值的产品时,会造成TPS较低的产品请求变慢或是被拒,从而影响用户体验感。因此我们需要将产品的TPS值进行比较,选取TPS值最低的产品为依据。对于TPS值最低的产品进行判断,看其对应的令牌池是否存在,令牌池虽然可以动态控制流入令牌的速度,解决集中流量冲击的问题,但是令牌池需要预热,也就是需要提前往池内放入足够的令牌,因此,当TPS值最低的产品不存在所述对应令牌池时,则根据所述第一初始化指令,通过所述最低的TPS值获得所述第一令牌池,从而避免请求被拒,导致误处理。

步骤S200:获得第一请求指令,根据所述第一请求指令对所述第一令牌池发出获取令牌请求,获得第一请求结果;

步骤S300:当所述第一请求结果为获取到第一令牌时,此时获得第二请求指令,根据所述第二请求指令对所述第二令牌池发出获取令牌请求,获得第二请求结果,其中,所述第二请求结果中携带有所述第一令牌;

进一步而言,如图4所示,本申请实施例步骤S200包括:

步骤S210:根据所述第一请求指令,获得第一查询指令;

步骤S220:通过所述第一查询指令查询所述第一令牌池的历史时间阈值内的请求数量,获得第一查询结果;

步骤S230:判断所述第一查询结果是否满足预设数量阈值,当所述第一查询结果满足预设数量阈值时,则所述第一请求结果为不允许获取所述第一令牌,将所述第一请求指令携带的请求信息导入下一请求循环。

具体而言,本申请实施例使用两级令牌池,第一级是产品级别,因为每个产品本身(产品既服务)有一个自身支持的TPS值,第二级是API级别,API的响应速度,可以自动变更令牌的取、还速率。因为是两级令牌池,所以必须先从第一级令牌池取得令牌后,才能继续获取第二级令牌池。所述历史时间阈值内的请求数量是指在单位时间内,对第一令牌池的令牌请求数量,是根据历史时间阈值内的请求数量来确定的。所述预设数量阈值是指请求来了会先向池内索要令牌,令牌数量超过令牌池的限制会自动丢弃,令牌池中所能进入的最多令牌数量被称为数量阈值。请求索要成功则通过被处理,获得令牌,反之拒绝,不能得到令牌。所述一个循环是指:依次从一、二级令牌池中获取令牌,用完需要分别归还令牌。请求是否成功的关键在于所述第一查询结果是否满足预设数量阈值,当所述第一查询结果满足预设数量阈值时,则表明请求数量大于池内令牌数量,请求会被拒绝,则所述第一请求结果为不允许获取所述第一令牌,则进入下一个循环,直至第一级取到了令牌,并标注第一令牌的获取时间,再取第二级。取到后才能通过请求,否则归还第一级令牌,继续下一个循环,直到依次取到一、二两个级别令牌后才可以通过请求,因此所述第二请求结果中携带有所述第一令牌,达到了多级TPS动态限制的效果,提升用户体验感。

步骤S400:当所述第二请求结果中包含第二令牌时,则完成所述第二请求结果中携带的请求信息;

步骤S500:当检测完成所述第二请求结果中携带的请求信息时,获得API的实时响应速率,根据所述实时响应速率控制所述第二请求结果中包含的所述第一令牌和所述第二令牌的归还速率。

具体而言,系统首先对第一级令牌进行获取,并标注第一令牌的获取时间,再取第二级,直到依次取到一、二两个级别令牌后才可以通过请求,则表明第二请求完成,并对第二令牌的获取时间进行标记。根据第一、二请求获取令牌的时间,计算出单位时间内API的响应速率,并对令牌进行归还。应正常归还两个级的令牌,以便其他任务可以拿到,这样,当API性能好时,请求速度加快,性能下降时,自动放慢请求速度,从而降低并发。

进一步而言,如图2所示,本申请实施例步骤S600包括:

步骤S610:获得第一时间标定指令,根据所述第一时间标定指令对所述第一令牌的进行时间标定,并将第一时间标定结果记录至所述第一令牌;

步骤S620:获得第二时间标定指令,通过所述第二时间标定指令对所述第二令牌进行时间标定,并将第二时间标定结果记录至所述第二令牌;

步骤S630:获得第一预设时长阈值,当所述第一时间标定结果和/或第二时间标定结果满足所述第一预设时长阈值时,则将所述第一时间标定结果对应的所述第一令牌和所述第二时间标定结果对应的所述第二令牌归还。

具体而言,所述时间标定就是对第一令牌的获取时间、第二令牌的获取时间进行标注,分别记为第一标注结果、第二标注结果,并将其标注结果保存至令牌中,以方便计算其API的实时响应速率,从而控制第一令牌和第二令牌的归还速率。所述第一预设时长阈值是指已经取走的第一令牌和第二令牌,对取走的时间进行标注,通过历史任务一个循环的时间差,提取最小值,使其成为时长阈值,以便其他任务可以拿到令牌。若所述第一时间标定结果和/或第二时间标定结果满足所述第一预设时长阈值时,可以不归还令牌;若所述第一时间标定结果和/或第二时间标定结果不满足所述第一预设时长阈值时,则需要建立补偿机制:通过定时任务,检测取走未归还的令牌,发现超时未归还的,自动从取走的令牌池中挪到待取的令牌容器池中。这样,就可以在API响应慢的时候,自动放慢归还令牌的速度,从而降低并发。

进一步而言,本申请实施例步骤S700包括:

步骤S710:当所述第二请求结果为未获得所述第二令牌时,此时获得第一归还指令;

步骤S720:通过所述第一归还指令,将所述第二请求结果中的所述第一令牌归还至所述第一令牌池中,并将所述第二请求结果中的请求信息导入下一请求循环。

具体而言,系统先从一级令牌池中获取令牌,如果没有令牌,则进入下一个循环,第一级取到了令牌,再取第二级令牌。和第一请求相同,第二请求从第二级令牌池获取令牌,如果所述第二请求结果为获得所述第二令牌时,则表明通过请求;如果所述第二请求结果为未获得所述第二令牌时,应通过第一归还指令,将已经获得的第一级令牌归还第一级令牌池,进而继续下一请求循环。所述下一请求循环是指重新获得第一请求指令,对第一级令牌进行获取,成功获取第一级令牌后,根据第二请求对第二令牌进行获取,直到依次取到一、二两个级别令牌。避免内部的业务高并发调用,引起API服务发生降级、熔断、限流,而影响客户体验感。

进一步而言,本申请实施例步骤S800包括:

步骤S810:当检测完成所述第二请求结果中携带的请求信息时,获得第一归还指令;

步骤S820:通过所述第一归还指令归还所述第二请求结果中携带的所述第一令牌和所述第二令牌。

进一步而言,本申请实施例步骤S900包括:

步骤S910:根据所述第一归还指令,将所述第二请求结果中携带的所述第一令牌归还至所述第一令牌池,将所述第二请求结果中携带的所述第二令牌归还至所述第二令牌池。

具体而言,当系统检测出已经获取到第二令牌时,为了使其他任务的请求不会被拒绝,也可以拿到令牌,必须要正常归还两个级的令牌。举例说明,如果令牌池是每10s放进去一个令牌,其他任务启动时,令牌池的令牌数量不够,那么当10s内同时来的请求数量比令牌数量多,那么就会有请求被拒绝,这可能造成很多误处理。因此,需通过第一归还指令对第一令牌和第二令牌进行归还,分别将第二请求结果中携带的第一令牌、第二令牌归还至所述第一令牌池、所述第二令牌池。为避免单位时间请求超过TPS预设值,在取用令牌前,需要查询对应令牌池取用记录中往前推单位时间的请求数,如果请求数达到阈值,则不允许获取令牌,进入下一个循环,否则可以从一级令牌池开始取用令牌。达到了多级TPS动态限制的效果,避免内部的业务高并发调用引起API服务发生降级、熔断、限流,而影响客户调用、体验、甚至投诉。

综上所述,本申请实施例所提供的一种分布式多级动态限流方法,具有如下技术效果:

本申请提供了一种分布式多级动态限流方法,所述方法应用于一分布式动态限流管理系统,其中,所述方法包括:获得第一初始化指令,通过所述第一初始化指令初始化多级令牌池,其中,所述多级令牌池包括第一令牌池和第二令牌池,所述第一令牌池为产品令牌池,所述第二令牌池为API令牌池;获得第一请求指令,根据所述第一请求指令对所述第一令牌池发出获取令牌请求,获得第一请求结果;当所述第一请求结果为获取到第一令牌时,此时获得第二请求指令,根据所述第二请求指令对所述第二令牌池发出获取令牌请求,获得第二请求结果,其中,所述第二请求结果中携带有所述第一令牌;当所述第二请求结果中包含第二令牌时,则完成所述第二请求结果中携带的请求信息;当检测完成所述第二请求结果中携带的请求信息时,获得API的实时响应速率,根据所述实时响应速率控制所述第二请求结果中包含的所述第一令牌和所述第二令牌的归还速率。解决现有技术无法实现多级流控和阈值动态调整,范围内自适应请求速度控制难的技术问题。达到了基于Redis(共享存储),实现分布式多级TPS动态控制。通过多级令牌池,根据API的响应速度,自动变更令牌的取、还速率,从而实现多级TPS动态控制,避免内部的业务高并发调用主动引起API服务发生降级、熔断、限流,保护API,避免影响客户正常使用,提高用户体验感,实时自动增加TPS,提升内部使用效率。

实施例二

基于与前述实施例中一种分布式多级动态限流方法,同样发明构思,本发明还提供了一种分布式多级动态限流系统,如图5所示,所述系统包括:

第一获得单元11,所述第一获得单元11用于获得第一初始化指令,通过所述第一初始化指令初始化多级令牌池,其中,所述多级令牌池包括第一令牌池和第二令牌池,所述第一令牌池为产品令牌池,所述第二令牌池为API令牌池;

第二获得单元12,所述第二获得单元12用于获得第一请求指令,根据所述第一请求指令对所述第一令牌池发出获取令牌请求,获得第一请求结果;

第三获得单元13,所述第三获得单元13用于当所述第一请求结果为获取到第一令牌时,此时获得第二请求指令,根据所述第二请求指令对所述第二令牌池发出获取令牌请求,获得第二请求结果,其中,所述第二请求结果中携带有所述第一令牌;

第一执行单元14,所述第一执行单元14用于当所述第二请求结果中包含第二令牌时,则完成所述第二请求结果中携带的请求信息;

第四获得单元15,所述第四获得单元15用于当检测完成所述第二请求结果中携带的请求信息时,获得API的实时响应速率,根据所述实时响应速率控制所述第二请求结果中包含的所述第一令牌和所述第二令牌的归还速率。

进一步的,所述系统还包括:

第五获得单元,所述第五获得单元用于获得第一时间标定指令,根据所述第一时间标定指令对所述第一令牌的进行时间标定,并将第一时间标定结果记录至所述第一令牌;

第六获得单元,所述第六获得单元用于获得第二时间标定指令,通过所述第二时间标定指令对所述第二令牌进行时间标定,并将第二时间标定结果记录至所述第二令牌;

第七获得单元,所述第七获得单元用于获得第一预设时长阈值,当所述第一时间标定结果和/或第二时间标定结果满足所述第一预设时长阈值时,则将所述第一时间标定结果对应的所述第一令牌和所述第二时间标定结果对应的所述第二令牌归还。

进一步的,所述系统还包括:

第八获得单元,所述第八获得单元用于获得各级设备的TPS值集合;

第九获得单元,所述第九获得单元用于对所述TPS值集合进行TPS数值比较,获得所述TPS值集合中最小TPS数值对应的第一设备;

第一判断单元,所述第一判断单元用于判断所述第一设备是否存在对应令牌池;

第二执行单元,所述第二执行单元用于当所述第一设备不存在所述对应令牌池时,则根据所述第一初始化指令,通过所述第一设备对应的TPS值获得所述第一令牌池。

进一步的,所述系统还包括:

第十获得单元,所述第十获得单元用于根据所述第一请求指令,获得第一查询指令;

第十一获得单元,所述第十一获得单元用于通过所述第一查询指令查询所述第一令牌池的历史时间阈值内的请求数量,获得第一查询结果;

第二判断单元,所述第二判断单元用于判断所述第一查询结果是否满足预设数量阈值,当所述第一查询结果满足预设数量阈值时,则所述第一请求结果为不允许获取所述第一令牌,将所述第一请求指令携带的请求信息导入下一请求循环。

进一步的,所述系统还包括:

第十二获得单元,所述第十二获得单元用于当所述第二请求结果为未获得所述第二令牌时,此时获得第一归还指令;

第三执行单元,所述第三执行单元用于通过所述第一归还指令,将所述第二请求结果中的所述第一令牌归还至所述第一令牌池中,并将所述第二请求结果中的请求信息导入下一请求循环。

进一步的,所述系统还包括:

第十三获得单元,所述第十三获得单元用于当检测完成所述第二请求结果中携带的请求信息时,获得第一归还指令;

第四执行单元,所述第四执行单元用于通过所述第一归还指令归还所述第二请求结果中携带的所述第一令牌和所述第二令牌。

进一步的,所述系统还包括:

第五执行单元,所述第五执行单元用于根据所述第一归还指令,将所述第二请求结果中携带的所述第一令牌归还至所述第一令牌池,将所述第二请求结果中携带的所述第二令牌归还至所述第二令牌池。

示例性电子设备

下面参考图6来描述本申请实施例的电子设备。

基于与前述实施例中一种分布式多级动态限流方法相同的发明构思,本申请实施例还提供了一种分布式多级动态限流管理系统,包括:处理器,所述处理器与存储器耦合,所述存储器用于存储程序,当所述程序被所述处理器执行时,使得系统以执行第一方面任一项所述的方法。

该电子设备300包括:处理器302、通信接口303、存储器301。可选的,电子设备300还可以包括总线架构304。其中,通信接口303、处理器302以及存储器301可以通过总线架构304相互连接;总线架构304可以是外设部件互连标总线或扩展工业标准结构总线等。所述总线架构304可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。

处理器302可以是一个CPU,微处理器,ASIC,或一个或多个用于控制本申请方案程序执行的集成电路。通信接口303,使用任何收发器一类的装置,用于与其他设备或通信网络通信,如以太网,无线接入网,无线局域网,有线接入网等。存储器301可以是ROM或可存储静态信息和指令的其他类型的静态存储设备,RAM或者可存储信息和指令的其他类型的动态存储设备,也可以是电可擦可编程只读存储器、只读光盘或其他光盘存储、光碟存储、磁盘存储介质或者其他磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。存储器可以是独立存在,通过总线架构304与处理器相连接。存储器也可以和处理器集成在一起。

其中,存储器301用于存储执行本申请方案的计算机执行指令,并由处理器302来控制执行。处理器302用于执行存储器301中存储的计算机执行指令,从而实现本申请上述实施例提供的一种分布式多级动态限流方法。

可选的,本申请实施例中的计算机执行指令也可以称之为应用程序代码,本申请实施例对此不作具体限定。

本申请实施例解决了现有技术无法实现多级流控和阈值动态调整,范围内自适应请求速度控制难的技术问题。达到了基于Redis(共享存储),实现分布式多级TPS动态控制。通过多级令牌池,根据API的响应速度,自动变更令牌的取、还速率,从而实现多级TPS动态控制,避免内部的业务高并发调用主动引起API服务发生降级、熔断、限流,保护API,避免影响客户正常使用,提高用户体验感,实时自动增加TPS,提升内部使用效率。

本领域普通技术人员可以理解:本申请中涉及的第一、第二等各种数字编号仅为描述方便进行的区分,并不用来限制本申请实施例的范围,也不表示先后顺序。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。“至少一个”是指一个或者多个。至少两个是指两个或者多个。“至少一个”、“任意一个”或其类似表达,是指的这些项中的任意组合,包括单项(个)或复数项(个)的任意组合。例如,a,b,或c中的至少一项(个、种),可以表示:a,b,c,a-b,a-c,b-c,或a-b-c,其中a,b,c可以是单个,也可以是多个。

在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线或无线方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包括一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质、光介质、或者半导体介质等。

本申请实施例中所描述的各种说明性的逻辑单元和电路可以通过通用处理器,数字信号处理器,专用集成电路(ASIC),现场可编程门阵列(FPGA)或其它可编程逻辑装置,离散门或晶体管逻辑,离散硬件部件,或上述任何组合的设计来实现或操作所描述的功能。通用处理器可以为微处理器,可选地,该通用处理器也可以为任何传统的处理器、控制器、微控制器或状态机。处理器也可以通过计算装置的组合来实现,例如数字信号处理器和微处理器,多个微处理器,一个或多个微处理器联合一个数字信号处理器核,或任何其它类似的配置来实现。

本申请实施例中所描述的方法或算法的步骤可以直接嵌入硬件、处理器执行的软件单元、或者这两者的结合。软件单元可以存储于RAM存储器、闪存、ROM存储器、EPROM存储器、EEPROM存储器、寄存器、硬盘、可移动磁盘、CD-ROM或本领域中其它任意形式的存储媒介中。示例性地,存储媒介可以与处理器连接,以使得处理器可以从存储媒介中读取信息,并可以向存储媒介存写信息。可选地,存储媒介还可以集成到处理器中。处理器和存储媒介可以设置于ASIC中,ASIC可以设置于终端中。可选地,处理器和存储媒介也可以设置于终端中的不同的部件中。这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

尽管结合具体特征及其实施例对本申请进行了描述,显而易见的,在不脱离本申请的精神和范围的情况下,可对其进行各种修改和组合。

相应地,本说明书和附图仅仅是所附权利要求所界定的本申请的示例性说明,且视为已覆盖本申请范围内的任意和所有修改、变化、组合或等同物。显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请意图包括这些改动和变型在内。

16页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:一种基于多网关接入的分布式组网系统及方法

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!