具体实施方式
为了使本技术领域的人员更好地理解本说明书一个或多个实施例中的技术方案,下面将结合本说明书一个或多个实施例中的附图,对本说明书一个或多个实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本说明书一部分实施例,而不是全部的实施例。基于本说明书一个或多个实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本公开保护的范围。
图1示例了一种服务调用方对服务提供方的服务调用。其中,服务调用方的业务运行依赖于外部系统的服务提供方提供的服务,服务调用方可以调用服务提供方的服务借以完成本地的业务。但是,服务调用方不能知晓服务提供方的服务容量,即不能获知服务提供方在单位时间内能够提供的最大有效调用量,并且,服务调用方也不能知晓服务提供方侧的操作系统的运行情况和负载状况。
尽管服务调用方不能知晓服务提供方的运行状况,服务调用方在调用服务提供方提供的服务时,通常会有如下表现:在对服务的调用量很小时,服务调用的成功率极高;随着调用量的逐渐增大,调用成功率虽稍有下降但整体十分平稳,成功率也保持相对高位,此时为服务提供方的最佳服务状态。当服务的调用量进一步增大,也许突破了服务提供方的服务容量时,调用成功率开始下滑。并且,随着服务调用量的增加,调用成功率下降的速度也越来越快。当服务调用量继续增大,可能导致服务提供方的压力到达极限,调用成功率跌至零,此时为服务提供方的崩溃期。
上述的服务调用方在调用服务时的表现,是由于服务提供方在提供互联网服务时一般会遵循雪崩效应。雪崩效应如下:一般地,互联网系统依赖于很多资源,如计算资源、网络带宽资源、数据库资源、文件系统资源,在系统内,每个资源的量也是有限的。在服务链路上,随着调用量的增加,某一项资源的容量到达极限,导致整体链路的耗时增加,上层系统的负载也会相应的增加,整体服务容量就出现了瓶颈。如果调用量继续增加,整体的调用成功率会急剧下滑;同时由于服务资源的占用,系统提供的其他服务能力也会急剧下滑,最终导致整个系统无法提供有效服务,我们称之为雪崩效应。
可以看到,尽管服务调用方不能知晓服务提供方的运行状况,不能获知服务提供方侧的服务容量,但是,当服务提供方的运行状况变化时,服务调用方侧也会具有相应的表现。
例如,如果服务调用方在调用服务时的平均时长较短,表明还远未达到服务提供方的服务容量,服务提供方侧的压力较低。
又例如,如果服务调用方在调用服务时的调用成功率开始出现了明显下降,表明此时的服务提供方也许压力较大,承受的调用量已经超过了服务容量。
再例如,如果服务调用方在调用服务时的调用成功率已经出现很快速的下降,趋近于零,表明服务提供方快要崩溃了,处于压力的极限期。
基于上述,本说明书至少一个实施例提供的限流方法,将由服务调用方的角度,根据服务调用方在调用服务时的表现,来推测和评估服务提供方的服务容量,并基于该评估的服务容量来对服务调用方的服务调用进行限流。
在下面的描述中,将说明如何根据服务调用方在调用服务时的表现评估服务提供方的服务容量,以及说明如何根据评估的容量进行限流。
请继续参见图2的示意,考虑到由于服务提供方自身的稳定性问题,例如,运维水平、服务器稳定性等原因,可能会导致服务提供方的服务容量有较大的波动,因此,为了保障在这种复杂的外部环境下的服务质量,本说明书至少一个实施例的限流方法划分了时间窗口,按照时间窗口进行统计和服务容量的评估。时间窗口可以是将时间按照单位分段,每个分段称为一个时间窗口,例如,该时间窗口的长度可以是5秒、或者1秒、或者8秒等,根据实际需求确定。
如图2所示,服务调用方还设置了统计模块21和评估模块22。其中,统计模块21可以负责分别统计各个时间窗口内对服务调用的服务表现数据,例如,以某一个服务Service-1(简称:S1)为例,可能在时间窗口1内发生了5次对该S1的调用,在时间窗口2内发生了10次对S1的调用,那么对于每一个时间窗口,统计模块21都可以统计对S1调用的服务表现数据,该服务表现数据可以是在调用服务完成后得到的用于表示调用情况的数据。
示例性的,上述的服务表现数据,包括但不限于如下的至少一项,需要注意的是,这里的服务表现数据都是以时间窗口为统计单位。
所述时间窗口内对服务的调用量:例如,在某个时间窗口内,对S1服务总共发生了10次调用;
所述时间窗口内对服务的调用成功量:例如,在对S1进行的10次调用中,调用成功的数量是8次;
所述时间窗口内对服务的调用成功率:例如,可以用调用成功量和调用量的比值得到调用成功率,可以是80%;
所述时间窗口内对服务的服务调用的平均耗时:例如,可以将时间窗口内每一次调用S1的时间相加,再进行平均,即可得到平均耗时。
统计模块21对服务表现数据的统计可以是逐步累加得到,比如,每发生一次对S1的调用,则可以将调用量加1,并可以在每次对S1调用完成后,都记录本次调用是否成功、调用耗时等参数,以用于后续统计调用成功量和平均耗时。图2示意了对时间窗口1和时间窗口3的服务表现数据的统计,其他的时间窗口也都会进行统计,只是未示出。
统计模块在统计服务表现数据时,可以按单机调用量统计,也可以按服务集群调用量统计。此外,如图2所示,服务调用方还设置了评估模块22,其中,统计模块22获取服务表现数据相当于在采集样本,而评估模块22可以在统计模块22得到的服务表现数据的基础上,依据这些样本进行分析,评估服务提供方的服务容量。当每个时间窗口到达结束时间后,评估模块22可以就对该窗口对应的限流值进行评估。如果统计模块是按单机调用进行统计,那么评估模块的评估也是针对单机。
评估模块22在评估时也是以时间窗口为单位,例如,评估的结果可以称为限流值,限流值是一个服务调用的成功率开始下滑的转折点,如图2所示,各个时间窗口都会评估出一个对应的限流值。这种在各个时间窗口都分别进行统计和评估的方式,有利于动态的评估服务提供方的限流值的变化,适应服务提供方的容量拨动,从而使得服务调用方侧的限流控制也更加准确。
接着参见图2,服务调用方接收到的服务调用请求也是发生在某个时间窗口内,例如,在时间窗口4内发生了一个对S1的服务调用请求,那么,评估模块22还可以确定对于这个服务调用请求所在的时间窗口,该时间窗口对应的目标限流值是多少,例如,该目标限流值可以是100次。该目标限流值确定以后,服务调用方可以根据该目标限流值来控制是否要对一次服务调用请求进行限流。如图3所示,描述了服务调用方如何进行限流,可以包括:
在步骤300中,接收对目标服务的服务调用请求。
例如,假设服务调用方接收到了一个对S1的调用请求,调用方可以根据该图3所示的流程判断是否要根据该调用请求执行向服务提供方调用S1,此时所请求调用的服务S1可以称为目标服务。
在步骤302中,确定服务调用请求所在的当前时间窗口使用的目标限流值。
本步骤中,服务调用方可以确定在本次判断中,所依据的目标限流值是多少。其中,所述的当前时间窗口是服务调用请求所在的窗口,例如,在时间窗口4内发生了一个对S1的服务调用请求,那么当前时间窗口就是时间窗口4。
评估模块22可以根据当前时间窗口之前的至少一个时间窗口对应的限流值,确定所述目标限流值。例如,当前时间窗口是时间窗口4时,评估模块22可以直接将时间窗口3的限流值作为目标限流值,或者也可以综合根据时间窗口2和时间窗口3的限流值确定目标限流值,或者还可以综合根据时间窗口1至时间窗口3的限流值来确定目标限流值。详细的确定方法后续详述。
在步骤304中,获取当前时间窗口内已发生的对目标服务的服务调用量。
例如,仍以当前时间窗口是窗口4为例,假设窗口4对应的时间轴范围是第15秒至第20秒,并且假设在该“15~20”秒的范围内,以第15秒起始,以步骤300中接收到的服务调用请求发生时刻即第17秒为截止,总共发生了四次对S1的调用(包括已经执行的S1调用、以及本次的尚未开始调用的服务调用请求),那么本步骤的服务调用量是4。
在步骤306中,判断所述服务调用量是否达到目标限流值。
本步骤中,可以判断服务调用量是否达到了目标限流值,所述的达到可以是服务调用量是否大于或等于目标限流值。
若服务调用量达到目标限流值,则继续执行步骤308;否则,执行步骤310。
在步骤308中,拦截所述服务调用请求。
由于服务调用量达到目标限流值,这就说明如果继续允许本次调用,那可能会导致服务提供方承受较大的压力,并且,服务调用方侧的调用成功率可能下降,因此,服务调用方可以拦截本次调用,即对服务调用进行限流。
在步骤310中,根据服务调用请求,向服务提供方调用对应的服务。
本步骤中,服务调用方将向服务提供方调用目标服务。并且,在调用完成后,服务调用方的统计模块可以统计本次调用的调用耗时、调用是否成功等调用情况,并且统计模块可以继续累计当前时间窗口的调用量、调用成功量等。
可以看到,服务调用方是根据评估出的目标限流值来判断是否对服务的调用请求进行限流,而目标限流值可以根据评估模块22对当前时间窗口之前的至少一个时间窗口对应的限流值确定。
如下将进一步详细描述评估模块22如何评估各个时间窗口的限流值,并说明如何根据评估得到的至少一个限流值来确定目标限流值。
单个时间窗口的限流值的评估:
首先,可以建立服务表现数据和限流值之间的函数关系:
1、随着服务调用方侧的调用量的逐步增加,服务提供方的压力逐渐增大,导致服务调用的成功率也会由平稳向快速下滑转变。可以用雪崩效应函数来表示服务调用方侧随着服务调用量增加而出现的调用成功率变化的表现:
雪崩效应函数的形式可以有多种,只要函数y=f(x)满足如下条件,就可以选做评估使用的雪崩效应函数:
limx→0f(x)=1,即服务调用量足够小时,调用成功率趋近于1;
f(c)=0,即在崩溃临界点时的调用成功率为0;
f″(x)<0,x∈[0,c],即f(x)的二阶导数在[0,c]区间内小于0,代表调用成功率随服务调用量的增加,下降的越来越快。
例如,示例一种雪崩效应函数的形式:
上述的公式(1)中,x是服务调用量,c是崩溃临界点,c>0;n是效应指数,n>1;r是服务调用的成功率。
根据公式(1),当n=6,c=100时,上述雪崩效应函数的表现如图4所示。由图4可以看到,该函数的表现符合上述的雪崩效应函数满足的几种条件,例如,当服务调用量足够小时,调用成功率趋近于1;当调用量到达崩溃临界点时,调用成功率几乎为0,并且,调用成功率一开始较为平稳,后期出现了明显下滑。
实际上,上述的调用成功率出现明显下滑的转折点,就是后续要评估的限流值,也是服务提供方的有效服务容量。
2、根据上述的雪崩效应函数,可以建立调用极值关系式如下:
在上述公式(2)中,r表示调用成功率,并且r是以公式(1)来表示,rx即为调用成功量,x是服务调用量。
对以上公式(2)的函数求导
当(rx)′=0时,rx为极大值,解出x得:
根据公式(3)计算的x是调用量极值,即在一个时间窗口内,服务调用方在进行调用限流时依据的调用量极值可以是x,若调用量小于该x,则可以允许调用,否则,可以进行限流。
参见公式(3),若要得到x,需要计算c,该c是崩溃临界点。该崩溃临界点是当服务调用方对目标服务的调用量在所述崩溃临界点时,调用成功率为零。
3、可以根据服务表现数据和崩溃临界点评估函数,得到崩溃临界点的数值。
其中,崩溃临界点评估函数可以遵守以下原则:
服务调用的平均耗时越短,崩溃临界点的数值越大;服务调用的平均耗时越长,崩溃临界点的数值越小;
服务调用方容忍的调用超时时间越长,崩溃临界点的数值越大;服务调用方容忍的调用超时时间越短,崩溃临界点的数值越小;
服务调用的调用成功率越高,崩溃临界点的数值越大;服务调用的调用成功率越低,崩溃临界点的数值越小。
例如,示例一种崩溃临界点评估函数:
其中,在公式(4)中,如下的参数都可以由服务调用方的统计模块对时间窗口内发生的服务调用的情况进行统计得到。
c:崩溃临界点;
d:时间修正底数,1>d>0;
m:调用方最大容忍的超时时间;
t:服务调用的平均耗时;
r:服务调用成功率;
s:调用成功量;
i:修正值。
如上,可以根据公式(4),由服务表现数据(如,t,r,s等)计算得到崩溃临界点数值c,并根据公式(3)得到调用量极值x。
此外,服务调用方可以将调用量极值与时间窗口内实际发生的调用成功量进行比较,选择两者中的较大者,作为该时间窗口的限流值。例如,以图2中的时间窗口3为例,可以根据时间窗口3统计的服务表现数据计算出c,进而计算出调用量极值,并将调用量极值与该时间窗口3内实际发生的调用成功量比较,择两者中的较大者,作为时间窗口3对应的限流值。
根据上述的方法,评估模块22可以计算出各个时间窗口对应的限流值,这些各个时间窗口的限流值能够大致的评估服务提供方在所述时间窗口提供的有效服务容量,整体上也可以反映服务提供方的容量的动态波动。
评估模块22可以在每个时间窗口结束时进行评估,在窗口结束时,统计模块21可以统计出这个时间窗口的服务表现数据,例如,服务调用成功率、调用成功量等,评估模块22可以根据这些服务表现数据进一步计算得到该窗口对应的限流值。如果一个服务在某个窗口没有发生过调用,或者调用量极少,也可以不评估该服务对应的限流值。
作为服务调用方,可以是一个互联网系统,可能会依赖了多个外部服务,不同的服务可以对应着不同的服务提供方。那么,对于不同的服务来说,服务调用方也可以存储各个服务分别对应的限流值,并且,还可以存储各个时间窗口评估出的限流值。如下表1的示例,可以由表1看到各个服务在各个时间窗口的限流值,可以不用存储每个窗口,例如,可以存储最近的相邻的3个或4个窗口的限流值即可,以备于后续可能进行的多窗口限流值的综合评估。例如,在时间窗口1,评估出的服务S1的限流值是A11,服务S2的限流值是A12。
表1评估的限流值
|
服务S1 |
服务S2 |
服务S3 |
时间窗口1 |
A11 |
A12 |
A13 |
时间窗口2 |
A21 |
A22 |
A23 |
时间窗口3 |
A31 |
A32 |
A33 |
时间窗口4 |
|
|
|
当前时间窗口的目标限流值的确定:
以当前时间窗口是图2中的时间窗口4为例,其中,时间窗口1至时间窗口3的限流值都已经计算得到。对于时间窗口4的限流值,可以按照如下列举的几种方式的其中一种方式确定,但是实际实施中并不局限于此:
一种方式可以是,可以直接将时间窗口3的限流值作为时间窗口4使用的目标限流值。比如,当时间窗口3的时间达到该窗口的结束时间时,评估模块22计算出对应的限流值,并作为目标限流值,以用于在时间窗口4接收到服务调用请求时,据以判断是否要进行限流。
同理,当时间轴进行到时间窗口4时,将时间窗口3计算得到的限流值作为目标限流值,该目标限流值是正在使用作为是否限流的判断依据的数值,可以称为“当前限流值”。那么,当时间轴继续行进到时间窗口5时,根据上面描述的方法,将统计和评估时间窗口4对应的限流值,并作为目标限流值,那么可以将时间窗口4对应的限流值称为“新评估的限流值”,并将该“新评估的限流值”替换掉上述的“当前限流值”,用于进行时间窗口5的限流控制。
另一种方式可以是,不再直接将当前时间窗口之前的相邻时间窗口的限流值作为目标限流值,而是可以综合当前时间窗口之前的多个窗口的限流值确定。例如,如果一个时间窗口对目标服务的调用量大于x,就对该时间窗口进行限流值的评估;并且,当评估出连续的10个时间窗口的限流值以后,将这10个时间窗口对应的10个限流值进行平均,将平均值作为当前时间窗口的目标限流值。各个时间窗口都这样同样的方式一直滚动下去。
又一种方式是,当前时间窗口的目标限流值的确定,不仅综合了至少一个时间窗口的限流值确定,而且还可以考虑更多的条件,比如,可以结合考虑时间窗口的服务调用质量或者调用量。例如,相邻时间窗口内的服务调用是否是低质量的服务调用表现,相邻时间窗口内的服务调用量是否大于当前限流值对应窗口的服务调用量,等,根据这些条件,目标限流值可以有其他确定方式,以使得目标限流值的确定更加准确和符合实际情况。
以当前时间窗口是图2中的时间窗口4为例,时间窗口3是时间窗口4之前的相邻时间窗口。在判断所述相邻时间窗口内的服务调用是否满足低质量调用条件时,所述的低质量调用条件,可以包括:
所述相邻时间窗口内的服务调用成功率低于第一阈值;
或者,所述相邻时间窗口内的服务调用的平均耗时与服务调用方的最大容忍耗时的比值大于第二阈值。
若满足低质量调用条件,那么为了防止服务提供方的偶然抖动导致限流值急剧变小,影响到正常服务,可以根据当前时间窗口之前相邻的至少两个时间窗口对应的限流值,确定所述目标限流值。
如下是以两个时间窗口的限流值综合评估为例,需要说明的是,不局限于两个,可以综合至少两个时间窗口的限流值确定:
l=(1-w)*o+w*n………(5)
l:综合评估后的新限流值;
w:权重值,1≥w>0
o:当前限流值;
n:新评估出的限流值,例如,时间窗口3的限流值。
由公式(5)看到,目标限流值已经不是直接采用时间窗口3评估出的限流值,而是综合了当前限流值和时间窗口3的限流值得到。
若不满足低质量调用条件,此时可以进一步比较相邻时间窗口的服务调用量和当前限流值对应的时间窗口的服务调用量。例如,相邻时间窗口是时间窗口3,当前限流值对应的时间窗口是时间窗口2,可以比较时间窗口2和时间窗口3的服务调用量。如果相邻时间窗口的服务调用量小于所述当前限流值对应的时间窗口的服务调用量,将所述当前限流值作为目标限流值,即如果时间窗口3的服务调用量小于时间窗口2的服务调用量,则仍用当前限流值作为目标限流值,原因在于,在非低质量服务下,调用量越大,越能准确、真实地反映服务容量的情况。同理,如果时间窗口3的服务调用量大于或等于时间窗口2的服务调用量,则用时间窗口3的限流值替换掉当前限流值,作为目标限流值。
如下的表2,示例了一个随着时间窗口的移动,在不同的时间窗口使用的不同的目标限流值的动态变化。
表2各时间窗口的动态限流
对于表2,解释如下:
其中,调用量是在窗口中对应的对目标服务的调用量。服务表现数据可以包括调用成功率、调用的平均耗时等。评估限流值是根据当前的窗口计算的限流值,例如,窗口6的评估限流值是根据窗口6统计的服务表现数据计算得到。目标限流值是最终决定在当前窗口的下一个窗口使用的限流值,例如,窗口6对应的那一行的目标限流值,是确定在要在窗口7使用的限流值。
对于表2中的“说明”,用于解释在当前窗口结束时,如何确定目标限流值。
例如,窗口6中的“说明”指的是,窗口6的服务调用质量较好,但是窗口6的服务调用量比窗口5的调用量大,所以决定采用窗口6的服务表现数据评估出的限流值800作为窗口7的目标限流值。
又比如,窗口3对应的“说明”指的是,窗口3的服务调用质量较低,窗口3新评估的限流值是200,需要根据之前的窗口的限流值(比如,新评估出的200,窗口3当前使用的2000)综合确定,得到1100,该1100相比于窗口3当前使用的2000有了一定程度的下折。
再比如,窗口8中的“说明”指的是,窗口8的服务调用质量较好,但是窗口8的服务调用量比该窗口8当前使用的限流值(800)对应的窗口(800对应的窗口是窗口6,窗口7和窗口8一直在延用窗口6使用的限流值)的调用量小,所以决定仍然延用窗口6的限流值800作为窗口9的目标限流值。
上述的表2也仅是示例,只是一个策略而已,策略可以有很多种,不局限于此。
为了进一步提高动态限流的准确性,可以设置一个观察窗口,在服务运行一段时间后,评估模块采集到了足够的样本进行分析,限流才开始生效。例如,观察窗口可以是图2中的时间窗口1加上时间窗口2这么一个较长的时间段,评估模块可以根据这个时间段内的服务表现数据进行评估,得到服务提供方的限流值,并将该限流值作为时间窗口3使用的目标限流值。后续就可以按照上述的方法,每个时间窗口评估限流值即可。
本说明书至少一个实施例的限流方法,通过由服务调用方在各个时间窗口根据调用服务的服务表现数据,评估计算服务提供方的限流值,使得尽管调用方无法获知外部服务容量,也可以根据调用方侧的调用表现来评估外部服务容量,可以动态的获得对服务提供方的容量评估,并据此进行动态限流,解决了互联网复杂环境下无法压测导致无法进行准确限流的问题,提高了服务质量与用户体验。
为了实现上述方法,本说明书至少一个实施例还提供了一种服务调用的限流装置。所述装置用于由服务调用方决定是否对当前时间窗口内接收到的服务调用请求进行限流,所述服务调用请求用于请求调用服务提供方提供的目标服务。如图5所示,该装置可以包括:数据统计模块51、评估处理模块52、请求接收模块53、限流确定模块54、限流判断模块55和限流控制模块56。
数据统计模块51,用于对于当前时间窗口之前的各个时间窗口,分别获取所述各个时间窗口内目标服务的服务表现数据,所述服务表现数据是在调用目标服务完成后得到的用于表示调用完成情况的数据;
评估处理模块52,用于对于各个时间窗口中的每个时间窗口,根据服务表现数据,评估所述服务提供方在所述时间窗口对所述目标服务提供的限流值;
请求接收模块53,用于在当前时间窗口,接收对目标服务的服务调用请求;
限流确定模块54,用于确定所述当前时间窗口使用的目标限流值,所述目标限流值是根据当前时间窗口之前的至少一个时间窗口对应的限流值确定;
限流判断模块55,用于获取所述当前时间窗口内已发生的对目标服务的服务调用量,并判断所述服务调用量是否达到目标限流值;
限流控制模块56,用于在所述服务调用量达到目标限流值时,拦截所述服务调用请求。
在一个例子中,评估处理模块52,在用于根据所述服务表现数据评估所述服务提供方在所述时间窗口对目标服务提供的限流值时,包括:
根据所述服务表现数据和崩溃临界点评估函数,得到崩溃临界点的数值,当服务调用方对目标服务的调用量在所述崩溃临界点时的调用成功率为零;
根据所述崩溃临界点的数值和调用极值关系式,得到在时间窗口内对目标服务的调用量极值;所述调用极值关系式根据雪崩效应函数确定,所述雪崩效应函数用于表示服务调用方对目标服务的调用量逐渐增加时调用成功率的变化;
选择所述调用量极值和所述时间窗口内实际发生的调用成功量之间的较大者,作为所述时间窗口提供的限流值。
在一个例子中,限流确定模块54,在用于确定当前时间窗口使用的目标限流值时,包括:
判断所述相邻时间窗口内的服务调用是否满足低质量调用条件;
若满足低质量调用条件,根据当前时间窗口之前相邻的至少两个时间窗口对应的限流值,确定所述目标限流值。
上述实施例阐明的装置或模块,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
为了描述的方便,描述以上装置时以功能分为各种模块分别描述。当然,在实施本说明书一个或多个实施例时可以把各模块的功能在同一个或多个软件和/或硬件中实现。
上述图中所示流程中的各个步骤,其执行顺序不限制于流程图中的顺序。此外,各个步骤的描述,可以实现为软件、硬件或者其结合的形式,例如,本领域技术人员可以将其实现为软件代码的形式,可以为能够实现所述步骤对应的逻辑功能的计算机可执行指令。当其以软件的方式实现时,所述的可执行指令可以存储在存储器中,并被设备中的处理器执行。
例如,对应于上述方法,本说明书一个或多个实施例同时提供一种服务调用的限流设备,该设备应用于服务调用方,该设备可以包括处理器、存储器、以及存储在存储器上并可在处理器上运行的计算机指令,所述处理器通过执行所述指令,用于实现如下步骤:
对于当前时间窗口之前的各个时间窗口,分别获取所述各个时间窗口内目标服务的服务表现数据,所述服务表现数据是在调用目标服务完成后得到的用于表示调用完成情况的数据;
对于所述各个时间窗口中的每个时间窗口,根据所述服务表现数据,评估所述服务提供方在所述时间窗口对所述目标服务提供的限流值;
在所述当前时间窗口,接收对目标服务的服务调用请求;
确定所述当前时间窗口使用的目标限流值,所述目标限流值是根据当前时间窗口之前的至少一个时间窗口对应的限流值确定;
获取所述当前时间窗口内已发生的对目标服务的服务调用量,并判断所述服务调用量是否达到目标限流值;
若所述服务调用量达到目标限流值,拦截所述服务调用请求。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员应明白,本说明书一个或多个实施例可提供为方法、系统或计算机程序产品。因此,本说明书一个或多个实施例可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本说明书一个或多个实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本说明书一个或多个实施例可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本说明书一个或多个实施例,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于数据处理设备实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
以上所述仅为本说明书一个或多个实施例的较佳实施例而已,并不用以限制本说明书一个或多个实施例,凡在本说明书一个或多个实施例的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书一个或多个实施例保护的范围之内。