CN112367268A - 用于微服务的限流方法及装置 - Google Patents
用于微服务的限流方法及装置 Download PDFInfo
- Publication number
- CN112367268A CN112367268A CN202011329458.3A CN202011329458A CN112367268A CN 112367268 A CN112367268 A CN 112367268A CN 202011329458 A CN202011329458 A CN 202011329458A CN 112367268 A CN112367268 A CN 112367268A
- Authority
- CN
- China
- Prior art keywords
- micro
- tps
- service
- current
- preemption
- 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.)
- Granted
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/10—Flow control; Congestion control
- H04L47/20—Traffic policing
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/10—Flow control; Congestion control
- H04L47/24—Traffic characterised by specific attributes, e.g. priority or QoS
- H04L47/2425—Traffic characterised by specific attributes, e.g. priority or QoS for supporting services specification, e.g. SLA
- H04L47/2433—Allocation of priorities to traffic types
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/10—Flow control; Congestion control
- H04L47/29—Flow control; Congestion control using a combination of thresholds
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Telephonic Communication Services (AREA)
Abstract
本发明公开一种用于微服务的限流方法及装置,针对复杂查询场景,提供了更细粒度的限流方案。该方法包括:针对微服务系统提供的微服务配置出多个限流优先级;接收调用方系统的接入申请,获取调用方系统对微服务的期望并发和期望TPS,用于匹配微服务中对应的限流优先级;获取调用方系统的微服务请求进行预占判断,判断通过后基于当前微服务请求的TPS预占数进行正式预占,并向调用方系统返回预占码;基于限流优先级中匹配的TPS阈值以及预占码和TPS预占数,判断是否对当前微服务请求执行TPS限流;和/或,基于限流优先级中匹配的并发阈值以及当前微服务请求的并发数,判断是否对当前微服务请求执行并发限流。该装置应用有上述方案所提的方法。
Description
技术领域
本发明涉及微服务技术领域,尤其涉及一种用于微服务的限流方法及装置。
背景技术
在开发微服务系统时,需要使用诸多手段保护微服务系统,比如缓存、降级和限流。其中限流的目的是通过对并发访问/请求进行限速或者一个时间窗口内的请求进行限速来保护系统,一旦达到限速速率则可以拒绝服务、排队或者等待。我们可以通过压测找到每个微服务系统的处理峰值阈值,当系统过载时,则通过限流手段来保障系统可用。
根据实际限流场景,现有的微服务限流方案,存在以下几个问题:
1、现有的微服务限流一般是到服务实例/集群级别,没有细化到更细层次,例如针对调用系统访问某些服务的层次;
2、限流配置不支持动态调整;
3、复杂查询场景下流程的限流,例如1:N场景,简单针对接口服务的限流会导致调用方数据不完整或者失败;1:N场景如图2所示,实时GMV报表由5个区域构成,不同区域按照不同分析策略进行分析,不同区域都请求微服务A获取数据,只是入参传递的不一致。1:N查询场景,即下游1个完整的查询结果包括多次微服务A的请求,这种查询场景,如果使用现有方案直接针对微服务A的限流方案,则会出现随机的部分区域被限流的场景,也可能存在某个区域一直被限流的情况,导致下游数据不完整。
发明内容
本发明的目的在于提供一种用于微服务的限流方法及装置,针对复杂查询场景,提供了更细粒度的限流方案。
为了实现上述目的,本发明的第一方面提供一种用于微服务的限流方法,包括:
针对微服务系统提供的微服务配置出多个限流优先级,每个限流优先级包括对应的并发阈值和TPS阈值;
接收调用方系统的接入申请,获取调用方系统对所述微服务的期望并发和期望TPS,用于匹配微服务中对应的限流优先级;
获取调用方系统的微服务请求进行预占判断,判断通过后基于当前微服务请求的TPS预占数进行正式预占,并向调用方系统返回预占码;
基于限流优先级中匹配的TPS阈值以及所述预占码和所述TPS预占数,判断是否对当前微服务请求执行TPS限流;和/或,
基于限流优先级中匹配的并发阈值以及当前微服务请求的并发数,判断是否对当前微服务请求执行并发限流。
优选地,还包括:
微服务系统定时跑任务,根据每个调用方系统对微服务的访问请求,定期更新每个调用方系统与微服务中匹配的限流优先级。
优选地,接收调用方系统的接入申请获取对所述微服务的期望并发和期望TPS,用于匹配微服务中对应的限流优先级的方法包括:
微服务系统接收调用方系统的接入申请,所述接入申请中包括所述调用方系统的期望并发和期望TPS;
基于所述期望TPS,从多个限流优先级中匹配出最接近且小于所述期望TPS的TPS阈值,匹配出微服务中对应的限流优先级。
优选地,获取调用方系统的微服务请求进行预占判断的方法包括:
当A+B+C<D时,则当前微服务请求的预占判断通过,否则当前微服务请求的预占判断不通过;
其中,所述A表示当前时间窗口正在执行的TPS请求数,所述B表示当前有效期内已申请但未执行的TPS请求数,所述C表示当前微服务请求的TPS预占数,所述D表示匹配限流优先级中的TPS阈值;
当前时间窗口正在执行的TPS请求数采用TPS累加器计数,当前有效期内已申请但未执行的TPS请求数采用合计累加器计数,当前微服务请求的TPS预占数采用预占累加器计数;
所述预占累加器中的key为预占码,value为TPS预占数,所述TPS累加器和所述合计累加器中的key由调用方系统ID、微服务系统ID和时间戳组成,value为请求数量。
较佳地,基于当前微服务请求的TPS预占数进行正式预占的方法包括:
根据时间戳从当前微服务请求的预占累加器中获取预占码以及TPS预占数进行正式预占,同时对合计累加器中的请求数量进行更新。
优选地,基于限流优先级中匹配的TPS阈值以及所述预占码和所述TPS预占数,判断是否对当前微服务请求执行TPS限流的方法包括:
校验当前微服务请求在预占累加器中是否存在预占码,若是则继续校验当前微服务请求中的实际TPS请求数是否超过TPS预占数;
当超过时仅处理与TPS预占数量相等的实际TPS请求,其余的实际TPS请求执行TPS限流。
优选地,基于限流优先级中匹配的并发阈值以及当前微服务请求的并发数,判断是否对当前微服务请求执行并发限流的方法包括:
校验并发累加器中的请求数量,当其大于并发阈值时对当前微服务请求执行并发限流。
与现有技术相比,本发明提供的用于微服务的限流方法具有以下有益效果:
本发明提供的用于微服务的限流方法中,首先针对微服务系统的每个微服务接口配置多个限流优先级,且每个限流优先级包括对应的并发阈值和TPS阈值,微服务系统在接收到调用方系统的接入申请时,从中获取该调用方系统对该微服务接口的期望并发和期望TPS,用于匹配微服务接口中对应的限流优先级为其提供查询服务,之后,微服务系统接收调用方系统的微服务请求进行初步的预占判断,在判断通过后基于当前微服务请求的TPS预占数进行正式预占并向调用方系统返回预占码,以实现基于限流优先级中匹配的TPS阈值以及预占码和TPS预占数,判断是否对当前微服务请求执行TPS限流,和/或,基于限流优先级中匹配的并发阈值以及当前微服务请求的并发数,判断是否对当前微服务请求执行并发限流。
可见,本发明可以根据调用方系统针对单个微服务接口进行限流控制,能够对微服务资源做更精细的调控,也即支持了更细粒度的限流措施。另外,本发明通过预占机制,支持1:N场景的复杂限流场景,使之不会出现部分查询失败的情况,保障下游调用方系统查询的完整性。
本发明的第二方面提供一种用于微服务的限流装置,应用于上述技术方案所述的用于微服务的限流方法中,所述装置包括:
微服务配置单元,用于针对微服务系统提供的微服务配置出多个限流优先级,每个限流优先级包括对应的并发阈值和TPS阈值;
微服务接收单元,用于接收调用方系统的接入申请,获取调用方系统对所述微服务的期望并发和期望TPS,用于匹配微服务中对应的限流优先级;
预占单元,用于获取调用方系统的微服务请求进行预占判断,判断通过后基于当前微服务请求的TPS预占数进行正式预占,并向调用方系统返回预占码;
TPS限流单元,用于基于限流优先级中匹配的TPS阈值以及所述预占码和所述TPS预占数,判断是否对当前微服务请求执行TPS限流;
并发限流单元,用于基于限流优先级中匹配的并发阈值以及当前微服务请求的并发数,判断是否对当前微服务请求执行并发限流。
优选地,还包括:
定时更新单元,用于微服务系统定时跑任务,根据每个调用方系统对微服务的访问请求,定期更新每个调用方系统与微服务中匹配的限流优先级。
与现有技术相比,本发明提供的用于微服务的限流装置的有益效果与上述技术方案提供的用于微服务的限流方法的有益效果相同,在此不做赘述。
本发明的第三方面提供一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器运行时执行上述用于微服务的限流方法的步骤。
与现有技术相比,本发明提供的计算机可读存储介质的有益效果与上述技术方案提供的用于微服务的限流方法的有益效果相同,在此不做赘述。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本发明的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1为本发明实施例中用于微服务的限流方法的流程示意图;
图2为本发明实施例中1:N复杂查询场景下的微服务查询示例图;
图3为本发明实施例中微服务系统的架构图;
图4为本发明实施例中用于微服务限流方法的具体流程示意图;
图5为本发明实施例中业务功能和累加器的关系图谱;
图6为本发明实施例中基于固定时间窗口和各类累加器进行微服务TPS限流的使用示例图;
图7为本发明实施例中基于累加器进行微服务并发限流的使用示例图。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动的前提下所获得的所有其它实施例,均属于本发明保护的范围。
实施例一
请参阅图1,本实施例提供一种用于微服务的限流方法,包括:
针对微服务系统提供的微服务配置出多个限流优先级,每个限流优先级包括对应的并发阈值和TPS阈值;接收调用方系统的接入申请,获取调用方系统对微服务的期望并发和期望TPS,用于匹配微服务中对应的限流优先级;获取调用方系统的微服务请求进行预占判断,判断通过后向调用方系统返回预占码,并基于当前微服务请求的TPS预占数进行正式预占;基于限流优先级中匹配的TPS阈值以及预占码和TPS预占数,判断是否对当前微服务请求执行TPS限流;和/或,基于限流优先级中匹配的并发阈值以及当前微服务请求的并发数,判断是否对当前微服务请求执行并发限流。
本实施例提供的用于微服务的限流方法中,首先针对微服务系统的每个微服务接口配置多个限流优先级,且每个限流优先级包括对应的并发阈值和TPS阈值,微服务系统在接收到调用方系统的接入申请时,从中获取该调用方系统对该微服务接口的期望并发和期望TPS,用于匹配微服务接口中对应的限流优先级为其提供查询服务,之后,微服务系统接收调用方系统的微服务请求进行初步的预占判断,在判断通过后基于当前微服务请求的TPS预占数进行正式预占并向调用方系统返回预占码,以实现基于限流优先级中匹配的TPS阈值以及预占码和TPS预占数,判断是否对当前微服务请求执行TPS限流,和/或,基于限流优先级中匹配的并发阈值以及当前微服务请求的并发数,判断是否对当前微服务请求执行并发限流。
可见,本实施例可以根据调用方系统针对单个微服务接口进行限流控制,能够对微服务资源做更精细的调控,也即支持了更细粒度的限流措施。另外,本实施例通过预占机制,支持1:N场景的复杂限流场景,使之不会出现部分查询失败的情况,保障下游调用方系统查询的完整性。
具体实施时,微服务系统即为图3所示的统一服务限流平台,其由系统接入中心、服务预占中心和服务限流中心三大部分组成,系统接入中心提供系统接入能力,用于接收调用方系统的接入申请,供调用方系统输入基本信息,如申请服务地址、期望并发(最大并发量)、期望TPS(最大TPS信息)和降级方案等,调用方系统经过微服务系统的业务审核和系统审核,用于匹配微服务中对应的限流优先级。需要说明的是,业务审核是指业务重要性的审核,可通过人工对业务的重要性进行标记,系统审核是为了匹配微服务的限流优先级和系统并发。
示例性地,如图4所示,某个微服务接口配置的限流优先级为1、2、3、4、5共五个等级,每个等级设置对应的并发阈值和TPS阈值,这些阈值可通过压测微服务系统配置调整。示例性地,业务审核指的是从业务上分析调用场景和业务重要性,标记系统重要性;系统审核指的是根据调用方系统申请微服务的期望并发和期望TPS需求,判断新增的并发以及TPS是否会超过微服务接口的阈值。判断规则如下:
SUM(单个调用方系统单个微服务的TPS阈值)<单个微服务接口的TPS阈值;
SUM(单个调用方系统单个微服务的最大并发)<单个微服务接口的并发阈值;
其中,微服务接口的TPS阈值/并发阈值是通过系统压测以及机器配置获得的,如果调整机器配置,对应也需调整微服务接口的TPS阈值/并发阈值。每个调用方系统针对单个微服务接口的阈值是由首次接入时经过审核,并标记优先级后配置的,自动化任务会调整这个优先级和阈值。
上述实施例中,还包括:
微服务系统定时跑任务,根据每个调用方系统对微服务的访问请求,定期更新每个调用方系统与微服务中匹配的限流优先级。
具体实施时,微服务系统定时跑任务,通过自动化任务自动调整调用方系统所匹配的期望并发和期望TPS,以及所匹配的限流优先级。具体方案如下:
1、微服务系统每天跑定时任务,计算每个调用方系统针对每个访问微服务的TPS情况,每个微服务的调用信息通过接口服务埋点信息获得;其中每个调用方系统针对单个微服务的期望TPS=(T-N每个调用方系统针对单个微服务的每天平均总调用数*80%)/(每天总秒数*20%);其中,T表示当天,N表示前N天,T-N表示从当天T至前N天这一时段。
2、根据上述计算出的每个调用方系统对某个微服务接口的期望TPS,结合平台所配置的单个微服务的各等级的并发和TPS要求,调整调用方系统所匹配的限流优先级。
上述实施例中,接收调用方系统的接入申请获取对所述微服务的期望并发和期望TPS,用于匹配微服务中对应的限流优先级的方法包括:
微服务系统接收调用方系统的接入申请,接入申请中包括调用方系统的期望并发和期望TPS;基于期望TPS,从多个限流优先级中匹配出最接近且小于期望TPS的TPS阈值,匹配出微服务中对应的限流优先级。
例如某个微服务F的配置等级5,对应的并发阈值为100,TPS阈值为150,配置等级4,对应的并发阈值为80,TPS阈值为120;如果调用方系统A针对微服务F的期望TPS是160,则修改匹配的限流优先级为等级5,如果期望TPS是135,则修改等级为等级4;并同步调整每个调用方系统针对单个微服务的并发阈值和TPS阈值。主要调整以下两项阈值,每个调用方系统对微服务的TPS阈值,每个调用方系统对微服务的并发阈值。
上述实施例中,获取调用方系统的微服务请求进行预占判断的方法包括:
当A+B+C<D时,则当前微服务请求的预占判断通过,否则当前微服务请求的预占判断不通过;其中,A表示当前时间窗口正在执行的TPS请求数,B表示当前有效期内已申请但未执行的TPS请求数,C表示当前微服务请求的TPS预占数,D表示匹配限流优先级中的TPS阈值;当前时间窗口正在执行的TPS请求数采用TPS累加器计数,当前有效期内已申请但未执行的TPS请求数采用合计累加器计数,当前微服务请求的TPS预占数采用预占累加器计数;预占累加器中的key为预占码,value为TPS预占数,TPS累加器、合计累加器和并发累加器中的key由调用方系统ID、微服务系统ID和时间戳组成,value为请求数量。
具体实施时,本实施例采用基于固定时间窗口限流算法实施限流,现对其限流原理和限流涉及的几类累加器进行解释说明:
1、基于固定时间窗口限流的基本原理是:选定一个时间起点,之后每次接口请求到来累加至累加器中,若在固定时间窗口内,根据限流规则,如果累计访问次数超过限流值,则限流熔断拒绝接口请求。每个累加计数器在有效期范围内保持累计,有效期是固定时间窗口的N倍,如固定时间窗口为1秒,N取5时则有效期为5秒。
2、如图5所示,累加器是用来进行计数的数据结构,支持加减运算,是key-value结构,可以通过key-value数据库(如redis)承载,本实施例涉及的累加器包括以下四类:
预占累加器:用来标记预占请求数量的累加器,一次成功的预占服务操作会产生一个新的预占累加器。预占累加器的key为:预占码,value为TPS预占数,预占请求的有效期为N个固定时间窗口周期。预占累加器的key/预占码的定义规则为:${system_id}${service_id}${ip}{4位随机码}${时间戳(ms)};
合计累加器:用来标记有效期内的总计TPS预占数的累加器(相当于多个预占累加器的计数之和),预占服务成功后,除了产生了一个预占累加器,还会将其中的TPS预占数累加到对应的合计累加器中进行计算,该合计累加器是包含当前调用方系统、当前接口服务、当前固定时间窗口的所有预占请求的累加器,通常合计累加器的有效期为5个固定时间窗口周期。合计累加器的key为${system_id}${service_id}pre${时间戳(s)},value为请求数量。
TPS累加器:用来标记有效期内TPS请求数量的累加器,每次实际请求都会对应产生一个TPS累加器,用于对实际TPS请求进行累加,通常TPS累加器的有效期为5个固定时间窗口周期。TPS累加器的key为:${system_id}${service_id}limit${时间戳(s)},value为请求数量。
并发累加器:用来标记有效期内并发请求数量的累加器,并发累加器专为并发限流所述准备,每次发生实际并发请求,并发累加器会基于并发数进行加减技术,在并发请求完成(成功或失败)后,自动进行减数以做扣除。通常并发累加器的有效期为1天,并发累加器的key为:${system_id}${service_id}concurrency,value为请求数量。
示例性地,上述累加器key定义规则使用的参数定义如下:
${system_id}:指的是调用方系统在当前微服务系统的配置id;
${service_id}:指的是微服务接口在当前微服务系统的配置id;
${ip}:指的是当前微服务接口的服务端处理ip;
${4位随机码}:指的是随机4位数字;
${时间戳(ms)}:指的是当前毫秒级别的时间戳;
${时间戳(s)}:指的是当前秒级别的时间戳;
如system_id=1001,service_id=1002,ip是192.168.0.1,随机码是1234,请求时间为:2020-03-27 13:24:01 005,则预占码为:10011002pre192168011234202003271324010000。
上述实施例中,基于当前微服务请求的TPS预占数进行正式预占的方法包括:
根据时间戳从当前微服务请求的预占累加器中获取预占码以及TPS预占数进行正式预占,同时对合计累加器中的请求数量进行更新。
具体实施时,请参阅图4,预占服务指的是调用方系统在正式请求微服务前,首先需要先请求预占服务,获得预占码,预占时可以一次性预占多个请求(多个TPS预占数),预占服务面向的是调用方系统,针对某个微服务的预占,属于限流的一个环节,预占失败实际上也相当于被限流。
上述实施例中,基于限流优先级中匹配的TPS阈值以及预占码和TPS预占数,判断是否对当前微服务请求执行TPS限流的方法包括:
校验当前微服务请求在预占累加器中是否存在预占码,若是则继续校验当前微服务请求中的实际TPS请求数是否超过TPS预占数;当超过时仅处理与TPS预占数量相等的实际TPS请求,其余的实际TPS请求执行TPS限流。
具体实施时,预占判断的算法为:SUM(当前时间窗口正在执行的TPS请求数、当前有效期内已申请但未执行的TPS请求数、当前微服务请求的TPS预占数)是否小于TPS阈值。具体计算公式如下:
当前时间窗口正在执行的TPS请求数+当前有效期内已申请但未执行的TPS请求数+当前微服务请求的TPS预占数<调用方系统匹配的某个微服务的TPS阈值;其中,当前有效期内已申请但未执行的TPS请求数包括当前时间窗口总计的针对某个微服务预占请求数+已经预占成功且还在有效期内的针对某个微服务预占请求数。
当前时间窗口正在执行的TPS请求数:用TPS累加器进行计数;
当前有效期内总计的针对某个微服务预占请求数:用合计累加器进行计数;
已经预占成功且还在有效期内的针对某个微服务预占请求数:也用合计累计器进行计数,限制条件是不在当前固定时间窗口,但还在有效期内;
当前微服务请求的TPS预占数:微服务预占服务一次性请求的TPS预占数;
调用方系统的期望TPS,通过压测和系统接入评估出的限流优先级计算得出。
另外,在预占判断通过后进行实际预占操作并向调用方系统返回预占码,预占操作指的是生成预占累加器,累加器的value为TPS预占数。具体操作如下:
1、根据当前时间戳获取预占码,并初始化请求预占累加器,key=预占码,value=TPS预占数;
2、根据时间戳获得合计预占码,并将合计累加器的值+1;如果没有合计累加器,则根据当前时间戳获取一个合计累加器,并进行值初始化。初始化逻辑如下:将T-N固定时间窗口的预占累加器进行合并;
3、预占码:预占码是调用方系统针对微服务进行预占生成的唯一码,这个唯一码=预占累加器的key。在微服务正式查询时,会传递预占时返回的预占码,微服务系统会对预占码进行校验,校验预占码是否存在以及校验TPS预占数是否存在剩余,校验通过后方可进行正式的服务查询。
图3中所示的服务请求中心,是指面向各调用方系统的统一接口服务层,服务请求中心根据当前的并发和TPS进行限流。服务请求中心的整体流程包括微服务请求判断以及实际微服务的请求操作:
(1)TPS限流规则为:调用方系统根据预占码针对当前微服务是否预占过;实际请求是否超过调用方系统针对微服务的TPS预占数,例如预占服务预占了10个TPS预占数,但是实际上,使用当前预占码用来正式请求达到20个TPS预占数,则只会有10个请求能够访问微服务,其它的请求会被拒绝。
(2)并发限流规则为:校验并发累加器中的请求数量,当其大于并发阈值时对当前微服务请求执行并发限流。
(3)实际请求操作:
上述实施例中的TPS限流操作指的是将标记预占转换成实际请求,包括如下步骤:
根据预占码将对应的预占累加器减一;
根据当前时间戳获取合计累加器key,找到对应的累加器,并且减一;
根据当前时间戳获取TPS累加器key,找到对应的累加器,并且加一;
上述实施例中的并发限流操作指的是将标记并发请求换成实际请求,包括如下步骤:
并发请求正式服务前,将并发累加器加一;
请求正式服务结束后(成功或失败),将并发累加器减一。
如图6所示,为便于理解,现对基于固定时间窗口和各类累加器进行微服务TPS限流的使用示例进行说明:
1、在时间窗口[13:24:01 000-13:24:01 999]内,2020-03-27 13:24:01 005时,调用方系统请求微服务接口A共3次,TPS累加器初始化,TPS累加器key为10011002limit20200327132401;
2、在时间窗口[13:24:01 000-13:24:01 999]内,2020-03-27 13:24:01 005时,有3个预占请求过来,其中请求1一次性预占了2个TPS预占数,请求2一次性预占了4个TPS预占数,请求3一次性预占了3个TPS预占数;并且合计累加器也将3个预占请求进行了累计,预占累加器以及合计累加器的有效期相同都为5s,是固定时间窗口的5倍;
3、在时间窗口[13:24:01 000-13:24:01 999]内,2020-03-27 13:24:01 100时,请求1完成正式请求后,预占累加器被清零,同时合计累加器中涉及到请求1被清零;请求2完成1个正式请求后,预占累加器减一,同时合计累加器涉及到的请求2被减一;请求3完成2个正式请求后,预占累加器减二,同时合计累加器涉及到请求3被减二。同时请求4预占了5个TPS预占数,请求4的预占累加器初始化,同时合计累加器加5;
4、在时间窗口[13:24:01 000-13:24:01 999]内,2020-03-27 13:24:01 100时,TPS累加器进行了加6,分别是请求1的2次正式查询,请求2的1次正式查询,请求3的2次正式查询,请求4的1次正式查询。
如图7所示,为便于理解,现对基于累加器进行微服务并发限流的使用示例进行说明:
在[2020-03-27 13:24:01 006]时刻,请求1、请求2、请求3在并发请求,并发累加器值为5,包括在此时刻之前,在请求过程中还未请求完成(成功货失败)的并发请求数2;
在[2020-03-27 13:24:01 506]时刻,也就是500ms之后,请求1已经请求完成,并且新的并发请求4到来,因此当前的并发请求是5;
在[2020-03-27 13:24:02 006]时刻,也就是500ms之后,请求4已经请求完成,并且新的并发请求5也到来,同时在2020-03-27 13:24:01 006时刻前的2个请求也完成,目前总的并发数为3个。
综上,本实施例具有如下创新点:
1.支持更细粒度的限流方案:基于调用方系统针对单个微服务的限流控制,能够对服务资源做更精细的调控;
2.、支持1:N复杂场景的限流控制:1:N场景下,通过预占机制,保障下游调用方系统在1:N场景下不会出现部分查询失败的场景,保障下游调用方系统查询的完整性;
3、提升微服务系统调用限流生命周期的管理效率:通过建立系统接入平台,将系统申请的并发与实际服务的并发限流进行关联,并能支持动态调整限流阈值。
名词解释:
TPS:每秒查询率,每秒的响应请求数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准;
并发数:系统同时处理的request/事务数
限流:限流的目的是通过对并发访问/请求进行限速或者一个时间窗口内的请求进行限速来保护系统,一旦达到限制速率则可以拒绝服务(定向到错误页或告知资源没有了)、排队或等待(比如秒杀、评论、下单)、降级(返回兜底数据或默认数据,如商品详情页库存默认有货)
调用方系统:一个微服务可能会被多个系统调用,这些系统被称为调用系统。
预占服务:单独的针对各个微服务的预占服务,预占服务有以下入参:调用方系统id、将预占的微服务id、预占TPS预占数;回参有:预占成功/失败标志和预占码,调用方系统对单个微服务的预占请求成功后,会返回预占码。调用方系统对微服务进行正式查询时,入参上会带上预占码,如果预占码在有效期内,则会微服务限流通过,否则微服务返回失败。
实施例二
本实施例提供一种用于微服务的限流装置,包括:
微服务配置单元,用于针对微服务系统提供的微服务配置出多个限流优先级,每个限流优先级包括对应的并发阈值和TPS阈值;
微服务接收单元,用于接收调用方系统的接入申请,获取调用方系统对所述微服务的期望并发和期望TPS,用于匹配微服务中对应的限流优先级;
预占单元,用于接收调用方系统的微服务请求进行预占判断,判断通过后基于当前微服务请求的TPS预占数进行正式预占,并向调用方系统返回预占码;
TPS限流单元,用于基于限流优先级中匹配的TPS阈值以及所述预占码和所述TPS预占数,判断是否对当前微服务请求执行TPS限流;
并发限流单元,用于基于限流优先级中匹配的并发阈值以及当前微服务请求的并发数,判断是否对当前微服务请求执行并发限流。
优选地,还包括:
定时更新单元,用于微服务系统定时跑任务,根据每个调用方系统对微服务的访问请求,定期更新每个调用方系统与微服务中匹配的限流优先级。
与现有技术相比,本发明实施例提供的用于微服务的限流装置的有益效果与上述实施例一提供的用于微服务的限流方法的有益效果相同,在此不做赘述。
实施例三
本实施例提供一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器运行时执行上述用于微服务的限流方法的步骤。
与现有技术相比,本实施例提供的计算机可读存储介质的有益效果与上述技术方案提供的用于微服务的限流方法的有益效果相同,在此不做赘述。
本领域普通技术人员可以理解,实现上述发明方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,上述程序可以存储于计算机可读取存储介质中,该程序在执行时,包括上述实施例方法的各步骤,而的存储介质可以是:ROM/RAM、磁碟、光盘、存储卡等。
以上,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
Claims (10)
1.一种用于微服务的限流方法,其特征在于,包括:
针对微服务系统提供的微服务配置出多个限流优先级,每个限流优先级包括对应的并发阈值和TPS阈值;
接收调用方系统的接入申请,获取调用方系统对所述微服务的期望并发和期望TPS,用于匹配微服务中对应的限流优先级;
获取调用方系统的微服务请求进行预占判断,判断通过后基于当前微服务请求的TPS预占数进行正式预占,并向调用方系统返回预占码;
基于限流优先级中匹配的TPS阈值以及所述预占码和所述TPS预占数,判断是否对当前微服务请求执行TPS限流;和/或,
基于限流优先级中匹配的并发阈值以及当前微服务请求的并发数,判断是否对当前微服务请求执行并发限流。
2.根据权利要求1所述的方法,其特征在于,还包括:
微服务系统定时跑任务,根据每个调用方系统对微服务的访问请求,定期更新每个调用方系统与微服务中匹配的限流优先级。
3.根据权利要求1所述的方法,其特征在于,接收调用方系统的接入申请获取对所述微服务的期望并发和期望TPS,用于匹配微服务中对应的限流优先级的方法包括:
微服务系统接收调用方系统的接入申请,所述接入申请中包括所述调用方系统的期望并发和期望TPS;
基于所述期望TPS,从多个限流优先级中匹配出最接近且小于所述期望TPS的TPS阈值,匹配出微服务中对应的限流优先级。
4.根据权利要求1所述的方法,其特征在于,获取调用方系统的微服务请求进行预占判断的方法包括:
当A+B+C<D时,则当前微服务请求的预占判断通过,否则当前微服务请求的预占判断不通过;
其中,所述A表示当前时间窗口正在执行的TPS请求数,所述B表示当前有效期内已申请但未执行的TPS请求数,所述C表示当前微服务请求的TPS预占数,所述D表示匹配限流优先级中的TPS阈值;
当前时间窗口正在执行的TPS请求数采用TPS累加器计数,当前有效期内已申请但未执行的TPS请求数采用合计累加器计数,当前微服务请求的TPS预占数采用预占累加器计数;
所述预占累加器中的key为预占码,value为TPS预占数,所述TPS累加器和所述合计累加器中的key由调用方系统ID、微服务系统ID和时间戳组成,value为请求数量。
5.根据权利要求4所述的方法,其特征在于,基于当前微服务请求的TPS预占数进行正式预占的方法包括:
根据时间戳从当前微服务请求的预占累加器中获取预占码以及TPS预占数进行正式预占,同时对合计累加器中的请求数量进行更新。
6.根据权利要求1所述的方法,其特征在于,基于限流优先级中匹配的TPS阈值以及所述预占码和所述TPS预占数,判断是否对当前微服务请求执行TPS限流的方法包括:
校验当前微服务请求在预占累加器中是否存在预占码,若是则继续校验当前微服务请求中的实际TPS请求数是否超过TPS预占数;
当超过时仅处理与TPS预占数量相等的实际TPS请求,其余的实际TPS请求执行TPS限流。
7.根据权利要求1所述的方法,其特征在于,基于限流优先级中匹配的并发阈值以及当前微服务请求的并发数,判断是否对当前微服务请求执行并发限流的方法包括:
校验并发累加器中的请求数量,当其大于并发阈值时对当前微服务请求执行并发限流。
8.一种用于微服务的限流装置,其特征在于,包括:
微服务配置单元,用于针对微服务系统提供的微服务配置出多个限流优先级,每个限流优先级包括对应的并发阈值和TPS阈值;
微服务接收单元,用于接收调用方系统的接入申请,获取调用方系统对所述微服务的期望并发和期望TPS,用于匹配微服务中对应的限流优先级;
预占单元,用于获取调用方系统的微服务请求进行预占判断,判断通过后基于当前微服务请求的TPS预占数进行正式预占,并向调用方系统返回预占码;
TPS限流单元,用于基于限流优先级中匹配的TPS阈值以及所述预占码和所述TPS预占数,判断是否对当前微服务请求执行TPS限流;
并发限流单元,用于基于限流优先级中匹配的并发阈值以及当前微服务请求的并发数,判断是否对当前微服务请求执行并发限流。
9.根据权利要求8所述的装置,其特征在于,还包括:
定时更新单元,用于微服务系统定时跑任务,根据每个调用方系统对微服务的访问请求,定期更新每个调用方系统与微服务中匹配的限流优先级。
10.一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,其特征在于,计算机程序被处理器运行时执行上述权利要求1至7任一项所述方法的步骤。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011329458.3A CN112367268B (zh) | 2020-11-24 | 2020-11-24 | 用于微服务的限流方法及装置 |
CA3140333A CA3140333A1 (en) | 2020-11-24 | 2021-11-24 | Microservice rate limiting method and apparatus |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011329458.3A CN112367268B (zh) | 2020-11-24 | 2020-11-24 | 用于微服务的限流方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112367268A true CN112367268A (zh) | 2021-02-12 |
CN112367268B CN112367268B (zh) | 2022-07-05 |
Family
ID=74532770
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011329458.3A Active CN112367268B (zh) | 2020-11-24 | 2020-11-24 | 用于微服务的限流方法及装置 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN112367268B (zh) |
CA (1) | CA3140333A1 (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113285995A (zh) * | 2021-05-18 | 2021-08-20 | 中国人民解放军陆军工程大学 | 一种基于sdn的微服务请求自适应映射分配系统及方法 |
CN114157717A (zh) * | 2021-11-05 | 2022-03-08 | 福建福诺移动通信技术有限公司 | 一种微服务动态限流的系统及方法 |
CN114625520A (zh) * | 2022-05-16 | 2022-06-14 | 中博信息技术研究院有限公司 | 一种基于限流的分布式任务调度网关调度方法 |
CN114650297A (zh) * | 2022-02-14 | 2022-06-21 | 浙江大学 | 一种多微服务调用环境下自适应自动缩放方法及系统 |
CN114760250A (zh) * | 2022-03-18 | 2022-07-15 | 福建天晴数码有限公司 | 一种服务网关通过分层限流保障高可用的方案及系统 |
CN115242723A (zh) * | 2022-07-20 | 2022-10-25 | 中国银行股份有限公司 | 一种跨系统的限流方法及装置 |
CN115277588A (zh) * | 2022-06-22 | 2022-11-01 | 平安银行股份有限公司 | 一种基于中台系统的熔断限流系统 |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115514650A (zh) * | 2022-09-21 | 2022-12-23 | 杭州网易再顾科技有限公司 | 限流场景下的带宽管理方法、装置、介质及电子设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20170272371A1 (en) * | 2016-03-21 | 2017-09-21 | Alibaba Group Holding Limited | Flow control in connection with an access request |
CN109684105A (zh) * | 2018-12-18 | 2019-04-26 | 中国平安人寿保险股份有限公司 | 在微服务架构下对请求进行控制的方法、设备和存储介质 |
CN111475373A (zh) * | 2020-03-10 | 2020-07-31 | 中国平安人寿保险股份有限公司 | 微服务下的服务控制方法、装置、计算机设备及存储介质 |
-
2020
- 2020-11-24 CN CN202011329458.3A patent/CN112367268B/zh active Active
-
2021
- 2021-11-24 CA CA3140333A patent/CA3140333A1/en active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20170272371A1 (en) * | 2016-03-21 | 2017-09-21 | Alibaba Group Holding Limited | Flow control in connection with an access request |
CN109684105A (zh) * | 2018-12-18 | 2019-04-26 | 中国平安人寿保险股份有限公司 | 在微服务架构下对请求进行控制的方法、设备和存储介质 |
CN111475373A (zh) * | 2020-03-10 | 2020-07-31 | 中国平安人寿保险股份有限公司 | 微服务下的服务控制方法、装置、计算机设备及存储介质 |
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113285995B (zh) * | 2021-05-18 | 2023-06-13 | 中国人民解放军陆军工程大学 | 一种基于sdn的微服务请求自适应映射分配系统及方法 |
CN113285995A (zh) * | 2021-05-18 | 2021-08-20 | 中国人民解放军陆军工程大学 | 一种基于sdn的微服务请求自适应映射分配系统及方法 |
CN114157717A (zh) * | 2021-11-05 | 2022-03-08 | 福建福诺移动通信技术有限公司 | 一种微服务动态限流的系统及方法 |
CN114157717B (zh) * | 2021-11-05 | 2023-09-29 | 福建福诺移动通信技术有限公司 | 一种微服务动态限流的系统及方法 |
CN114650297A (zh) * | 2022-02-14 | 2022-06-21 | 浙江大学 | 一种多微服务调用环境下自适应自动缩放方法及系统 |
CN114650297B (zh) * | 2022-02-14 | 2023-03-10 | 浙江大学 | 一种多微服务调用环境下自适应自动缩放方法及系统 |
CN114760250A (zh) * | 2022-03-18 | 2022-07-15 | 福建天晴数码有限公司 | 一种服务网关通过分层限流保障高可用的方案及系统 |
CN114760250B (zh) * | 2022-03-18 | 2023-11-03 | 福建天晴数码有限公司 | 一种服务网关通过分层限流保障高可用的方案及系统 |
CN114625520A (zh) * | 2022-05-16 | 2022-06-14 | 中博信息技术研究院有限公司 | 一种基于限流的分布式任务调度网关调度方法 |
CN114625520B (zh) * | 2022-05-16 | 2022-08-30 | 中博信息技术研究院有限公司 | 一种基于限流的分布式任务调度网关调度方法 |
CN115277588B (zh) * | 2022-06-22 | 2023-06-09 | 平安银行股份有限公司 | 一种基于中台系统的熔断限流系统 |
CN115277588A (zh) * | 2022-06-22 | 2022-11-01 | 平安银行股份有限公司 | 一种基于中台系统的熔断限流系统 |
CN115242723A (zh) * | 2022-07-20 | 2022-10-25 | 中国银行股份有限公司 | 一种跨系统的限流方法及装置 |
CN115242723B (zh) * | 2022-07-20 | 2024-03-01 | 中国银行股份有限公司 | 一种跨系统的限流方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CA3140333A1 (en) | 2022-05-24 |
CN112367268B (zh) | 2022-07-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112367268B (zh) | 用于微服务的限流方法及装置 | |
CN110489447B (zh) | 数据查询方法、装置、计算机设备和存储介质 | |
CN110276182B (zh) | Api分布式限流的实现方法 | |
CN111752965B (zh) | 一种基于微服务的实时数据库数据交互方法和系统 | |
US7734676B2 (en) | Method for controlling the number of servers in a hierarchical resource environment | |
US7349340B2 (en) | System and method of monitoring e-service Quality of Service at a transaction level | |
WO2018118726A1 (en) | Detecting and preventing fraud and abuse in real time | |
US20200012602A1 (en) | Cache allocation method, and apparatus | |
US11025709B2 (en) | Load processing method and apparatus | |
US9667552B2 (en) | Real-time SLA impact analysis | |
US20170339243A1 (en) | Method and system for real-time resource consumption control in a distributed computing environment | |
CN110471749A (zh) | 任务处理方法、装置、计算机可读存储介质和计算机设备 | |
CN111260475A (zh) | 一种数据处理方法、区块链节点设备及存储介质 | |
CN114640700B (zh) | 一种调用频次控制方法及装置 | |
CN111314502B (zh) | 一种基于域名解析系统的域名部署方法及装置 | |
CN110233843B (zh) | 一种用户请求的处理方法及装置 | |
CN116319810A (zh) | 分布式系统的流量控制方法、装置、设备、介质及产品 | |
CN114338811B (zh) | 交易限流方法、装置、服务器、存储介质及产品 | |
CN113312359B (zh) | 一种分布式作业进度计算方法、装置和存储介质 | |
CN108874948B (zh) | 一种网站资源访问方法及装置 | |
CN107623577B (zh) | 服务调用流量控制方法及装置 | |
CN115495783B (zh) | 一种配置式的数据服务暴露解决方法及系统 | |
US20240106725A1 (en) | Managing service level agreements by a distributed ledger network | |
CN113326153A (zh) | 一种业务请求的处理方法及装置 | |
CN117827874A (zh) | 数据查询方法及电子设备 |
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 |