接口限流方法、装置、电子设备及存储介质与流程

文档序号:17817473发布日期:2019-06-05 21:56
接口限流方法、装置、电子设备及存储介质与流程

本发明涉及移动通信技术领域,具体涉及一种接口限流方法、装置、电子设备及存储介质。



背景技术:

要保证业务系统稳定性应对大流量访问请求,通常需要注意两个功能控制。一个是请求的限流,一个是服务降级处理。所述两个功能控制的意义在于不会让业务系统的服务出现瘫痪。业务系统中每个接口所能提供的单位时间服务能力是有限的。当超过服务的承载能力,一般会造成整个接口服务停顿,或者业务系统崩溃,或者带来一系列未知的连锁反应,这样会造成整个系统的服务能力丧失。因此,有必要在服务能力超限的情况下实时过载保护。

现有技术中通常采用的控流的方法,即限制某个应用程序编程接口(Application Programming Interface,API)在每分钟内的访问次数,来实现限流的目的。然而,现有技术中的限流策略是通过配置系统或配置文件直接配置完成的,是固定不变的限流规则,例如固定限制每秒的访问次数、每分钟的访问次数等。



技术实现要素:

鉴于以上内容,有必要提出一种接口限流方法、装置、电子设备及存储介质,实现接口支持任意单位时间的限流功能,使限流功能更加灵活,从而能适应更多的业务需求。

本发明的第一方面提供一种接口限流方法,所述方法包括:

获取当前接口的限流阈值;

接收访问请求,并确认所述访问请求是否为正常请求;

当确认所述访问请求为正常请求时,统计预设时间内所述当前接口接收的访问请求的总数量;

根据所述访问请求的总数量或访问请求的类型确认所述当前接口的新的限流阈值,并设置所述新的限流阈值在单位时间内允许接收的访问请求数量的最大值;及

将所述当前接口的限流阈值更新为新的限流阈值,并根据所述新的限流阈值对所述当前接口进行限流控制。

优选地,所述根据统计的访问请求的总数量确认所述当前接口的新的限流阈值包括:

当所述统计的访问请求的总数量大于等于所述当前接口的限流阈值时,在所述当前接口的限流阈值的基础上升高阈值以得到新的限流阈值;

当所述统计的访问请求的总数量小于所述当前接口的限流阈值时,在所述当前接口的限流阈值的基础上降低阈值以得到新的限流阈值。

优选地,所述根据所述访问请求的类型确认所述当前接口的新的限流阈值包括:

当所述访问请求为关键请求时,在所述当前接口的限流阈值的基础上升高阈值来得到新的限流阈值;

当所述访问请求为非关键请求,在当前接口的限流阈值的基础上降低阈值来得到新的限流阈值。

优选地,所述确认所述访问请求是否为正常请求的方法包括:

判断所述访问请求是否存在尝试注入攻击;或

判断所述访问请求是否为恶意注册请求;或

判断所述访问请求是否为爬虫过度抓取请求;

当所述访问请求存在尝试注入攻击或所述访问请求是恶意请求或所述访问请求是爬虫过度抓取请求中的一种或多种时,确定所述访问请求为非正常请求;

当所述访问请求不存在尝试注入攻击且所述访问请求不是恶意注册请求且所述访问请求不是爬虫过度抓取请求时,确认所述访问请求为正常请求。

优选地,所述方法还包括:

当确认所述访问请求为非正常请求时,拒绝接收所述访问请求。

优选地,通过修改源码提供的限流配置来设置所述新的限流阈值在单位时间内允许接收的访问请求数量的最大值。

优选地,根据所述新的限流阈值对所述当前接口进行限流控制的方法包括以下方法中的至少一种:

通过限制单位时间段内调用量来限流;

通过限制系统的并发调用程度来限流;

使用漏桶算法来进行限流;

使用令牌桶算法来进行限流。

本发明的第二方面提供一种接口限流装置,所述装置包括:

获取模块,用于获取当前接口的限流阈值;

接收模块,用于接收访问请求,并确认所述访问请求是否为正常请求;

统计模块,用于当确认所述访问请求为正常请求时,统计预设时间内所述当前接口接收的访问请求的总数量;

设置模块,用于根据所述访问请求的总数量或访问请求的类型确认所述当前接口的新的限流阈值,并设置所述新的限流阈值在单位时间内允许接收的访问请求数量的最大值;及

处理模块,用于将所述当前接口的限流阈值更新为新的限流阈值,并根据所述新的限流阈值对所述当前接口进行限流控制。

本发明的第三方面提供一种电子设备,所述电子设备包括处理器和存储器,所述处理器用于执行所述存储器中存储的计算机程序时实现所述接口限流方法。

本发明的第四方面提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现所述接口限流方法。

本发明所述的接口限流方法、装置、电子设备及存储介质,本发明通过获取当前接口的限流阈值;接收客户端发起访问的访问请求,并统计预设时间内所述当前接口接收的访问请求的总数量;根据统计的访问请求的总数量和当前接口的限流阈值确认新的限流阈值,并设置所述新的限流阈值在单位时间内允许接收的访问请求数量的最大值;将所述当前接口的限流阈值更新为新的限流阈值,并根据所述新的限流阈值对所述当前接口进行限流控制。实现接口支持任意单位时间的限流功能,使限流功能更加灵活,从而能适应更多的业务需求,还能避免了由于业务系统的运行状态和限流阀值不匹配导致的业务系统崩溃的问题。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1是本发明实施例一提供的接口限流方法的流程图。

图2是本发明实施例二提供的本发明接口限流装置较佳实施例中的功能模块图。

图3是本发明实施例三提供的电子设备的示意图。

如下具体实施方式将结合上述附图进一步说明本发明。

具体实施方式

为了能够更清楚地理解本发明的上述目的、特征和优点,下面结合附图和具体实施例对本发明进行详细描述。需要说明的是,在不冲突的情况下,本发明的实施例及实施例中的特征可以相互组合。

在下面的描述中阐述了很多具体细节以便于充分理解本发明,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

除非另有定义,本文所使用的所有的技术和科学术语与属于本发明的技术领域的技术人员通常理解的含义相同。本文中在本发明的说明书中所使用的术语只是为了描述具体的实施例的目的,不是旨在于限制本发明。

本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”和“第三”等是用于区别不同对象,而非用于描述特定顺序。此外,术语“包括”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。

本发明实施例的接口限流方法应用在由至少一个电子设备和通过网络与所述电子设备进行连接的客户端所构成的硬件环境中。所述网络可以是有线网络,也可以是无线网络。所述有线网络可以为传统有线通讯的任何类型,例如因特网、局域网。所述无线网络可以为传统无线通讯的任何类型,例如无线电、无线保真(Wireless Fidelity,WIFI)、蜂窝、卫星、广播等。无线通讯技术可以包括,但不限于,全球移动通信系统(Global System for Mobile Communications,GSM)、通用分组无线业务(General Packet Radio Service,GPRS)、码分多址(Code Division Multiple Access,CDMA),宽带码分多址(W-CDMA)、CDMA2000、IMT单载波(IMT Single Carrier)、增强型数据速率GSM演进(Enhanced Data Rates for GSM Evolution,EDGE)、长期演进技术(Long-Term Evolution,LTE)、高级长期演进技术、时分长期演进技术(Time-Division LTE,TD-LTE)、第五代移动通信技术(5G)、高性能无线电局域网(High Performance Radio Local Area Network,HiperLAN)、高性能无线电广域网(High Performance Radio Wide Area Network,HiperWAN)、本地多点派发业务(Local Multipoint Distribution Service,LMDS)、全微波存取全球互通(Worldwide Interoperability for Microwave Access,WiMAX)、紫蜂协议(ZigBee)、蓝牙、正交频分复用技术(Flash Orthogonal Frequency-Division Multiplexing,Flash-OFDM)、大容量空分多路存取(High Capacity Spatial Division Multiple Access,HC-SDMA)、通用移动电信系统(Universal Mobile Telecommunications System,UMTS)、通用移动电信系统时分双工(UMTS Time-Division Duplexing,UMTS-TDD)、演进式高速分组接入(Evolved High Speed Packet Access,HSPA+)、时分同步码分多址(Time Division Synchronous Code Division Multiple Access,TD-SCDMA)、演进数据最优化(Evolution-Data Optimized,EV-DO)、数字增强无绳通信(Digital Enhanced Cordless Telecommunications,DECT)及其他。

本发明实施例的接口限流方法可以由电子设备来执行,也可以由客户端来执行;还可以是由电子设备和客户端共同执行。所述电子设备是一种能够按照事先设定或存储的指令,自动进行数值计算和/或信息处理的设备,其硬件包括但不限于微处理器、专用集成电路(应用程序lication Specific Integrated Circuit,ASIC)、可编程门阵列(Field-Programmable Gate Array,FPGA)、数字处理器(Digital Signal Processor,DSP)、嵌入式设备等

所述对于需要进行接口限流方法的电子设备,可以直接在电子设备上集成本发明的方法所提供的接口限流功能,或者安装用于实现本发明的方法的客户端。再如,本发明所提供的方法还可以以软件开发工具包(Software Development Kit,SDK)的形式运行在电子设备等设备上,以SDK的形式提供接口限流功能的接口,电子设备或其他设备通过提供的接口即可实现接口限流功能。

实施例一

参阅图1所示,本发明实施例一提供的接口限流方法的流程图。根据不同的需求,所述流程图中的执行顺序可以改变,某些步骤可以省略。

步骤S01、获取当前接口的限流阈值。

在本实施方式中,所述限流阈值为所述接口在预设时间内可接收并处理的访问请求总数的最大值,所述限流阈值是运维人员实现系统理想运行指标而设置的。

步骤S02、接收访问请求,并确认所述访问请求是否为正常请求。当确认所述访问请求是正常请求时,流程进入步骤S03;当确认所述访问请求是非正常请求时,流程进入步骤S06。

在本实施方式中,所述访问请求可以是由客户端发起访问的访问请求,所述访问请求可以是并发请求。

所述客户端可以是,但不限于,个人计算机(Personal Computer,PC)、个人数字助理(Personal Digital Assistant,PDA)、无线手持设备、平板电脑(Tablet Computer)、智能手机等。上述客户端仅是举例,而非穷举,包含但不限于上述终端。

在本实施方式中,所述客户端包括输入输出设备,用户可以通过所述输入输出设备和所述客户端进行交互,从而可以触发所述客户端发起访问请求。例如,接收用户输入的信息。用户可以采用非接触式的输入方式通过所述输入输出设备与所述客户端进行交互。例如动作输入、语音输入等。当用户通过语音输入与所述客户端交互时,所述输入输出设备可以是一麦克风。所述输入输出设备还可以是一外置的遥控器单元,所述遥控器单元通过无线或有线通讯的方式发送控制命令给所述客户端。

通过判断所述访问请求是否包含尝试注入攻击的相关内容来检测所述访问请求是否为正常请求。所述注入攻击包括多种形式,如将结构化查询语言(Structured Query Language,SQL)、可扩展标记语言(Extensible Markup Language,XML)、JS对象简谱(JavaScript Object Notation,JSON)或源代码巧妙地插入到所述访问请求中。

所述访问请求是否为正常请求是一个二元分类问题,可以采用神经网络模型和无监督模型等来解决。所述神经网络模型和无监督模型为现有技术,在这里不再赘述。

具体地,所述确认所述访问请求是否为正常请求的方法包括:

判断所述访问请求是否存在尝试注入攻击,其中,所述注入攻击包括将结构化查询语言、可扩展标记语言、JS对象简谱或源代码插入至所述访问请求;或

判断所述访问请求是否为恶意注册请求;或

判断所述访问请求是否为爬虫过度抓取请求。

当所述访问请求存在尝试注入攻击或所述访问请求是恶意请求或所述访问请求是爬虫过度抓取请求中的一种或多种时,确定所述访问请求为非正常请求;

当所述访问请求不存在尝试注入攻击且所述访问请求不是恶意注册请求且所述访问请求不是爬虫过度抓取请求时,确认所述访问请求为正常请求。

步骤S03、当确认所述访问请求是正常请求时,统计预设时间内所述当前接口接收的访问请求的总数量。

步骤S04、根据所述访问请求的总数量或访问请求的类型确认所述当前接口的新的限流阈值,并设置所述新的限流阈值在单位时间内允许接收的访问请求数量的最大值。

具体地,确认所述当前接口的新的限流阈值的方法包括:

根据统计的访问请求的总数量和当前接口的限流阈值确认所述当前接口的新的限流阈值;或

根据所述访问请求的类型确认所述当前接口的新的限流阈值,其中,所述访问请求的类型包括关键请求和非关键请求。

在本实施方式中,所述根据统计的访问请求的总数量和当前接口的限流阈值确认所述当前接口的新的限流阈值包括:

当所述统计的访问请求的总数量大于等于所述当前接口的限流阈值时,则在所述当前接口的限流阈值的基础上升高阈值以得到新的限流阈值;

当所述统计的访问请求的总数量小于所述当前接口的限流阈值,则在所述当前接口的限流阈值的基础上降低阈值以得到新的限流阈值。

以业务系统为订单系统为例,在某一用户通过接口向所述订单系统发送访问请求的情况下,根据统计的当前访问请求数量和当前接口的限流阈值分析,确定当前订单系统内部运行压力过大,需要降低限流阀值,以防过大的访问请求使所述订单系统崩溃,在得到新的限流阀值后,采用较低新的限流阀值来替代当前的限流阀值,所述接口则采用新的限流阀值来对用户的访问进行限流。

在一实施方式中,所述根据所述访问请求的类型确认所述当前接口的新的限流阈值包括:

当所述访问请求为关键请求(例如,创建订单)时,在当前接口的限流阈值的基础上升高阈值来得到新的限流阈值,以方便系统接收并处理所述关键请求;

当所述访问请求为非关键请求(例如,列出历史订单)时,在当前接口的限流阈值的基础上降低阈值来得到新的限流阈值。

在本实施方式中,在确认好新的限流阈值后,通过修改源码提供的限流配置来设置所述新的限流阈值在单位时间内允许接收的访问请求数量的最大值。例如,初始限流配置duration={'s':1,'m':60,'h':3600,'d':86400},分别对应时间单位(限流期)为1秒、1分、1小时、1天。而本方案中新的限流阈值可配置任意单位时间,例如,5分钟为一个单位时间。如需要配置新的限流阈值,则修改限流配置为duration={'s':1,'m':60,'h':3600,'d':86400,'five_min':300},然后在设置(settings)中配置'total':'200/five_min',即可实现新的限流阈值为200次/5分钟。

所述200次/5分钟不等同与40次/分钟。在本实施方式中,所述200次/5分钟表示所述接口在5分钟内的任何一分钟内可接收的访问请求的最大值为200次。例如,当新的限流阈值为200次/5分钟时,表示所述接口可在所述5分钟内的第一分钟就接收200次并发请求,后续四分钟可以不再接收并发请求。而40次/分钟则表示在每一分钟能接收的最高并发请求数为40。通过自有配置任意时间段内任一单位时间可接收的访问请求的最大值,可以应对突发的限流需求。

具体地,可以使用Django REST framework来设置当前接口的新的限流阈值,例如使用DEFAULT_THROTTLE_CLASSES和DEFAULT_THROTTLE_RATES setting全局设置所述新的限流阈值。

步骤S05、将所述当前接口的限流阈值更新为新的限流阈值,并根据所述新的限流阈值对所述当前接口进行限流控制。

在本实施方式中,对所述当前接口进行限流控制的方法包括,但不限于以下几种:

a)通过限制单位时间段内调用量来限流;

b)通过限制系统的并发调用程度来限流;

c)使用漏桶(Leaky Bucket)算法来进行限流;

d)使用令牌桶(Token Bucket)算法来进行限流。

具体地,所述通过限制单位时间段内调用量来限流的方法为通过一个计数器统计单位时间段某个业务的访问量,如果单位时间段内当前访问量超过预先设定的阈值,则在所述单位时间段内不再允许继续访问、或者把接下来的请求放入队列中等待到下一个单位时间段继续访问。在这里,计数器在需要在进入下一个单位时间段时先清零。所述方法适合对业务无损的服务或者需要过载保护的服务进行限流的场景,如抢购业务。若当前访问超出了预先设定的阈值,那么,要么把接下来的请求放入队列中等待到下一个单位时间段继续访问,即让用户排队;要么不再允许继续访问,即告诉用户没货了,这对用户来说是可以接受的。

通过限制系统的并发调用程度来限流实质与所述通过限制单位时间段内调用量一样,不同的是,所述通过限制系统的并发调用程度来限流具体是限制单位时间段内的并发访问量,这里不再赘述。

所述漏桶(Leaky Bucket)算法指水(访问请求)先进入到漏桶里,漏桶以一定的速度出水(接口的响应速率),当水流入速度过大会直接溢出(发送请求的访问频率超过接口的响应速率),然后就拒绝继续接收访问请求。

所述令牌桶算法(Token Bucket)是基于如下的场景的模拟,有一个装有令牌(token)且令牌数量固定的桶,令牌添加的速率是固定的,当接收到访问请求时,会检查下桶中是否包含足够多的令牌(一个请求可能需要多个令牌)。再从桶中消费令牌,若令牌数量足够,则消费掉桶中的令牌;若令牌数量不够,则可能出现阻塞或拒绝服务。

上述的限流方式都不能很好地应对突发请求,即瞬间请求可能都被允许从而导致一些问题。因此在一些场景中需要对突发请求进行整形,整形为平均速率请求处理。Guava框架提供了令牌桶算法实现对突发请求的整形,Guava RateLimiter提供了平滑突发限流(SmoothBursty)和平滑预热限流(SmoothWarmingUp)的令牌桶算法实现。

步骤S06,拒绝接收所述访问请求。

综上所述,本发明提供的接口限流方法,所述方法包括:获取当前接口的限流阈值;接收访问请求,并确认所述访问请求是否为正常请求;当确认所述访问请求是正常请求时,统计预设时间内所述当前接口接收的访问请求的总数量;确认所述当前接口的新的限流阈值,并设置所述新的限流阈值在单位时间内允许接收的访问请求数量的最大值;及将所述当前接口的限流阈值更新为新的限流阈值,并根据所述新的限流阈值对所述当前接口进行限流控制。实现接口支持任意单位时间的限流功能,使限流功能更加灵活,从而能适应更多的业务需求,还能避免了由于业务系统的运行状态和限流阀值不匹配导致的业务系统崩溃的问题。

以上所述,仅是本发明的具体实施方式,但本发明的保护范围并不局限于此,对于本领域的普通技术人员来说,在不脱离本发明创造构思的前提下,还可以做出改进,但这些均属于本发明的保护范围。

下面结合第2至3图,分别对实现上述接口限流方法的电子设备的功能模块及硬件结构进行介绍。

实施例二

图2为本发明接口限流装置较佳实施例中的功能模块图。

在一些实施例中,所述接口限流装置20运行于电子设备中。所述接口限流装置20可以包括多个由程序代码段所组成的功能模块。所述接口限流装置20中的各个程序段的程序代码可以存储于存储器中,并由至少一个处理器所执行,以执行接口限流功能。

本实施例中,所述接口限流装置20根据其所执行的功能,可以被划分为多个功能模块。所述功能模块可以包括:获取模块201、接收模块202、统计模块203、设置模块204及处理模块205。本发明所称的模块是指一种能够被至少一个处理器所执行并且能够完成固定功能的一系列计算机程序段,其存储在存储器中。在一些实施例中,关于各模块的功能将在后续的实施例中详述。

所述获取模块201用于获取当前接口的限流阈值。

在本实施方式中,所述限流阈值为所述接口在预设时间内可接收并处理的访问请求总数的最大值,所述限流阈值是运维人员实现系统理想运行指标而设置的。

所述接收模块202用于接收访问请求,并确认所述访问请求是否为正常请求。

在本实施方式中,所述访问请求可以是由客户端发起访问的访问请求,所述访问请求可以是并发请求。

所述客户端可以是,但不限于,个人计算机(Personal Computer,PC)、个人数字助理(Personal Digital Assistant,PDA)、无线手持设备、平板电脑(Tablet Computer)、智能手机等。上述客户端仅是举例,而非穷举,包含但不限于上述终端。

在本实施方式中,所述客户端包括输入输出设备,用户可以通过所述输入输出设备和所述客户端进行交互,从而可以触发所述客户端发起访问请求。例如,接收用户输入的信息。用户可以采用非接触式的输入方式通过所述输入输出设备与所述客户端进行交互。例如动作输入、语音输入等。当用户通过语音输入与所述客户端交互时,所述输入输出设备可以是一麦克风。所述输入输出设备还可以是一外置的遥控器单元,所述遥控器单元通过无线或有线通讯的方式发送控制命令给所述客户端。

通过判断所述访问请求是否包含尝试注入攻击的相关内容来检测所述访问请求是否为正常请求。所述注入攻击包括多种形式,如将结构化查询语言(Structured Query Language,SQL)、可扩展标记语言(Extensible Markup Language,XML)、JS对象简谱(JavaScript Object Notation,JSON)或源代码巧妙地插入到所述访问请求中。

所述访问请求是否为正常请求是一个二元分类问题,可以采用神经网络模型和无监督模型等来解决。所述神经网络模型和无监督模型为现有技术,在这里不再赘述。

具体地,所述确认所述访问请求是否为正常请求的方法包括:

判断所述访问请求是否存在尝试注入攻击,其中,所述注入攻击包括将结构化查询语言、可扩展标记语言、JS对象简谱或源代码插入至所述访问请求;或

判断所述访问请求是否为恶意注册请求;或

判断所述访问请求是否为爬虫过度抓取请求。

当所述访问请求存在尝试注入攻击或所述访问请求是恶意请求或所述访问请求是爬虫过度抓取请求中的一种或多种时,确定所述访问请求为非正常请求;

当所述访问请求不存在尝试注入攻击且所述访问请求不是恶意注册请求且所述访问请求不是爬虫过度抓取请求时,确认所述访问请求为正常请求。

所述统计模块203用于当确认所述访问请求是正常请求时,统计预设时间内所述当前接口接收的访问请求的总数量。

所述设置模块204用于根据所述访问请求的总数量或访问请求的类型确认所述当前接口的新的限流阈值,并设置所述新的限流阈值在单位时间内允许接收的访问请求数量的最大值。

具体地,确认所述当前接口的新的限流阈值的方法包括:

根据统计的访问请求的总数量和当前接口的限流阈值确认所述当前接口的新的限流阈值;或

根据所述访问请求的类型确认所述当前接口的新的限流阈值,其中,所述访问请求的类型包括关键请求和非关键请求。

在本实施方式中,所述根据统计的访问请求的总数量和当前接口的限流阈值确认所述当前接口的新的限流阈值包括:

当所述统计的访问请求的总数量大于等于所述当前接口的限流阈值时,则在所述当前接口的限流阈值的基础上升高阈值以得到新的限流阈值;

当所述统计的访问请求的总数量小于所述当前接口的限流阈值,则在所述当前接口的限流阈值的基础上降低阈值以得到新的限流阈值。

以业务系统为订单系统为例,在某一用户通过接口向所述订单系统发送访问请求的情况下,根据统计的当前访问请求数量和当前接口的限流阈值分析,确定当前订单系统内部运行压力过大,需要降低限流阀值,以防过大的访问请求使所述订单系统崩溃,在得到新的限流阀值后,采用较低新的限流阀值来替代当前的限流阀值,所述接口则采用新的限流阀值来对用户的访问进行限流。

在一实施方式中,所述根据所述访问请求的类型确认所述当前接口的新的限流阈值包括:

当所述访问请求为关键请求(例如,创建订单)时,在当前接口的限流阈值的基础上升高阈值来得到新的限流阈值,以方便系统接收并处理所述关键请求;

当所述访问请求为非关键请求(例如,列出历史订单)时,在当前接口的限流阈值的基础上降低阈值来得到新的限流阈值。

在本实施方式中,在确认好新的限流阈值后,通过修改源码提供的限流配置来设置所述新的限流阈值在单位时间内允许接收的访问请求数量的最大值。例如,初始限流配置duration={'s':1,'m':60,'h':3600,'d':86400},分别对应时间单位(限流期)为1秒、1分、1小时、1天。而本方案中新的限流阈值可配置任意单位时间,例如,5分钟为一个单位时间。如需要配置新的限流阈值,则修改限流配置为duration={'s':1,'m':60,'h':3600,'d':86400,'five_min':300},然后在设置(settings)中配置'total':'200/five_min',即可实现新的限流阈值为200次/5分钟。

所述200次/5分钟不等同与40次/分钟。在本实施方式中,所述200次/5分钟表示所述接口在5分钟内的任何一分钟内可接收的访问请求的最大值为200次。例如,当新的限流阈值为200次/5分钟时,表示所述接口可在所述5分钟内的第一分钟就接收200次并发请求,后续四分钟可以不再接收并发请求。而40次/分钟则表示在每一分钟能接收的最高并发请求数为40。通过自有配置任意时间段内任一单位时间可接收的访问请求的最大值,可以应对突发的限流需求。

具体地,可以使用Django REST framework来设置当前接口的新的限流阈值,例如使用DEFAULT_THROTTLE_CLASSES和DEFAULT_THROTTLE_RATES setting全局设置所述新的限流阈值。

所述处理模块205用于将所述当前接口的限流阈值更新为新的限流阈值,并根据所述新的限流阈值对所述当前接口进行限流控制。

在本实施方式中,对所述当前接口进行限流控制的方法包括,但不限于以下几种:

a)通过限制单位时间段内调用量来限流;

b)通过限制系统的并发调用程度来限流;

c)使用漏桶(Leaky Bucket)算法来进行限流;

d)使用令牌桶(Token Bucket)算法来进行限流。

具体地,所述通过限制单位时间段内调用量来限流的方法为通过一个计数器统计单位时间段某个业务的访问量,如果单位时间段内当前访问量超过预先设定的阈值,则在所述单位时间段内不再允许继续访问、或者把接下来的请求放入队列中等待到下一个单位时间段继续访问。在这里,计数器在需要在进入下一个单位时间段时先清零。所述方法适合对业务无损的服务或者需要过载保护的服务进行限流的场景,如抢购业务。若当前访问超出了预先设定的阈值,那么,要么把接下来的请求放入队列中等待到下一个单位时间段继续访问,即让用户排队;要么不再允许继续访问,即告诉用户没货了,这对用户来说是可以接受的。

通过限制系统的并发调用程度来限流实质与所述通过限制单位时间段内调用量一样,不同的是,所述通过限制系统的并发调用程度来限流具体是限制单位时间段内的并发访问量,这里不再赘述。

所述漏桶(Leaky Bucket)算法指水(访问请求)先进入到漏桶里,漏桶以一定的速度出水(接口的响应速率),当水流入速度过大会直接溢出(发送请求的访问频率超过接口的响应速率),然后就拒绝继续接收访问请求。

所述令牌桶算法(Token Bucket)是基于如下的场景的模拟,有一个装有令牌(token)且令牌数量固定的桶,令牌添加的速率是固定的,当接收到访问请求时,会检查下桶中是否包含足够多的令牌(一个请求可能需要多个令牌)。再从桶中消费令牌,若令牌数量足够,则消费掉桶中的令牌;若令牌数量不够,则可能出现阻塞或拒绝服务。

上述的限流方式都不能很好地应对突发请求,即瞬间请求可能都被允许从而导致一些问题。因此在一些场景中需要对突发请求进行整形,整形为平均速率请求处理。Guava框架提供了令牌桶算法实现对突发请求的整形,Guava RateLimiter提供了平滑突发限流(SmoothBursty)和平滑预热限流(SmoothWarmingUp)的令牌桶算法实现。

所述处理模块205还用于当确认所述访问请求为非正常请求时,拒绝接收所述访问请求。

综上所述,本发明提供的接口限流装置20包括获取模块201、接收模块202、统计模块203、设置模块204及处理模块205。所述获取模块201用于获取当前接口的限流阈值;所述接收模块202用于接收访问请求,并确认所述访问请求是否为正常请求;所述统计模块203用于当确认所述访问请求为正常请求时,统计预设时间内所述当前接口接收的访问请求的总数量;所述设置模块204用于确认所述当前接口的新的限流阈值,并设置所述新的限流阈值在单位时间内允许接收的访问请求数量的最大值;及所述处理模块205用于将所述当前接口的限流阈值更新为新的限流阈值,并根据所述新的限流阈值对所述当前接口进行限流控制。实现接口支持任意单位时间的限流功能,使限流功能更加灵活,从而能适应更多的业务需求,还能避免了由于业务系统的运行状态和限流阀值不匹配导致的业务系统崩溃的问题。

上述以软件功能模块的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能模块存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,双屏设备,或者网络设备等)或处理器(processor)执行本发明各个实施例所述方法的部分。

实施例三

图3为本发明实施例三提供的电子设备的示意图。

所述电子设备3包括:存储器31、至少一个处理器32、存储在所述存储器31中并可在所述至少一个处理器32上运行的计算机程序33、至少一条通讯总线34。

所述至少一个处理器32执行所述计算机程序33时实现上述接口限流方法实施例中的步骤。

示例性的,所述计算机程序33可以被分割成一个或多个模块/单元,所述一个或者多个模块/单元被存储在所述存储器31中,并由所述至少一个处理器32执行,以完成本发明。所述一个或多个模块/单元可以是能够完成特定功能的一系列计算机程序指令段,所述指令段用于描述所述计算机程序33在所述电子设备3中的执行过程。

所述电子设备3可以是手机、平板电脑、个人数字助理(Personal Digital Assistant,PDA)等安装有应用程序的设备。本领域技术人员可以理解,所述示意图3仅仅是电子设备3的示例,并不构成对电子设备3的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如所述电子设备3还可以包括输入输出设备、网络接入设备、总线等。

所述至少一个处理器32可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。所述处理器32可以是微处理器或者所述处理器32也可以是任何常规的处理器等,所述处理器32是所述电子设备3的控制中心,利用各种接口和线路连接整个电子设备3的各个部分。

所述存储器31可用于存储所述计算机程序33和/或模块/单元,所述处理器32通过运行或执行存储在所述存储器31内的计算机程序和/或模块/单元,以及调用存储在存储器31内的数据,实现所述电子设备3的各种功能。所述存储器31可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据电子设备3的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器31可以包括高速随机存取存储器,还可以包括非易失性存储器,例如硬盘、内存、插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)、至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。

所述电子设备3集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,所述计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。

在本发明所提供的几个实施例中,应所述理解到,所揭露的电子设备和方法,可以通过其它的方式实现。例如,以上所描述的电子设备实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。

另外,在本发明各个实施例中的各功能单元可以集成在相同处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在相同单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能模块的形式实现。

对于本领域技术人员而言,显然本发明不限于上述示范性实施例的细节,而且在不背离本发明的精神或基本特征的情况下,能够以其他的具体形式实现本发明。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本发明内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或,单数不排除复数。系统权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。

最后应说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或等同替换,而不脱离本发明技术方案的精神范围。

再多了解一些
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1