CN112671658B - 数据限流方法、组件及工具包 - Google Patents
数据限流方法、组件及工具包 Download PDFInfo
- Publication number
- CN112671658B CN112671658B CN202011492531.9A CN202011492531A CN112671658B CN 112671658 B CN112671658 B CN 112671658B CN 202011492531 A CN202011492531 A CN 202011492531A CN 112671658 B CN112671658 B CN 112671658B
- Authority
- CN
- China
- Prior art keywords
- current limiting
- current
- limiting
- service
- processing rule
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Landscapes
- Telephonic Communication Services (AREA)
Abstract
本说明书实施例公开了一种数据限流方法、组件及工具包,该工具包将配置方式模块化,可支持后续灵活扩展升级的组织方式,且对集成使用方影响很小。同时,还进一步给出了限流处理中满足接口对应限流规则快速查询的实现方法,提高数据查询效率,进而提高限流处理效率。并进一步给出了单机限流以及分布式限流两种模式下的限流工具包,以更加适应业务需要。
Description
技术领域
本说明书涉及数据处理技术领域,特别地,涉及一种数据限流方法、组件及工具包。
背景技术
目前大型企业通常拥有多个业务应用系统,为了降低系统维护成本,很多企业通过将各应用系统公共的功能代码抽离出来,形成一个独立的项目,部署为公共服务平台。各业务应用只需要实现自己特有的功能,对于公共的功能,通过远程调用公共服务平台提供的接口来实现。
对于公共服务平台来说,接口请求则来自多种不同的业务应用系统。因各应用系统自身的处理逻辑以及业务量的不同,使得在调用的过程中容易出现多种问题。例如,业务应用系统的调用代码编写的问题、不正确地使用服务(比如频繁启动批量任务来调用接口获取数据)以及业务上面的突发流量(比如促销活动)等,可能导致来自某个业务应用系统的接口请求数突增,过度争用服务资源,从而导致其他业务应用系统的接口请求响应时间大幅增加,无法及时得到响应,甚至出现超时。
目前通常通过进一步开发接口限流功能来解决上述问题。现有的限流逻辑通常配置在各业务应用系统中。在业务应用启动的时候,系统将限流规则,按照事先定义的语法,解析并加载到内存中,以进行是否限流的判定。但采用由业务应用系统分配配置以及维护的方式,增加了各业务应用系统的维护成本,同时还存在测试以及升级维护较为复杂繁琐的问题。因此,目前亟需一种更加简单高效的数据限流方法。
发明内容
本说明书实施例的目的在于提供一种数据限流方法、组件及工具包,可以大幅提高数据限流处理效率及简便性。
本说明书提供一种数据限流方法、组件及工具包是包括如下方式实现的:
一种数据限流方法,应用于调用方的限流组件,所述限流组件由所述调用方基于预先构建的限流配置工具包所生成;所述方法包括:获取调用方向服务方发送的数据处理请求中的目标服务接口参数;所述目标服务接口参数用于确定所述数据处理请求所需调用的目标服务;调用所述目标服务接口参数所对应的限流处理规则;利用所述限流处理规则对所述数据处理请求进行限流分析,以使所述调用方基于所述限流分析结果确定是否发送所述数据处理请求。
本说明书提供的所述方法的另一些实施例中,所述限流配置工具包包括限流规则配置文件;所述限流规则配置文件至少包括服务接口参数、限流阈值、时间粒度中的一种;相应的,所述调用方基于所述限流规则配置文件生成各服务接口参数的限流处理规则。
本说明书提供的所述方法的另一些实施例中,所述限流配置工具包还包括至少一种限流算法组件;所述调用方基于依赖注入的方式在限流组件中配置各服务接口参数所对应的限流算法组件的接口参数;相应的,所述对所述数据处理请求进行限流分析,包括:基于所述目标服务接口参数所对应的限流算法组件的接口参数,调用相应的限流算法组件对所述数据处理请求进行限流分析。
本说明书提供的所述方法的另一些实施例中,所述调用所述服务接口参数所对应的限流处理规则,包括:基于预先构建的限流处理规则查询结构以及所述服务接口参数中的资源定位信息,调用所述目标服务接口参数所对应的限流处理规则;其中,所述限流处理规则查询结构基于前缀树算法构建,所述限流处理规则查询结构中的各节点对应资源定位信息中用于表征子目录的字段。
另一方面,本说明书实施例还提供一种数据限流方法,应用于服务方的限流组件,所述限流组件由所述服务方基于预先构建的限流配置工具包所生成;所述方法包括:获取数据处理请求中的当前调用方标识;所述当前调用方标识是指对发送所述数据处理请求的调用方进行标识的信息;调用所述当前调用方标识所对应的限流处理规则;利用所述限流处理规则对所述数据处理请求进行限流分析,以使所述服务方基于所述限流分析结果确定是否对所述数据处理请求进行处理。
本说明书提供的所述方法的另一些实施例中,所述限流配置工具包包括限流规则配置文件;所述限流规则配置文件至少包括调用方标识、限流阈值、时间粒度中的一种;相应的,所述调用方基于所述限流规则配置文件生成各调用方标识的限流处理规则。
本说明书提供的所述方法的另一些实施例中,所述限流配置工具包还包括至少一种限流算法组件;所述服务方基于依赖注入的方式在限流组件中配置各调用方标识所对应的限流算法组件的接口参数;相应的,所述对所述数据处理请求进行限流分析,包括:基于所述当前调用方标识所对应的限流算法组件的接口参数,调用相应的限流算法组件对所述数据处理请求进行限流分析。
本说明书提供的所述方法的另一些实施例中,调用所述调用方标识所对应的限流处理规则,包括:基于预先构建的限流处理规则查询结构以及所述当前调用方标识中的资源定位信息调用所述当前调用方标识所对应的限流处理规则;其中,所述限流处理规则查询结构基于前缀树算法构建,所述限流处理规则查询结构中的各节点对应资源定位信息中用于表征子目录的字段。
本说明书提供的所述方法的另一些实施例中,在所述服务方为集成式系统的情况下,所述限流组件基于服务实例进行布设,以对相应的服务实例的处理请求进行限流处理。
本说明书提供的所述方法的另一些实施例中,在所述服务方为分布式系统的情况下,所述限流组件采用分布式限流方式,所述限流组件的限流计数模块利用Redis中心计数器构建,以对所述服务方的处理请求进行限流。
本说明书提供的所述方法的另一些实施例中,所述限流计数模块基于Redis单线程工作模式以及Lua脚本构建。
本说明书提供的所述方法的另一些实施例中,基于历史Redis访问时间分布数据以及服务方的服务接口可容忍的限流延迟时间确定所述限流计数模块的Redis访问超时判定阈值。
另一方面,本说明书实施例还提供一种限流组件,应用于调用方,所述限流组件由所述调用方基于预先构建的限流配置工具包所生成;所述限流组件包括:接口参数获取模块,用于获取调用方向服务方发送的数据处理请求中的目标服务接口参数;所述目标服务接口参数用于确定所述数据处理请求所需调用的目标服务;处理规则调用模块,用于调用所述目标服务接口参数所对应的限流处理规则;限流分析模块,用于利用所述限流处理规则对所述数据处理请求进行限流分析,以使所述调用方基于所述限流分析结果确定是否发送所述数据处理请求。
另一方面,本说明书实施例还提供一种限流组件,应用于服务方,所述限流组件由所述服务方基于预先构建的限流配置工具包所生成;所述限流组件包括:标识获取模块,用于获取数据处理请求中的当前调用方标识;所述当前调用方标识是指对发送所述数据处理请求的调用方进行标识的信息;处理规则调用模块,用于调用所述当前调用方标识所对应的限流处理规则;限流分析模块,用于利用所述限流处理规则对所述数据处理请求进行限流分析,以使所述服务方基于所述限流分析结果确定是否对所述数据处理请求进行处理。
另一方面,本说明书实施例还提供一种限流配置工具包,所述工具包包括限流规则配置文件以及至少一种限流算法组件;所述限流规则配置文件至少包括服务接口参数、调用方标识、限流阈值、时间粒度中的一种。
本说明书一个或多个实施例提供的数据限流方法、组件及工具包,可以通过预先构建通用的限流SDK,使服务方或调用方基于限流SDK进行限流处理配置,降低调用方以及服务方的系统性能维护成本,同时,还可以提高限流处理的简便性,提高各方的系统处理性能。
附图说明
为了更清楚地说明本说明书实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。在附图中:
图1为本说明书提供的一种数据限流方法实施例的流程示意图;
图2为本说明书提供的另一种数据限流方法实施例的流程示意图;
图3为本说明书提供的一种限流组件的模块结构示意图;
图4为本说明书提供的另一种限流组件的模块结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本说明书中的技术方案,下面将结合本说明书一个或多个实施例中的附图,对本说明书一个或多个实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是说明书一部分实施例,而不是全部的实施例。基于说明书一个或多个实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本说明书实施例方案保护的范围。
一些实施场景中,对于部分通用的或者多个业务应用所共用的功能或者资源,可以布设至公共平台中,相应的,该公共平台可以向业务应用提供相应的功能或者资源等服务,也可以将该公共平台描述为服务方。服务方可以针对不同的功能或资源等服务对外提供服务接口,以使业务应用基于相应的服务接口,调用相应的功能或资源等。相应的,可以将各业务应用描述为调用方。
因各调用方自身的处理逻辑以及业务量的不同,可能会出现来自某个调用方的服务接口请求数突增,过度争用服务资源,从而导致其他调用方的服务接口请求响应时间大幅增加,无法及时得到响应,甚至出现超时等现象。相应的,本说明书实施例通过预先构建通用的限流配置工具包(限流SDK),并将限流SDK提供给服务方或调用方,以使服务方或调用方基于该限流SDK进行服务接口请求的限流处理配置,构建得到限流组件。相应的,所述限流组件中可以包括各服务接口以及调用方所对应的限流处理规则。然后,服务方或调用方可以利用该限流组件,进行接口请求限流分析,以在触发限流条件时,启动相应的服务接口限流处理。通过预先构建通用的限流SDK,使服务方或调用方基于限流SDK进行限流处理配置,可以降低调用方以及服务方的系统性能维护成本,同时,还可以提高限流处理的简便性,提高各方的系统处理性能。
一些实施例中,所述限流SDK可以包括限流规则配置文件。所述限流规则配置文件可以包括预先基于应用系统标识、服务接口参数、限流阈值、时间粒度中一种或多种所构建的限流处理语法格式。通过统一定义限流处理规则的语法格式,可以提高限流组件配置的简便性。下文给出了一种限流规则配置文件的举例:
其中,unit表示限流时间粒度,默认情况下是1秒;limit表示在unit时间粒度内最大允许的请求次数;appid表示调用方标识,api表示服务接口参数。如图2中的部分内容所示,调用方app-1对服务接口/v1/user每分钟的最大请求次数不能超过100次。
对于限流时间粒度的选择,过大的时间粒度会达不到限流的效果。例如,限制1秒钟内不超过1000次,限制10毫秒内不超过10次,或者限制1分钟内不超过6万次,这三种限流规则看起来是等价的,但如果6万次请求集中在1秒中到达,限制1分钟不超过6万次,就起不到保护的作用。即接口访问在细时间粒度上随机性很大,过小的时间粒度,亦会误杀很多本不应该限流的请求。因此,时间粒度的选择对于限流操作而言是非常重要的,进而对系统的性能以及数据处理量的平衡也是非常重要的。本说明书实施例通过进一步考虑时间粒度作为限流处理规则的因素之一,可以在保证服务方的数据处理能力的同时,进一步保证服务方的系统性能。
所述限流SDK中可以进一步封装有至少一种限流算法。限流算法如可以为固定时间窗口限流算法、滑动时间窗口限流算法、令牌桶限流算法、漏斗桶限流算法等。服务方或调用方可以根据业务场景的需要选择限流算法。服务方或调用方在限流组件配置时,可以通过如依赖注入的方式使用限流SDK中的限流算法。通过依赖注入机制,只需要通过简单的配置,无需任何代码即可指定目标需要的限流算法,完成自身的业务逻辑,且不需要关心具体的限流算法来自何处,由那个模块实现。
以spring开发环境举例说明基于依赖注入的实现方式。如可以采用基于xml的配置方式实现依赖注入,可以基于默认配置,在applicationContext.xml中或者其他springxml配置文件中,添加配置,指定实现类。例如,<bean id="rateLimitAlg"class="com.common.ratelimiter.FixedTimeWinRateLimitAlg"/>。
或者,也可以基于注解的配置方式,通过使用@Configuration和@Bean注解的组合为Spring提供足够的信息来执行依赖注入,定义需要注入的bean。当然,也可以采用其他的方式利用工具包中的限流算法。基于注解的配置方式伪代码举例如下,
相应的,一些实施例中,工具包中的各限流算法的执行程序可以被预先封装成限流算法组件,并对外提供算法组件接口。所述调用方或服务方可以基于依赖注入的方式在限流组件中配置各服务接口参数或调用方标识所对应的限流算法组件的接口参数。相应的,调用方或服务方在限流处理时,可以获取目标服务接口参数或当前调用方标识所对应的限流算法组件的接口参数,调用相应的限流算法组件对数据处理请求进行限流分析。通过上述方式,可以避免调用方或服务方再进行限流算法构建,只需根据需要选择相应的限流算法,并配置相应的算法组件接口参数即可,从而可以大幅提高限流组件配置的简便性以及灵活性。
限流SDK需要集成到服务方或调用方中使用,可以基于服务方或调用方的系统架构构建相应的限流配置工具包,以做到低侵入松耦合,易于调用,方便升级维护。例如,大部分Java程序员已经习惯了Spring的配置方式,工具包构建时也可以延续Spring的配置方式,支持XML、YAML、Properties等几种配置文件格式。同时,可以借鉴Spring的约定优于配置设计原则,使得服务方或调用方只需要将配置文件按照约定来命名,并且放置到约定的路径下,限流SDK就能按照约定自动查找和加载配置文件。除了本地文件配置之外,限流SDK还可以支持灵活的数据源配置,比如Zookeeper或者企业级配置中心。
一些实施例中,限流SDK的关键结构可以如下所示:
com.common.ratelimiter
--RateLimiter
com.common.ratelimiter.rule
--ApiLimit
--RuleConfig
--AppRuleConfig
--RateLimitRule
--TrieRateLimitRule
com.common.ratelimiter.rule.parser
--RuleConfigParser
--YamlRuleConfigParser
--JsonRuleConfigParser
com.common.ratelimiter.rule.datasource
--RuleConfigSource
--FileRuleConfigSource
com.common.ratelimiter.alg
--RateLimitAlg
--FixedTimeWinRateLimitAlg
其中,RateLimiter类用来串联整个限流流程,提供服务方或调用方配置限流组件直接使用的限流SDK接口。在限流组件配置过程中,可以先利用RateLimiter类读取限流规则配置文件,映射为内存中的Java对象(RuleConfig)。RuleConfig类嵌套了另外两个类AppRuleConfig和ApiLimit。这三个类跟限流规则配置文件的三层嵌套结构完全对应,从而可以实现读取限流规则配置文件,映射为Java对象并保存在内存中。然后,可以将这个Java对象构建成一个可以支持快速查询的数据结构(RateLimitRule)。
一些实施例中,可以将限流规则组织成可以支持按照URL(资源定位信息)快速查询的数据结构。考虑到URL的重复度比较高,且需要按照前缀来匹配,可以选择使用前缀树数据结构。例如,针对基于HTTP接口的限流场景,基于前缀树所构建的限流规则查询结构的树节点可以为存储接口被“/”分割之后的子目录(比如“/user/name”被分割为“user”“name”两个子目录)。因服务接口参数通常不会经常变动,可以把每个节点的子节点们,组织成有序数组这种数据结构。在匹配的过程中,即可以利用二分查找算法,决定从一个节点应该跳到哪一个子节点,进而确定出相应服务接口所对应的限流规则。相应的,RateLimitRule类定义统一查询接口,TrieRateLimitRule类是查询接口的基于前缀树数据结构实现类。
相应的,一些实施例中,限流组件在限流处理时,可以基于预先构建的限流处理规则查询结构以及所述服务接口参数中的资源定位信息,调用服务接口参数所对应的限流处理规则。其中,所述限流处理规则查询结构可以基于前缀树算法构建,所述限流处理规则查询结构中的各节点可以对应资源定位信息中用于表征子目录的字段。
剩余的三个包,即parser、datasource、alg分别对应配置文件解析、数据源与限流算法。其中类RuleConfigParser,RuleConfigSource,RateLimitAlg定义抽象接口,包内其它类是具体实现类。例如,类YamlRuleConfigParser是Yaml格式配置文件解析类,类JsonRuleConfigParser是Json格式配置文件解析类。使用者在使用SDK的时候,在不需要改动框架代码的情况下,可以自行开发SPI插件,替换掉SDK里面的某些实现。方式比较简单,只需要将SPI插件,放到/META-INF/services目录下即可,com.common.ratelimiter.rule.parser.RuleConfigParser。文件的内容即为用户自定义的插件类的路径,比如,com.custom.ratelimiter.rule.parser.RuleConfigParser。
本说明书的一些实施例中,可以针对不同的场景将所述限流SDK构建成分布式限流SDK与单机限流SDK两种模式。所述单机限流,针对单个服务实例的访问频率进行限制。其中,服务实例并非对应一台物理机器,一台物理机器中可以根据需要部署一个或者多个不同的服务实例。通常,为了提高服务方的整体处理能力,可以在服务方针对一项服务布设多个服务实例,一项服务所对应的多个服务实例所实现的服务是相同的。例如,为了提高某微服务的能力,可以在服务方部署5个服务实例。如果服务方采用的是集成式系统,可以针对单个服务实例布设限流组件,以限制对单个服务实例的访问频率,如不能超过100次/秒,就是单机限流。如果服务方采用的是分布式系统,则可以限制对该项服务的5个服务实例的总访问频率,不能超过500次/秒。
单机限流可以防止突发流量压垮服务器,以进一步保证系统的可用性。分布式限流适合做细粒度限流或者访问配额,不同的调用方对不同的服务接口执行不同的限流规则,所以比较适合针对hits per second(每秒点击次数)限流,以防止某调用方过度竞争服务资源,保证数据整体处理平衡。
对于单机限流,计数器布设在服务实例所在的物理机中即可。对于分布式限流,则需要将计数器中心化布设。一些实施例中,可以基于Redis中心计数器来实现分布式限流的计数器布设。分布式限流在引入Redis中心计数器这个独立的系统之后,系统的复杂度高了很多,因此需要解决系统的一致性问题、超时以及性能等问题,以保证系统的高效运行。
服务接口限流过程通常包含三步操作:
Step1:“读”当前的接口访问计数n;
Step2:基于限流阈值“判断”是否限流;
Step3:如果接口限流验证通过,“写”接口计数n+1;
在并发情况下,这3步CAS操作存在条件竞争。在多线程环境下,可以通过线程的加锁或者concurrent开发包中的Atomic原子对象来实现。在分布式情况下,思路也是类似的,可以通过分布式锁,来保证同一时间段只有一个进程在访问。但是引入分布式锁需要引入新的系统和维护锁的代码,代价较大。一些实施例中,可以利用Redis单线程工作模式以及Lua脚本处理,以进一步提高处理的简便性。Redis单线程工作模式以及Lua脚本处理关键代码举例如下:
对于Redis的各种异常情况,处理起来并不是很难。但是如果Redis访问超时,会严重影响接口的响应时间甚至导致接口响应超时。在访问Redis时需要设置合理的超时时间,一旦超时,判定为限流失效,继续执行接口逻辑。Redis访问超时时间的设置太大可能会影响到接口的响应时间,太小可能会导致太多的限流失效。一些实施方式中,可以通过压测或者线上监控,获取到Redis访问时间分布情况,再结合服务接口可容忍的限流延迟时间,设置较合理的超时时间。相应的,一些实施例中,可以基于历史Redis访问时间分布数据以及服务方的服务接口可容忍的限流延迟时间确定所述限流计数模块的Redis访问超时判定阈值。
在应用分布式限流时,需要考量限流的性能是否满足应用场景,如果服务接口的TPS(每秒访问率)已经超过了限流框架本身的TPS,则限流功能会成为性能瓶颈影响接口本身的性能。除了TPS之外,网络延迟也是需要特别考虑的问题,特别是如果中心计数器与限流服务跨机房跨城市部署,之间的网络延迟将会非常大,将严重影响微服务接口的响应时间。一些实施例中,可以基于服务方的服务接口TPS配置限流组件的TPS,以及基于服务所在物理机与计数中心的网络延迟信息确定计数中心器的布设。
上述实施例所提供的限流SDK,给出了较为统一的限流处理配置方式,并将配置方式模块化,可以支持后续灵活扩展升级的组织方式。例如,针对限流的实际需求,可以对数据源、限流配置文件格式、限流算法、快速查询等方面,通过拆分接口与实现类,支持SDK持续扩展升级,且对集成使用方影响很小。同时,上述实施例还进一步给出了限流处理中满足接口对应限流规则快速查询的实现方法,并采用前缀树数据结构将限流规则组织成支持按URL快速查询的方案,提高数据查询效率,进而提高限流处理效率。
并进一步给出了单机限流以及分布式限流两种模式下的限流SDK,以更加适应业务需要,同时,还针对分布式限流,给出了基于Redis单线程工作模式以及Lua脚本的竞争处理方案,进一步提高分布式布设以及限流处理的简便性。
基于上述实施例提供的方案,如图1所示,本说明书实施例提供一种数据限流方法,应用于调用方的限流组件。所述限流组件可以由所述调用方基于预先构建的限流配置工具包所生成,生成方式可以参考上述实施例,这里不做赘述。所述方法可以包括如下步骤。
S20:获取调用方向服务方发送的数据处理请求中的目标服务接口参数;所述目标服务接口参数用于确定所述数据处理请求所需调用的目标服务。
调用方需要利用某项服务时,可以基于该服务的服务接口,向服务方发送数据处理请求。所述数据处理请求中如可以包括当前调用方标识、目标服务接口参数以及待处理数据等。所述目标服务接口参数可以用于确定所述数据处理请求所需调用的目标服务。所述当前调用方标识可以是指对发送所述数据处理请求的调用方进行标识的信息。
调用方在生成向服务方发送的数据处理请求后,可以先利用限流组件对数据处理请求进行限流分析。调用方的业务处理模块如可以通过调用限流组件对外提供的组件接口,利用限流组件对数据处理请求进行限流分析。相应的,调用方的限流组件可以获取数据处理请求中的服务接口参数。
基于上述实施例的方案,所述限流组件中针对不同的服务接口参数可以对应配置有不同的限流处理规则。所述限流处理规则如可以包括服务接口参数所对应的限流阈值、时间粒度等。
S22:调用所述目标服务接口参数所对应的限流处理规则。
限流组件在获取目标服务接口参数后,可以先调用所述目标服务接口参数所对应的限流处理规则。如在限流组件配置时,可以将限流处理规则可以与服务接口参数进行关联存储。相应的,在限流处理时,限流组件可以直接基于目标服务接口参数调用对应的限流处理规则。
另一些实施例中,限流组件还可以基于预先构建的限流处理规则查询结构以及所述服务接口参数中的资源定位信息,调用所述目标服务接口参数所对应的限流处理规则。其中,所述限流处理规则查询结构可以基于前缀树算法构建,所述限流处理规则查询结构中的各节点对应资源定位信息中用于表征子目录的字段。限流处理规则查询结构的构建方式可以参考上述实施例实施,这里不做赘述。在匹配的过程中,可以利用二分查找算法,确定从一个节点应该跳到哪一个子节点,进而确定出相应服务接口所对应的限流规则。通过基于前缀树以及子目录所对应的字段构建查询结构的方式,可以大幅提高限流规则查询的效率。
S24:利用所述限流处理规则对所述数据处理请求进行限流分析,以使所述调用方基于所述限流分析结果确定是否发送所述数据处理请求。
限流组件可以基于调取的限流处理规则对所述数据处理请求进行限流分析。如可以基于限流处理规则中的时间粒度,对限流处理请求进行计数,在计数值未达到限流阈值时,则可以向调用方的业务处理模块反馈如不限制处理请求的限流分析结果,以使调用方的业务处理模块基于限流分析结果对外发送所述数据处理请求。在计数值达到限流阈值时,则可以向调用方的业务处理模块反馈限制处理请求的限流分析结果,以使调用方的业务处理模块基于限流分析结果不再发送所述数据处理请求。限流组件的计数器在经过该限流处理规则中的时间粒度对应的时间区间后,可以对计数值进行清零,在新的时间区间内重新进行计数。
另一些实施例中,调用方可以基于不同的业务场景需要,针对不同的服务接口参数配置不同的限流算法。相应的,所述限流组件中还可以配置有各服务接口参数所对应的限流算法组件的接口参数,以使限流组件调用相应的限流算法组件对相应服务接口参数所对应的数据处理请求进行限流分析。在限流组件配置时,限流算法组件的接口参数可以与服务接口参数进行关联存储。相应的,在限流处理时,限流组件可以基于目标服务接口参数,获取对应的限流算法组件的接口参数,进而调用限流算法组件进行限流处理。一些实施方式中,所述限流算法组件的接口参数可以作为限流处理规则的配置信息中的一部分,相应的,可以通过预先构建的处理规则查询结构快速查询到目标服务接口参数所对应的限流算法组件的接口参数,提高数据查询的效率。
基于上述实施例提供的方案,另一些实施例中,如图2所示,本说明书实施例还提供一种数据限流方法,可以应用于服务方的限流组件。所述限流组件可以由所述服务方基于预先构建的限流配置工具包所生成。在所述服务方为集成式系统的情况下,所述限流组件可以基于服务实例进行布设,以对相应的服务实例的处理请求进行限流处理。在所述服务方为分布式系统的情况下,所述限流组件可以采用分布式限流方式,所述限流组件的限流计数模块利用Redis中心计数器构建,以对所述服务方的处理请求进行限流。所述限流计数模块可以基于Redis单线程工作模式以及Lua脚本构建。可以基于历史Redis访问时间分布数据以及服务方的服务接口可容忍的限流延迟时间确定所述限流计数模块的Redis访问超时判定阈值。限流组件的具体生成方式可以参考上述实施例,这里不做赘述。所述方法可以包括如下步骤。
S40;获取数据处理请求中的当前调用方标识;所述当前调用方标识是指对发送所述数据处理请求的调用方进行标识的信息。
调用方需要利用某项服务时,可以基于该服务的服务接口,向服务方发送数据处理请求。服务方可以接收该数据处理请求。所述数据处理请求中如可以包括当前调用方标识、目标服务接口参数以及待处理数据等。所述目标服务接口参数可以用于确定所述数据处理请求所需调用的目标服务。所述当前调用方标识可以是指对发送所述数据处理请求的调用方进行标识的信息。
服务方在接收到调用方发送的数据处理请求后,可以先利用限流组件对数据处理请求进行限流分析。服务方如可以通过调用限流组件对外提供的组件接口,利用限流组件对数据处理请求进行限流分析。相应的,服务方的限流组件可以获取数据处理请求中的当前调用方标识。若服务方内布设有多种服务。所述限流组件还可以获取数据处理请求中的目标服务接口参数。
基于上述实施例的方案,所述限流组件中可以针对不同的当前调用方标识、服务接口参数对应配置有不同的限流处理规则。所述限流处理规则如可以包括当前调用方标识、服务接口参数所对应的限流阈值、时间粒度等。
S42;调用所述当前调用方标识所对应的限流处理规则。
限流组件在获取当前调用方标识后,可以先调用所述当前调用方标识所对应的限流处理规则。如在限流组件配置时,可以将限流处理规则可以与调用方标识进行关联存储。相应的,在限流处理时,限流组件可以直接基于当前调用方标识调用对应的限流处理规则。
若服务方内布设有多种服务,在限流组件配置时,可以将限流处理规则可以与调用方标识以及服务接口参数进行关联存储。相应的,在限流处理时,限流组件可以基于当前调用方标识以及目标服务接口参数调用对应的限流处理规则。
另一些实施例中,限流组件还可以基于预先构建的限流处理规则查询结构以及所述当前调用方标识、或当前调用方标识与服务接口参数中的资源定位信息,调用所述当前调用方标识、或当前调用方标识与服务接口参数所对应的限流处理规则。其中,所述限流处理规则查询结构可以基于前缀树算法构建,所述限流处理规则查询结构中的各节点对应资源定位信息中用于表征子目录的字段。限流处理规则查询结构的构建方式可以参考上述实施例实施,这里不做赘述。在匹配的过程中,可以利用二分查找算法,确定从一个节点应该跳到哪一个子节点,进而确定出相应当前调用方标识、或当前调用方标识与服务接口参数所对应的限流规则。通过基于前缀树以及子目录所对应的字段构建查询结构的方式,可以大幅提高限流规则查询的效率。
S44;利用所述限流处理规则对所述数据处理请求进行限流分析,以使所述服务方基于所述限流分析结果确定是否对所述数据处理请求进行处理。
限流组件可以基于调取的限流处理规则对所述数据处理请求进行限流分析。如可以基于限流处理规则中的时间粒度,对限流处理请求进行计数,在计数值未达到限流阈值时,则可以向服务方反馈如不限制处理请求的限流分析结果,以使服务方基于限流分析结果对所述数据处理请求进行处理。在计数值达到限流阈值时,则可以向服务方反馈限制处理请求的限流分析结果,以使服务方基于限流分析结果不再发送所述数据处理请求。限流组件的计数器在经过该限流处理规则中的时间粒度对应的时间区间后,可以对计数值进行清零,在新的时间区间内重新进行计数。
另一些实施例中,服务方可以基于不同的业务场景需要,针对不同的调用方标识、服务接口参数配置不同的限流算法。相应的,所述限流组件中还可以配置有各调用方标识、服务接口参数所对应的限流算法组件的接口参数,以使限流组件调用相应的限流算法组件对相应调用方标识、或调用方标识与服务接口参数所对应的数据处理请求进行限流分析。
一些实施方式中,在限流组件配置时,限流算法组件的接口参数可以与调用方标识、或调用方标识与服务接口参数进行关联存储。相应的,在限流处理时,限流组件可以基于调用方标识、或调用方标识与服务接口参数,获取对应的限流算法组件的接口参数,进而调用限流算法组件进行限流处理。
一些实施方式中,所述限流算法组件的接口参数可以作为限流处理规则的配置信息中的一部分,相应的,可以通过预先构建的处理规则查询结构快速查询到调用方标识、或调用方标识与服务接口参数所对应的限流算法组件的接口参数,提高数据查询的效率。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。具体的可以参照前述相关处理相关实施例的描述,在此不做一一赘述。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
基于上述所述的数据限流方法,本说明书一个或多个实施例还提供一种限流组件,应用于调用方,所述限流组件可以由所述调用方基于预先构建的限流配置工具包所生成。如图3所示,所述限流组件可以包括如下模块。
接口参数获取模块102,可以用于获取调用方向服务方发送的数据处理请求中的目标服务接口参数;所述目标服务接口参数用于确定所述数据处理请求所需调用的目标服务。
处理规则调用模块104,可以用于调用所述目标服务接口参数所对应的限流处理规则.
限流分析模块106,可以用于利用所述限流处理规则对所述数据处理请求进行限流分析,以使所述调用方基于所述限流分析结果确定是否发送所述数据处理请求。
另一些实施例中,所述筛选模块604还可以用于从所述数据限流请求中筛选出非资源回收类型所对应的数据限流子请求。
基于上述所述的数据限流方法,本说明书一个或多个实施例还提供一种限流组件,应用于服务方,所述限流组件可以由所述服务方基于预先构建的限流配置工具包所生成。如图4所示,所述限流组件可以包括如下模块。
标识获取模块202,可以用于获取数据处理请求中的当前调用方标识;所述当前调用方标识是指对发送所述数据处理请求的调用方进行标识的信息。
处理规则调用模块204,可以用于调用所述当前调用方标识所对应的限流处理规则。
限流分析模块206,可以用于利用所述限流处理规则对所述数据处理请求进行限流分析,以使所述服务方基于所述限流分析结果确定是否对所述数据处理请求进行处理。
需要说明的,上述所述的限流组件根据方法实施例的描述还可以包括其他的实施方式。具体的实现方式可以参照相关方法实施例的描述,在此不作一一赘述。
基于上述实施例提供的方案,本说明书实施例还提供一种限流配置工具包,所述工具包可以包括限流规则配置文件以及至少一种限流算法组件。所述限流规则配置文件至少包括服务接口参数、调用方标识、限流阈值、时间粒度中的一种。上述所述的工具包根据上述实施例的描述还可以包括其他的实施方式。具体的实现方式可以参照相关方法实施例的描述,在此不作一一赘述。
本说明书提供的上述实施例所述的方法或装置可以通过计算机程序实现业务逻辑并记录在存储介质上,所述的存储介质可以计算机读取并执行,实现本说明书实施例所描述方案的效果。所述存储介质可以包括用于存储信息的物理装置,通常是将信息数字化后再以利用电、磁或者光学等方式的媒体加以存储。所述存储介质有可以包括:利用电能方式存储信息的装置如,各式存储器,如RAM、ROM等;利用磁能方式存储信息的装置如,硬盘、软盘、磁带、磁芯存储器、磁泡存储器、U盘;利用光学方式存储信息的装置如,CD或DVD。当然,还有其他方式的可读存储介质,例如量子存储器、石墨烯存储器等等。
本说明书实施例并不局限于必须是符合标准数据模型/模板或本说明书实施例所描述的情况。某些行业标准或者使用自定义方式或实施例描述的实施基础上略加修改后的实施方案也可以实现上述实施例相同、等同或相近、或变形后可预料的实施效果。应用这些修改或变形后的数据获取、存储、判断、处理方式等获取的实施例,仍然可以属于本说明书的可选实施方案范围之内。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本说明书的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述并不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
以上所述仅为本说明书的实施例而已,并不用于限制本说明书。对于本领域技术人员来说,本说明书可以有各种更改和变化。凡在本说明书的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本说明书的权利要求范围之内。
Claims (13)
1.一种数据限流方法,其特征在于,应用于调用方的限流组件,所述限流组件由所述调用方基于预先构建的限流配置工具包所生成;所述方法包括:
获取调用方向服务方发送的数据处理请求中的目标服务接口参数;所述目标服务接口参数用于确定所述数据处理请求所需调用的目标服务;
调用所述目标服务接口参数所对应的限流处理规则;
利用所述限流处理规则对所述数据处理请求进行限流分析,以使所述调用方基于所述限流分析结果确定是否发送所述数据处理请求;
其中,所述调用所述服务接口参数所对应的限流处理规则,包括:
基于预先构建的限流处理规则查询结构以及所述服务接口参数中的资源定位信息,调用所述目标服务接口参数所对应的限流处理规则;其中,所述限流处理规则查询结构基于前缀树算法构建,所述限流处理规则查询结构中的各节点对应资源定位信息中用于表征子目录的字段。
2.根据权利要求1所述的方法,其特征在于,所述限流配置工具包包括限流规则配置文件;所述限流规则配置文件至少包括服务接口参数、限流阈值、时间粒度中的一种;相应的,所述调用方基于所述限流规则配置文件生成各服务接口参数的限流处理规则。
3.根据权利要求2所述的方法,其特征在于,所述限流配置工具包还包括至少一种限流算法组件;所述调用方基于依赖注入的方式在限流组件中配置各服务接口参数所对应的限流算法组件的接口参数;
相应的,所述对所述数据处理请求进行限流分析,包括:基于所述目标服务接口参数所对应的限流算法组件的接口参数,调用相应的限流算法组件对所述数据处理请求进行限流分析。
4.一种数据限流方法,其特征在于,应用于服务方的限流组件,所述限流组件由所述服务方基于预先构建的限流配置工具包所生成;所述方法包括:
获取数据处理请求中的当前调用方标识;所述当前调用方标识是指对发送所述数据处理请求的调用方进行标识的信息;
调用所述当前调用方标识所对应的限流处理规则;
利用所述限流处理规则对所述数据处理请求进行限流分析,以使所述服务方基于所述限流分析结果确定是否对所述数据处理请求进行处理;
其中,所述调用所述调用方标识所对应的限流处理规则,包括:
基于预先构建的限流处理规则查询结构以及所述当前调用方标识中的资源定位信息调用所述当前调用方标识所对应的限流处理规则;其中,所述限流处理规则查询结构基于前缀树算法构建,所述限流处理规则查询结构中的各节点对应资源定位信息中用于表征子目录的字段。
5.根据权利要求4所述的方法,其特征在于,所述限流配置工具包包括限流规则配置文件;所述限流规则配置文件至少包括调用方标识、限流阈值、时间粒度中的一种;相应的,所述调用方基于所述限流规则配置文件生成各调用方标识的限流处理规则。
6.根据权利要求4所述的方法,其特征在于,所述限流配置工具包还包括至少一种限流算法组件;所述服务方基于依赖注入的方式在限流组件中配置各调用方标识所对应的限流算法组件的接口参数;
相应的,所述对所述数据处理请求进行限流分析,包括:基于所述当前调用方标识所对应的限流算法组件的接口参数,调用相应的限流算法组件对所述数据处理请求进行限流分析。
7.根据权利要求4所述的方法,其特征在于,在所述服务方为集成式系统的情况下,所述限流组件基于服务实例进行布设,以对相应的服务实例的处理请求进行限流处理。
8.根据权利要求4所述的方法,其特征在于,在所述服务方为分布式系统的情况下,所述限流组件采用分布式限流方式,所述限流组件的限流计数模块利用Redis中心计数器构建,以对所述服务方的处理请求进行限流。
9.根据权利要求8所述的方法,其特征在于,所述限流计数模块基于Redis单线程工作模式以及Lua脚本构建。
10.根据权利要求8所述的方法,其特征在于,基于历史Redis访问时间分布数据以及服务方的服务接口可容忍的限流延迟时间确定所述限流计数模块的Redis访问超时判定阈值。
11.一种限流组件,其特征在于,应用于调用方,所述限流组件由所述调用方基于预先构建的限流配置工具包所生成;所述限流组件包括:
接口参数获取模块,用于获取调用方向服务方发送的数据处理请求中的目标服务接口参数;所述目标服务接口参数用于确定所述数据处理请求所需调用的目标服务;
处理规则调用模块,用于调用所述目标服务接口参数所对应的限流处理规则;
限流分析模块,用于利用所述限流处理规则对所述数据处理请求进行限流分析,以使所述调用方基于所述限流分析结果确定是否发送所述数据处理请求;
其中,所述调用所述服务接口参数所对应的限流处理规则,包括:
基于预先构建的限流处理规则查询结构以及所述服务接口参数中的资源定位信息,调用所述目标服务接口参数所对应的限流处理规则;其中,所述限流处理规则查询结构基于前缀树算法构建,所述限流处理规则查询结构中的各节点对应资源定位信息中用于表征子目录的字段。
12.一种限流组件,其特征在于,应用于服务方,所述限流组件由所述服务方基于预先构建的限流配置工具包所生成;所述限流组件包括:
标识获取模块,用于获取数据处理请求中的当前调用方标识;所述当前调用方标识是指对发送所述数据处理请求的调用方进行标识的信息;
处理规则调用模块,用于调用所述当前调用方标识所对应的限流处理规则;
限流分析模块,用于利用所述限流处理规则对所述数据处理请求进行限流分析,以使所述服务方基于所述限流分析结果确定是否对所述数据处理请求进行处理;
其中,所述调用所述调用方标识所对应的限流处理规则,包括:
基于预先构建的限流处理规则查询结构以及所述当前调用方标识中的资源定位信息调用所述当前调用方标识所对应的限流处理规则;其中,所述限流处理规则查询结构基于前缀树算法构建,所述限流处理规则查询结构中的各节点对应资源定位信息中用于表征子目录的字段。
13.根据权利要求11或12所述的限流组件,其特征在于,所述限流配置工具包包括限流规则配置文件以及至少一种限流算法组件;所述限流规则配置文件至少包括服务接口参数、调用方标识、限流阈值、时间粒度中的一种。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011492531.9A CN112671658B (zh) | 2020-12-16 | 2020-12-16 | 数据限流方法、组件及工具包 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011492531.9A CN112671658B (zh) | 2020-12-16 | 2020-12-16 | 数据限流方法、组件及工具包 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112671658A CN112671658A (zh) | 2021-04-16 |
CN112671658B true CN112671658B (zh) | 2023-01-31 |
Family
ID=75404596
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011492531.9A Active CN112671658B (zh) | 2020-12-16 | 2020-12-16 | 数据限流方法、组件及工具包 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112671658B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114338639A (zh) * | 2021-12-20 | 2022-04-12 | 上海万物新生环保科技集团有限公司 | 一种Nginx流量限制预警的方法及设备 |
CN114285849A (zh) * | 2021-12-21 | 2022-04-05 | 中国电信股份有限公司 | 限流状态的调整方法和装置、存储介质及电子装置 |
CN115002043A (zh) * | 2022-05-30 | 2022-09-02 | 重庆长安汽车股份有限公司 | 一种基于注册中心的分布式限流方法、设备及存储介质 |
CN115801688A (zh) * | 2022-10-27 | 2023-03-14 | 兴业银行股份有限公司 | 支持动态配置细粒度流控方法和系统 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110276182A (zh) * | 2019-06-10 | 2019-09-24 | 必成汇(成都)科技有限公司 | Api分布式限流的实现方法 |
CN110380986A (zh) * | 2019-07-23 | 2019-10-25 | 中南民族大学 | 基于Zuul的流量限制方法、装置、设备及存储介质 |
CN110417671A (zh) * | 2019-07-31 | 2019-11-05 | 中国工商银行股份有限公司 | 数据传输的限流方法和服务器 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
ES2687405T3 (es) * | 2007-09-27 | 2018-10-25 | Sun Patent Trust | Nodo de red y terminal móvil |
-
2020
- 2020-12-16 CN CN202011492531.9A patent/CN112671658B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110276182A (zh) * | 2019-06-10 | 2019-09-24 | 必成汇(成都)科技有限公司 | Api分布式限流的实现方法 |
CN110380986A (zh) * | 2019-07-23 | 2019-10-25 | 中南民族大学 | 基于Zuul的流量限制方法、装置、设备及存储介质 |
CN110417671A (zh) * | 2019-07-31 | 2019-11-05 | 中国工商银行股份有限公司 | 数据传输的限流方法和服务器 |
Also Published As
Publication number | Publication date |
---|---|
CN112671658A (zh) | 2021-04-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112671658B (zh) | 数据限流方法、组件及工具包 | |
US10348565B2 (en) | System and method for rule-based elasticity in a multitenant application server environment | |
US8819701B2 (en) | Cloud computing monitoring and management system | |
US6839748B1 (en) | Synchronous task scheduler for corba gateway | |
US6950935B1 (en) | Pluggable authentication modules for telecommunications management network | |
US20120102486A1 (en) | Distributed cloud application deployment systems and/or associated methods | |
JP5689500B2 (ja) | 権限管理に基づく端末装置管理のための方法 | |
KR20110040934A (ko) | 지능형 모바일 디바이스 매니지먼트 클라이언트 | |
US7100167B2 (en) | Method and apparatus for creating templates | |
US10831565B2 (en) | Fault tolerant adapter system to consume database as a service | |
US20240037001A1 (en) | Large-scale k8s cluster monitoring method, apparatus, device, and readable medium | |
Kübert et al. | A RESTful implementation of the WS-Agreement specification | |
US7275250B1 (en) | Method and apparatus for correlating events | |
CN109684176A (zh) | 一种告警信息的上报方法、系统及相关组件 | |
US7228346B1 (en) | IDL event and request formatting for corba gateway | |
CN113703996B (zh) | 基于用户和yang模型分组的访问控制方法、设备及介质 | |
Groth et al. | Formalising a protocol for recording provenance in grids | |
Szabo et al. | On syntactic composability and model reuse | |
CN106357704A (zh) | 一种基于开发环境的服务调用方法及装置 | |
Adrada et al. | Automatic code instrumentation for converged service monitoring and fault detection | |
CN110300007B (zh) | Vnfd多部署规格的部署方法、装置、网元设备、管理设备及存储介质 | |
Srivastava et al. | Architectural support for mode-driven fault tolerance in distributed applications | |
Benedictis et al. | SLAs for cloud applications: agreement protocol and REST-based implementation | |
CN110474907A (zh) | 服务总线系统及基于服务总线的服务应用系统 | |
Subasu et al. | Architectural Concerns for Flexible Data Management |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |