CN115168074A - 接口请求的并发数量控制方法、装置、介质及电子设备 - Google Patents
接口请求的并发数量控制方法、装置、介质及电子设备 Download PDFInfo
- Publication number
- CN115168074A CN115168074A CN202210824527.0A CN202210824527A CN115168074A CN 115168074 A CN115168074 A CN 115168074A CN 202210824527 A CN202210824527 A CN 202210824527A CN 115168074 A CN115168074 A CN 115168074A
- Authority
- CN
- China
- Prior art keywords
- target key
- interface
- key
- current time
- time period
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/547—Remote procedure calls [RPC]; Web services
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本公开涉及系统设计领域,揭示了一种接口请求的并发数量控制方法、装置、介质及电子设备。该方法包括:当接收到接口调用请求时,判断预设的非关系型数据库中是否存在与当前时间段匹配的目标键,所述目标键包括与所述当前时间段对应的时间标识;如果存在所述目标键,则判断所述目标键的键值与1之和是否超过预定数量阈值;如果所述键值与1之和未超过所述预定数量阈值,则在所述非关系型数据库中将与所述目标键对应的键值加1,并处理所述接口调用请求;如果所述键值与1之和超过所述预定数量阈值,则向所述接口调用请求的发送方返回请求失败提醒信息。此方法避免了因接口调用请求骤增而带来的请求处理性能下降的问题。
Description
技术领域
本公开涉及系统设计技术领域,特别涉及一种接口请求的并发数量控制方法、装置、介质及电子设备。
背景技术
用户向web应用发起请求,访问web应用提供的服务,已经是常见的网上冲浪方式之一。
然而,在很多场景下,大量用户会在短时间内向web应用发送大量请求,给web应用带来巨大的负荷和流量冲击,导致web应用的性能下降,无法正常处理用户请求。
发明内容
在系统设计技术领域,为了解决现有技术中web应用无法应对短时间内骤增的用户请求,进而导致请求处理的性能下降的问题,本公开的目的在于提供一种接口请求的并发数量控制方法、装置、介质及电子设备。
根据本公开的一方面,提供了一种接口请求的并发数量控制方法,所述方法包括:
当接收到接口调用请求时,判断预设的非关系型数据库中是否存在与当前时间段匹配的目标键,所述目标键包括与所述当前时间段对应的时间标识;
如果存在所述目标键,则判断所述目标键的键值与1之和是否超过预定数量阈值;
如果所述键值与1之和未超过所述预定数量阈值,则在所述非关系型数据库中将与所述目标键对应的键值加1,并处理所述接口调用请求;
如果所述键值与1之和超过所述预定数量阈值,则向所述接口调用请求的发送方返回请求失败提醒信息。
根据本公开的另一方面,提供了一种接口请求的并发数量控制装置,所述装置包括:
第一判断模块,被配置为当接收到接口调用请求时,判断预设的非关系型数据库中是否存在与当前时间段匹配的目标键,所述目标键包括与所述当前时间段对应的时间标识;
第二判断模块,被配置为如果存在所述目标键,则判断所述目标键的键值与1之和是否超过预定数量阈值;
加法和处理模块,被配置为如果所述键值与1之和未超过所述预定数量阈值,则在所述非关系型数据库中将与所述目标键对应的键值加1,并处理所述接口调用请求;
返回模块,被配置为如果所述键值与1之和超过所述预定数量阈值,则向所述接口调用请求的发送方返回请求失败提醒信息。
在本公开的一个实施例中,基于前述方案,在判断预设的非关系型数据库中是否存在与当前时间段匹配的目标键之后,所述第一判断模块还用于:如果不存在与当前时间段匹配的目标键,则根据所述当前时间段生成包括与所述当前时间段对应的时间标识的键,作为与当前时间段匹配的目标键;初始化生成与所述目标键对应的键值,并将所述目标键和与所述目标键对应的键值存储至所述非关系型数据库中;处理所述接口调用请求。
在本公开的一个实施例中,基于前述方案,所述第一判断模块被进一步配置为:将所述目标键和与所述目标键对应的键值存储至所述非关系型数据库中,并为所述目标键设置有效期,以便在达到所述有效期之后使所述目标键被所述非关系型数据库删除。
在本公开的一个实施例中,基于前述方案,所述装置位于服务端中,所述预定数量阈值用于对所述服务端并发处理的接口调用请求的总数量进行限制。
在本公开的一个实施例中,基于前述方案,所述第一判断模块被进一步配置为:当接收到接口调用请求时,判断预设的非关系型数据库中是否存在与当前时间段匹配且包含了所述接口调用请求中的接口名称的目标键。
在本公开的一个实施例中,基于前述方案,所述第一判断模块被进一步配置为:当接收到接口调用请求时,判断预设的非关系型数据库中是否存在与当前时间段匹配且包含了所述接口调用请求中携带的用户标识的目标键。
在本公开的一个实施例中,基于前述方案,所述第一判断模块被进一步配置为:当接收到接口调用请求时,判断预设的非关系型数据库中是否存在与当前时间段匹配且包含了所述接口调用请求中携带的接口名称和用户标识的目标键。
根据本公开的另一方面,提供了一种计算机可读程序介质,其存储有计算机程序指令,当所述计算机程序指令被计算机执行时,使计算机执行如前所述的方法。
根据本公开的另一方面,提供了一种电子设备,所述电子设备包括:
处理器;
存储器,所述存储器上存储有计算机可读指令,所述计算机可读指令被所述处理器执行时,实现如前所述的方法。
本公开的实施例提供的技术方案可以包括以下有益效果:
对于本公开所提供的接口请求的并发数量控制方法、装置、介质及电子设备,该方法包括如下步骤:当接收到接口调用请求时,判断预设的非关系型数据库中是否存在与当前时间段匹配的目标键,所述目标键包括与所述当前时间段对应的时间标识;如果存在所述目标键,则判断所述目标键的键值与1之和是否超过预定数量阈值;如果所述键值与1之和未超过所述预定数量阈值,则在所述非关系型数据库中将与所述目标键对应的键值加1,并处理所述接口调用请求;如果所述键值与1之和超过所述预定数量阈值,则向所述接口调用请求的发送方返回请求失败提醒信息。
此方法下,通过在接收到接口调用请求时,在非关系型数据库中设置与接收到接口调用请求的当前时间段匹配的目标键,并判断与目标键对应的键值与1之和是否超过预定数量阈值,只有在与目标键对应的键值与1之和未超过预定数量阈值时才会处理接口调用请求,同时会将与目标键对应的键值加1;而如果与目标键对应的键值与1之和超过预定数量阈值,则不会处理接口调用请求,而是向第二接口请求的发送方返回请求失败提醒信息。因此,此方法通过非关系型数据库中键值对的方式实现了对在当前时间段内允许处理的接口调用请求的数量的控制,使得服务端在一定时间段内并发处理的接口调用请求的数量始终在一定范围内,服务端能够可靠、稳定地进行接口调用请求的处理,避免了性能下降的情况,提高了服务端的可用性。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性的,并不能限制本发明。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。
图1是根据一示例性实施例示出的一种接口请求的并发数量控制方法的系统架构示意图;
图2是根据一示例性实施例示出的一种接口请求的并发数量控制方法的流程图;
图3是根据一示例性实施例示出的图2中步骤210之后步骤的流程图;
图4是根据一示例性实施例示出的图3中步骤260的细节的流程图;
图5是根据一示例性实施例示出的实现本申请实施例方案的整体流程示意图;
图6是根据一示例性实施例示出的一种接口请求的并发数量控制装置的框图;
图7是根据一示例性实施例示出的一种实现上述接口请求的并发数量控制方法的电子设备示例框图;
图8是根据一示例性实施例示出的一种实现上述接口请求的并发数量控制方法的程序产品。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本发明相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本发明的一些方面相一致的装置和方法的例子。
此外,附图仅为本公开的示意性图解,并非一定是按比例绘制。图中相同的附图标记表示相同或类似的部分,因而将省略对它们的重复描述。附图中所示的一些方框图是功能实体,不一定必须与物理或逻辑上独立的实体相对应。
在相关技术中,springcloud等微服务架构通过Hystrix组件实现熔断降级限速。具体而言,通过另外设置一个组件,当请求到某个微服务模块的数量过多或微服务模块返回失败时会有一段时间不转发到此微服务模块。这个好处就是容错性高,即使那个模块服务停了,也还是会有返回。对于面向用户的系统,如购物系统,可以在系统崩溃的时候展示一个友好的提示,但是对于系统资源来说,就必须有单独的容器组件。另外购买服务器,搭建环境,对于一些管理系统并且希望成本能控制的项目来说,过于“重”了。
由于搭建微服务需要注册中心、配置中心、熔断器和应用好几台机器,而在很多项目中,由于成本限制,不能搭建微服务架构,只能设置一台机器;因此,相关技术的方案不能应用到低成本的场景中。目前相关技术中也未提供在低成本项目中控制接口请求的并发数量的方案。
为此,本公开首先提供了一种接口请求的并发数量控制方法。通过该方法可以克服以上缺陷,能够以轻量级的方式实现对接口请求并发数量的控制,能够可靠、稳定地进行接口调用请求的处理,避免了性能下降的情况。
本公开的实施终端可以是任何具有运算、处理功能的设备,该设备可以与外部设备相连,用于接收或者发送数据,具体可以是便携移动设备,例如智能手机、平板电脑、笔记本电脑、PDA(Personal Digital Assistant)等,也可以是固定式设备,例如,计算机设备、现场终端、台式电脑、服务器、工作站等。
可选地,本公开的实施终端可以为计算机设备或服务器。
图1是根据一示例性实施例示出的一种接口请求的并发数量控制方法的系统架构示意图。如图1所示,该系统架构包括用户端110和服务后台120,服务后台120进一步包括服务端121、本地加速redis数据库122和资源123,其中,服务端121为由多个服务器组成的服务器集群,本地加速redis数据库122位于一个服务器上,本地加速redis数据库122与服务端121位于同一个局域网内,服务端121上部署有web应用,资源123包括第三方服务、数据库、磁盘存储等多种web应用能够访问的资源,web应用向用户端110提供了可以调用的接口。在本申请实施例中,服务端121可以为执行终端。当本公开实施例提供的接口请求的并发数量控制方法应用于图1所示的系统架构中时,一个过程可以是这样的:1、用户端110向web应用发送用户请求,用户请求具体可以是对web应用提供的接口的调用请求;2、如果该用户请求为当前时间段内的首个用户请求,会创建包含与当前时间段对应的时间标识的键,并初始化生成与该键对应的键值,还会将键和键值对应存储至本地加速redis数据库122中;如果该用户请求不为当前时间段内的首个用户请求,即本地加速redis数据库122中已经存储了包括与当前时间段对应的时间标识的键,然后在redis中计数,即将与该键对应的键值加1,之后,web应用将计算结果与预设阈值进行比较,如果计算结果超过预设阈值,服务端121会向用户端110返回失败提醒信息;3、如果计算结果未超过预设阈值,即服务端121没有向用户端110返回失败提醒信息,或者,该用户请求为当前时间段内的首个用户请求,那么,web应用会访问资源123中的第三方应用、数据库或者磁盘存储,以调用第三方应用提供的接口,或者访问数据库和/或磁盘,从而实现对实际业务的调用。
在本公开的一个实施例中,键包括与当前时间段对应的时间标识以及下列中的至少一项:接口名称、用户标识。
值得一提的是,图1仅为本公开的一个实施例,虽然在图1实施例中,web应用部署在服务器集群上,并且本地加速redis数据库与web应用分别位于不同的终端设备上,但在本公开的其他实施例中,web应用还可以部署在单个服务器等单个设备上,并且本地加速redis数据库与web应用可以部署在同样的终端设备上;虽然在图1实施例中,本地加速redis数据库位于一个服务器上,但与web应用类似的是,在本公开的其他实施例中,可以将本地加速redis数据库部署在包括多个服务器的服务器集群中。虽然在图1实施例中,数据库和磁盘与web应用是分开部署的,但在本公开的其他实施例中,数据库和磁盘也可以与web应用部署在同一终端设备上。本公开对此不作任何限定,本公开的保护范围也不应因此而受到任何限制。
图2是根据一示例性实施例示出的一种接口请求的并发数量控制方法的流程图。图2所示实施例提供的方法可以由各种具备计算和处理功能的终端设备执行,比如可以由web服务器或者计算机设备等各种能够作为服务端的终端设备执行,服务端中部署了能够处理接口调用请求的服务,能够向外提供一个或多个接口。如图2所示,具体可以包括以下步骤:
步骤210,当接收到接口调用请求时,判断预设的非关系型数据库中是否存在与当前时间段匹配的目标键。
其中,所述目标键包括与所述当前时间段对应的时间标识。
接口调用请求可以是以HTTP(Hyper Text Transfer Protocol,超文本传输协议)方式发送的request请求,接口调用请求用来调用某个接口。预设的非关系型数据库例如可以是Redis(Remote Dictionary Server,远程字典服务)。Redis是一个高性能的支持对key-value类型的数据进行存储的数据库。非关系型数据库中存储的键即为key,存储的与键对应的键值即为value。
当前时间段即接收到接口调用请求的时刻所属的时间段。当前时间段的时间长度可以根据需要进行设置,比如可以是一秒、两秒等,也可以是1分钟、2分钟等更长的时间段。
当前时间段具体可以是接收到接口调用请求的那一秒。目标键是一个字符串,目标键与当前时间段匹配是指该目标键包括与当前时间段对应的时间标识。与当前时间段对应的时间标识可以以多种方式来设置,比如,若接口调用请求是在2022年04月27日16时15分12秒接收到的,那么,即当前时间段为2022年04月27日16时15分12秒,那么,与当前时间段对应的时间标识可以是20220427_161512,也可以是与2022年04月27日16时15分12秒对应的时间戳。
键这一字符串中除了包括与当前时间段对应的时间标识之外,还可以包括其他字母、数字、下划线等符号。
步骤220,如果存在所述目标键,则判断所述目标键的键值与1之和是否超过预定数量阈值。
判断与目标键对应的键值与1之和是否超过预定数量阈值即判断V+1>T是否成立,其中,V为与目标键对应的键值,T为预定数量阈值。
当前时间段的时长和预定数量阈值共同用于对服务端处理的接口调用请求进行限速。如果预定数量阈值为100,当前时间段的时长为1秒,那么,会将接口调用请求的处理速度限制为不超过100r/s(每秒最多100个request请求)。
步骤230,如果所述键值与1之和未超过所述预定数量阈值,则在所述非关系型数据库中将与所述目标键对应的键值加1,并处理所述接口调用请求。
如果V+1>T不成立,那么会将V加1,从而对在当前时间段内处理的接口调用请求的数量进行了计数,处理接口调用请求是指通过调用第三方服务的接口,或者通过在数据库中进行检索,或者通过在磁盘中进行检索,从而向接口调用请求的发送方返回接口调用结果。可以通过调用Redis数据库中的INCR命令为value加1。
以预定数量阈值为100,当前时间段的时长为1秒为例,假如V+1>100不成立,那么,说明当前这一秒已经接收和处理的接口调用请求的数量未达到接口调用请求的处理速度限值,可以继续对该接口调用请求进行处理。
步骤240,如果所述键值与1之和超过所述预定数量阈值,则向所述接口调用请求的发送方返回请求失败提醒信息。
如果V+1>T成立,那么,说明当前时间段内已经接收和处理的接口调用请求的数量超过了当前时间段内允许处理的最大数量,即如果继续处理该接口调用请求会超过接口调用请求的处理速度限值,此时不会再处理该接口调用请求,并向该接口调用请求的发送方返回请求失败提醒信息,以保证资源得到合理利用,避免遭到大量接口调用请求的冲击。
请求失败提醒信息可以是各种以文字、图片等形式表示的该接口调用请求未被成功处理的提示信息,通过向该接口调用请求的发送方返回请求失败提醒信息,可以使发送方得知该接口调用请求未被成功处理,从而可以重新发送该接口调用请求,以重新进行尝试。
图3是根据一示例性实施例示出的图2中步骤210之后步骤的流程图。请参见图3所示,在步骤210之后还可以包括以下步骤:
步骤250,如果不存在与当前时间段匹配的目标键,则根据所述当前时间段生成包括与所述当前时间段对应的时间标识的键,作为与当前时间段匹配的目标键。
只有在当前时间段内已经接收到了接口调用请求的情况下,非关系型数据库中才会存储与当前时间段匹配的目标键;如果非关系型数据库中未存储与接收到该接口调用请求的当前时间段匹配的目标键,说明该接口调用请求是在当前时间段内接收到的首个接口调用请求。假如当前时间段为2022年04月27日16时15分12秒,那么,与当前时间段对应的时间标识可以是20220427_161512,包括该时间标识的目标键可以为:system_20220427_161512。
步骤260,初始化生成与所述目标键对应的键值,并将所述目标键和与所述目标键对应的键值存储至所述非关系型数据库中。
可以根据需要确定将与目标键对应的键值初始化为多少,例如,可以将与目标键对应的键值初始化为1。那么,可以将Key:system_20220427_161512和value:1对应存储至Redis数据库中。通过将与目标键对应的键值初始化为1,可以每次从1开始对处理的接口调用请求进行计数。
图4是根据一示例性实施例示出的图3中步骤260的细节的流程图。请参见图4所示,将所述目标键和与所述目标键对应的键值存储至所述非关系型数据库中具体可以包括以下步骤:
步骤260',将所述目标键和与所述目标键对应的键值存储至所述非关系型数据库中,并为所述目标键设置有效期,以便在达到所述有效期之后使所述目标键被所述非关系型数据库删除。
比如,可以通过Redis数据库提供的Expire命令为Key设置过期时间作为有效期,当达到有效期后,Redis数据库会自动将该Key删除。
本申请实施例中,通过为目标键设置有效期,可以在达到有效期之后自动将目标键从非关系型数据库中删除,避免了非关系型数据库中的资源占用过多,使非关系型数据库能够可靠运行。
在本公开的一个实施例中,有效期的时长大于1秒。
有效期的时长可以为大于1秒的任意时长,比如可以设置为2秒。由于无论是非关系型数据库还是服务端,在进行处理时都会存在一定的延时,而且非关系型数据库和服务端的时间并不一定完全一致;如果将有效期的时长设置为1秒,那么,可能存在在当前时间段结束之前便自动将与当前时间段匹配的目标键从非关系型数据库中删除的情况,影响对接口调用请求的数量的正常计数。本申请实施例中,通过将有效期的时长设置为大于1秒,避免了因有效期的设置而对本公开实施例方案的正常运行产生影响。
步骤270,处理所述接口调用请求。
如果该接口调用请求是在当前时间段内接收到的首个接口调用请求,非关系型数据库中未存储与接收到该接口调用请求的当前时间段匹配的目标键,这显然说明即使处理该接口调用请求也未超过对接口调用请求的处理速度限值,可以对该接口调用请求进行处理。可以通过以下方式之一来得到该接口调用请求所需的信息,进而对该接口调用请求作出相应的响应:在数据库中检索出数据、在磁盘中检索出文件、通过调用第三方服务的接口得到第三方服务返回的信息。
下面,将介绍基于本公开实施例提供的接口请求的并发数量控制方法所能够实现的几种对接口调用请求进行限速的方式:
方式一:
在本公开的一个实施例中,该接口请求的并发数量控制方法由服务端执行,所述预定数量阈值用于对所述服务端并发处理的接口调用请求的总数量进行限制。
具体地,在本公开实施例中,服务端可以向外提供多个接口,通过使用预定数量阈值,可以对向服务端的所有接口发送的接口调用请求的总数量进行限制。在这种情况下,预定数量阈值可以根据服务端的内存、带宽等资源大小进行设置。
方式二:
1、当接收到接口调用请求时,判断预设的非关系型数据库中是否存在与当前时间段匹配且包含了所述接口调用请求中的接口名称的目标键,所述目标键包括与所述当前时间段对应的时间标识。
2、如果存在所述目标键,则判断所述目标键的键值与1之和是否超过预定数量阈值。
3、如果所述键值与1之和未超过所述预定数量阈值,则在所述非关系型数据库中将与所述目标键对应的键值加1,并处理所述接口调用请求。
4、如果所述键值与1之和超过所述预定数量阈值,则向所述接口调用请求的发送方返回请求失败提醒信息。
5、如果不存在目标键,则根据所述当前时间段生成包括与所述当前时间段对应的时间标识和所述接口调用请求中的接口名称的键,作为与当前时间段匹配的目标键。
6、初始化生成与所述目标键对应的键值,并将所述目标键和与所述目标键对应的键值存储至所述非关系型数据库中。
7、处理所述接口调用请求。
在方式二中,预定数量阈值用于对针对具体接口的接口调用请求进行限速。
对不同接口的限速要求可以不同。比如,若一个指定接口需要调用第三方服务的接口,那么,该指定接口的限速要受限于第三方服务的接口的限速,例如,获取用户信息接口getUserInfo需要调用第三方服务的接口,第三方服务的接口的限速为20r/s,那么,对用户信息接口getUserInfo的限速的最大值getUserInfoMaxQps可以是20r/s,包括该接口的接口名称的键可以是system_getUserInfo_1651047732,其中,1651047732为时间戳。再比如,积分查询接口getUserScore用来查询个人积分,个人积分存储在本地数据库中,那么对该积分查询接口getUserScore的限速getUserScoreQps可能更大,比如可以为100r/s,包括该接口的接口名称的键可以是system_getUserScore_1651047732,其中,1651047732为时间戳。
方式三:
1、当接收到接口调用请求时,判断预设的非关系型数据库中是否存在与当前时间段匹配且包含了所述接口调用请求中携带的接口类别的目标键,所述目标键包括与所述当前时间段对应的时间标识。
2、如果存在所述目标键,则判断所述目标键的键值与1之和是否超过预定数量阈值。
3、如果所述键值与1之和未超过所述预定数量阈值,则在所述非关系型数据库中将与所述目标键对应的键值加1,并处理所述接口调用请求。
4、如果所述键值与1之和超过所述预定数量阈值,则向所述接口调用请求的发送方返回请求失败提醒信息。
5、如果不存在目标键,则根据所述当前时间段生成包括与所述当前时间段对应的时间标识和所述接口调用请求中的接口类别的键,作为与当前时间段匹配的目标键。
6、初始化生成与所述目标键对应的键值,并将所述目标键和与所述目标键对应的键值存储至所述非关系型数据库中。
7、处理所述接口调用请求。
在方式三中,接口调用请求中携带有所请求的接口的类别,预定数量阈值用于对针对某一类别的接口的接口调用请求进行限速。
由于类别相同的接口的所要求的限速通常是相近的,因此可以利用预定数量阈值对针对某一类别的接口的接口调用请求进行限速。
方式四:
1、当接收到接口调用请求时,判断预设的非关系型数据库中是否存在与当前时间段匹配且包含了所述接口调用请求中携带的用户标识的目标键,所述目标键包括与所述当前时间段对应的时间标识。
2、如果存在所述目标键,则判断所述目标键的键值与1之和是否超过预定数量阈值。
3、如果所述键值与1之和未超过所述预定数量阈值,则在所述非关系型数据库中将与所述目标键对应的键值加1,并处理所述接口调用请求。
4、如果所述键值与1之和超过所述预定数量阈值,则向所述接口调用请求的发送方返回请求失败提醒信息。
5、如果不存在目标键,则根据所述当前时间段生成包括与所述当前时间段对应的时间标识和所述接口调用请求中的用户标识的键,作为与当前时间段匹配的目标键。
6、初始化生成与所述目标键对应的键值,并将所述目标键和与所述目标键对应的键值存储至所述非关系型数据库中。
7、处理所述接口调用请求。
在方式四中,预定数量阈值用于对来自某一用户标识对应的用户的接口调用请求进行限速。用户标识是一个字符串,其内容可以根据需要进行设置。用户标识可以包括以下中的至少一项:用户ID、用户IP地址。用户ID可以是手机号。用户标识可以同时包括用户ID和用户IP地址,由于多个用户可能共用一个局域网,他们的IP地址可能是相同的,通过使用户标识同时包括用户ID和用户IP地址,可以对用户的接口调用请求进行准确区分。用户ID可以是手机号,如果一个用户的手机号是1318888XXXX,ip地址为1.1.1.2,那么,用户标识可以是1318888XXXX_1.1.1.2,与当前时间段匹配且包括该用户标识的目标键可以为system_1318888XXXX_1.1.1.2_1651047782,其中,1651047782为时间戳。通过方式四可以用来防止ddos攻击。
方式五:
1、当接收到接口调用请求时,判断预设的非关系型数据库中是否存在与当前时间段匹配且包含了所述接口调用请求中携带的接口名称和用户标识的目标键,所述目标键包括与所述当前时间段对应的时间标识。
2、如果存在所述目标键,则判断所述目标键的键值与1之和是否超过预定数量阈值。
3、如果所述键值与1之和未超过所述预定数量阈值,则在所述非关系型数据库中将与所述目标键对应的键值加1,并处理所述接口调用请求。
4、如果所述键值与1之和超过所述预定数量阈值,则向所述接口调用请求的发送方返回请求失败提醒信息。
5、如果不存在目标键,则根据所述当前时间段生成包括所述接口调用请求中的接口名称、用户标识和与所述当前时间段对应的时间标识的键,作为与当前时间段匹配的目标键。
6、初始化生成与所述目标键对应的键值,并将所述目标键和与所述目标键对应的键值存储至所述非关系型数据库中。
7、处理所述接口调用请求。
在方式五中,预定数量阈值用于对来自某一用户标识对应的用户的对针对具体接口的接口调用请求进行限速,与当前时间段匹配且包括接口名称和用户标识的目标键可以为system_getUserInfo_1318888XXXX_1.1.1.2_1651047782。方式五可以用于抢购接口。比如,有人使用连点器点击抢购按钮,点击速度明显超过人手的点击速度,通过方式五便可以限制这种行为。
下面,结合图5进一步介绍本申请实施例的方案。图5是根据一示例性实施例示出的实现本申请实施例方案的整体流程示意图。
请参见图5所示,具体包括以下流程:
步骤510,用户发起请求。
接收用户发来的接口调用请求。
步骤520,根据时间生成时间戳,并根据时间戳生成key。
假如当前时间到1970年1月1日的毫秒数为1651047732680,则秒数为1651047732,该秒数即为时间戳,根据该时间戳生成的key可以为System_1651047732。
步骤530,判断redis中是否存在此key。
如果存在,则执行步骤560;如果不存在,则执行步骤540。
步骤540,redis中设置此key的值为1,过期时间为两秒。
将与该key对应存储的value设置为1,并设置过期时间为2秒。
步骤550,调用实际业务。
可以通过以下方式之一来得到接口调用请求所需的信息,进而对接口调用请求作出相应的响应:在数据库中检索出数据、在磁盘中检索出文件、通过调用第三方服务的接口得到第三方服务返回的信息。
执行完本步骤之后,执行步骤590。
步骤560,获取计数,并在内存中对计数加1。
获取与key对应的value,并通过redis对value加1。
步骤570,判断如果加1后是否超过限速。
判断将value加1的结果是否大于限速值。
如果没超过,则执行步骤580,如果超过限速,则向用户提示失败,并执行步骤590。
步骤580,没超过,redis调用INCR递增1,过期时间不变。
若加1后未超过限速,即将value加1的结果不大于限速值,则在redis中调用INCR指令,对value加1,此时过期时间不变。
步骤590,返回用户结束。
将信息返回给用户后,结束流程。
综上所述,根据本公开实施例提供的接口请求的并发数量控制方法,通过利用redis数据库进行接口调用请求的限速,一个集群可以共用一个redis数据库作为计数器,防止对于整个集群共用的资源如数据库、第三方系统和NAS卷磁盘造成冲击,保证了服务端的稳定性和可靠性;由于不需要引入springcloud的很多组件,节省购买机器的经费,成本低,整体系统规模是轻量级的;由于未使用第三方工具,而是采用单独开发的方式,因此,代码均为已知的,原理清晰,可以基于方案方便地进一步进行自定义需求的开发;此外,如上所述,提供了多种限速方式,可以支持多维度的限度,可以应用到各种业务场景中,应用范围广。
本公开还提供了一种接口请求的并发数量控制装置,以下是本公开的装置实施例。
图6是根据一示例性实施例示出的一种接口请求的并发数量控制装置的框图。如图6所示,装置600包括:
第一判断模块610,被配置为当接收到接口调用请求时,判断预设的非关系型数据库中是否存在与当前时间段匹配的目标键,所述目标键包括与所述当前时间段对应的时间标识;
第二判断模块620,被配置为如果存在所述目标键,则判断所述目标键的键值与1之和是否超过预定数量阈值;
加法和处理模块630,被配置为如果所述键值与1之和未超过所述预定数量阈值,则在所述非关系型数据库中将与所述目标键对应的键值加1,并处理所述接口调用请求;
返回模块640,被配置为如果所述键值与1之和超过所述预定数量阈值,则向所述接口调用请求的发送方返回请求失败提醒信息。
在本公开的一个实施例中,基于前述方案,在判断预设的非关系型数据库中是否存在与当前时间段匹配的目标键之后,第一判断模块610还用于:如果不存在与当前时间段匹配的目标键,则根据所述当前时间段生成包括与所述当前时间段对应的时间标识的键,作为与当前时间段匹配的目标键;初始化生成与所述目标键对应的键值,并将所述目标键和与所述目标键对应的键值存储至所述非关系型数据库中;处理所述接口调用请求。
在本公开的一个实施例中,基于前述方案,第一判断模块610被进一步配置为:将所述目标键和与所述目标键对应的键值存储至所述非关系型数据库中,并为所述目标键设置有效期,以便在达到所述有效期之后使所述目标键被所述非关系型数据库删除。
在本公开的一个实施例中,基于前述方案,所述装置位于服务端中,所述预定数量阈值用于对所述服务端并发处理的接口调用请求的总数量进行限制。
在本公开的一个实施例中,基于前述方案,第一判断模块610被进一步配置为:当接收到接口调用请求时,判断预设的非关系型数据库中是否存在与当前时间段匹配且包含了所述接口调用请求中的接口名称的目标键。
在本公开的一个实施例中,基于前述方案,第一判断模块610被进一步配置为:当接收到接口调用请求时,判断预设的非关系型数据库中是否存在与当前时间段匹配且包含了所述接口调用请求中携带的用户标识的目标键。
在本公开的一个实施例中,基于前述方案,第一判断模块610被进一步配置为:当接收到接口调用请求时,判断预设的非关系型数据库中是否存在与当前时间段匹配且包含了所述接口调用请求中携带的接口名称和用户标识的目标键。
根据本公开的第三方面,还提供了一种能够实现上述方法的电子设备。
所属技术领域的技术人员能够理解,本发明的各个方面可以实现为系统、方法或程序产品。因此,本发明的各个方面可以具体实现为以下形式,即:完全的硬件实施方式、完全的软件实施方式(包括固件、微代码等),或硬件和软件方面结合的实施方式,这里可以统称为“电路”、“模块”或“系统”。
下面参照图7来描述根据本发明的这种实施方式的电子设备700。图7显示的电子设备700仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图7所示,电子设备700以通用计算设备的形式表现。电子设备700的组件可以包括但不限于:上述至少一个处理单元710、上述至少一个存储单元720、连接不同系统组件(包括存储单元720和处理单元710)的总线730。
其中,所述存储单元存储有程序代码,所述程序代码可以被所述处理单元710执行,使得所述处理单元710执行本说明书上述“实施例方法”部分中描述的根据本发明各种示例性实施方式的步骤。
存储单元720可以包括易失性存储单元形式的可读介质,例如随机存取存储单元(RAM)721和/或高速缓存存储单元722,还可以进一步包括只读存储单元(ROM)723。
存储单元720还可以包括具有一组(至少一个)程序模块725的程序/实用工具724,这样的程序模块725包括但不限于:操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。
总线730可以为表示几类总线结构中的一种或多种,包括存储单元总线或者存储单元控制器、外围总线、图形加速端口、处理单元或者使用多种总线结构中的任意总线结构的局域总线。
电子设备700也可以与一个或多个外部设备900(例如键盘、指向设备、蓝牙设备等)通信,还可与一个或者多个使得用户能与该电子设备700交互的设备通信,和/或与使得该电子设备700能与一个或多个其它计算设备进行通信的任何设备(例如路由器、调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口750进行,比如与显示单元740通信。并且,电子设备700还可以通过网络适配器760与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器760通过总线730与电子设备700的其它模块通信。应当明白,尽管图中未示出,可以结合电子设备700使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
通过以上的实施方式的描述,本领域的技术人员易于理解,这里描述的示例实施方式可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本公开实施方式的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中或网络上,包括若干指令以使得一台计算设备(可以是个人计算机、服务器、终端装置、或者网络设备等)执行根据本公开实施方式的方法。
根据本公开的第四方面,还提供了一种计算机可读存储介质,其上存储有能够实现本说明书上述方法的程序产品。在一些可能的实施方式中,本发明的各个方面还可以实现为一种程序产品的形式,其包括程序代码,当所述程序产品在终端设备上运行时,所述程序代码用于使所述终端设备执行本说明书上述“示例性方法”部分中描述的根据本发明各种示例性实施方式的步骤。
参考图8所示,描述了根据本发明的实施方式的用于实现上述方法的程序产品800,其可以采用便携式紧凑盘只读存储器(CD-ROM)并包括程序代码,并可以在终端设备,例如个人电脑上运行。然而,本发明的程序产品不限于此,在本文件中,可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
所述程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以为但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、有线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言的任意组合来编写用于执行本发明操作的程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、C++等,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
此外,上述附图仅是根据本发明示例性实施例的方法所包括的处理的示意性说明,而不是限制目的。易于理解,上述附图所示的处理并不表明或限制这些处理的时间顺序。另外,也易于理解,这些处理可以是例如在多个模块中同步或异步执行的。
应当理解的是,本发明并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围执行各种修改和改变。本发明的范围仅由所附的权利要求来限制。
Claims (10)
1.一种接口请求的并发数量控制方法,其特征在于,所述方法包括:
当接收到接口调用请求时,判断预设的非关系型数据库中是否存在与当前时间段匹配的目标键,所述目标键包括与所述当前时间段对应的时间标识;
如果存在所述目标键,则判断所述目标键的键值与1之和是否超过预定数量阈值;
如果所述键值与1之和未超过所述预定数量阈值,则在所述非关系型数据库中将与所述目标键对应的键值加1,并处理所述接口调用请求;
如果所述键值与1之和超过所述预定数量阈值,则向所述接口调用请求的发送方返回请求失败提醒信息。
2.根据权利要求1所述的接口请求的并发数量控制方法,其特征在于,在判断预设的非关系型数据库中是否存在与当前时间段匹配的目标键之后,所述方法还包括:
如果不存在与当前时间段匹配的目标键,则根据所述当前时间段生成包括与所述当前时间段对应的时间标识的键,作为与当前时间段匹配的目标键;
初始化生成与所述目标键对应的键值,并将所述目标键和与所述目标键对应的键值存储至所述非关系型数据库中;
处理所述接口调用请求。
3.根据权利要求2所述的接口请求的并发数量控制方法,其特征在于,所述将所述目标键和与所述目标键对应的键值存储至所述非关系型数据库中,包括:
将所述目标键和与所述目标键对应的键值存储至所述非关系型数据库中,并为所述目标键设置有效期,以便在达到所述有效期之后使所述目标键被所述非关系型数据库删除。
4.根据权利要求1-3任意一项所述的接口请求的并发数量控制方法,其特征在于,所述方法由服务端执行,所述预定数量阈值用于对所述服务端并发处理的接口调用请求的总数量进行限制。
5.根据权利要求1-3任意一项所述的接口请求的并发数量控制方法,其特征在于,所述当接收到接口调用请求时,判断预设的非关系型数据库中是否存在与当前时间段匹配的目标键,包括:
当接收到接口调用请求时,判断预设的非关系型数据库中是否存在与当前时间段匹配且包含了所述接口调用请求中的接口名称的目标键。
6.根据权利要求1-3任意一项所述的接口请求的并发数量控制方法,其特征在于,所述当接收到接口调用请求时,判断预设的非关系型数据库中是否存在与当前时间段匹配的目标键,包括:
当接收到接口调用请求时,判断预设的非关系型数据库中是否存在与当前时间段匹配且包含了所述接口调用请求中携带的用户标识的目标键。
7.根据权利要求1-3任意一项所述的接口请求的并发数量控制方法,其特征在于,所述当接收到接口调用请求时,判断预设的非关系型数据库中是否存在与当前时间段匹配的目标键,包括:
当接收到接口调用请求时,判断预设的非关系型数据库中是否存在与当前时间段匹配且包含了所述接口调用请求中携带的接口名称和用户标识的目标键。
8.一种接口请求的并发数量控制装置,其特征在于,所述装置包括:
第一判断模块,被配置为当接收到接口调用请求时,判断预设的非关系型数据库中是否存在与当前时间段匹配的目标键,所述目标键包括与所述当前时间段对应的时间标识;
第二判断模块,被配置为如果存在所述目标键,则判断所述目标键的键值与1之和是否超过预定数量阈值;
加法和处理模块,被配置为如果所述键值与1之和未超过所述预定数量阈值,则在所述非关系型数据库中将与所述目标键对应的键值加1,并处理所述接口调用请求;
返回模块,被配置为如果所述键值与1之和超过所述预定数量阈值,则向所述接口调用请求的发送方返回请求失败提醒信息。
9.一种计算机可读程序介质,其特征在于,其存储有计算机程序指令,当所述计算机程序指令被计算机执行时,使计算机执行根据权利要求1至7中任一项所述的方法。
10.一种电子设备,其特征在于,所述电子设备包括:
处理器;
存储器,所述存储器上存储有计算机可读指令,所述计算机可读指令被所述处理器执行时,实现如权利要求1至7任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210824527.0A CN115168074A (zh) | 2022-07-13 | 2022-07-13 | 接口请求的并发数量控制方法、装置、介质及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210824527.0A CN115168074A (zh) | 2022-07-13 | 2022-07-13 | 接口请求的并发数量控制方法、装置、介质及电子设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115168074A true CN115168074A (zh) | 2022-10-11 |
Family
ID=83492714
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210824527.0A Pending CN115168074A (zh) | 2022-07-13 | 2022-07-13 | 接口请求的并发数量控制方法、装置、介质及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115168074A (zh) |
-
2022
- 2022-07-13 CN CN202210824527.0A patent/CN115168074A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20220115012A1 (en) | Method and apparatus for processing voices, device and computer storage medium | |
KR102407334B1 (ko) | 게이트웨이 장치 및 그 동작 방법 | |
CN111737022B (zh) | 一种基于微服务的接口调用方法、系统、设备及介质 | |
US11990130B2 (en) | Method, apparatus, device and computer storage medium for processing voices | |
CN111694620B (zh) | 第三方业务的交互方法、装置、设备及计算机存储介质 | |
CN112800410A (zh) | 一种多产品登录管理方法、装置、设备及存储介质 | |
CN111881387A (zh) | 用于小程序的数据处理方法、装置、设备和介质 | |
US11178197B2 (en) | Idempotent processing of data streams | |
CN107295086B (zh) | 集群会话防丢失方法及系统 | |
CN110177096B (zh) | 客户端认证方法、装置、介质和计算设备 | |
CN108600255B (zh) | Mock服务管理方法、装置、计算机设备以及存储介质 | |
CN115168074A (zh) | 接口请求的并发数量控制方法、装置、介质及电子设备 | |
CN113824675B (zh) | 管理登录态的方法和装置 | |
CN114500630A (zh) | 消息推送的方法、装置、系统、存储介质和电子设备 | |
CN111460020B (zh) | 用于解析消息的方法、装置、电子设备和介质 | |
CN112948733A (zh) | 接口维护方法、装置、计算设备以及介质 | |
CN115174367B (zh) | 一种业务系统边界确定方法、装置、电子设备及存储介质 | |
CN116545777B (zh) | 用户类别切换方法、装置、存储介质与电子设备 | |
CN109889590B (zh) | 消息处理方法、装置、客户端和计算机可读介质 | |
CN111769965A (zh) | 信息处理方法、装置和设备 | |
KR20070079518A (ko) | 메시지 라우팅 처리시스템 및 그 처리방법 | |
CN116743864A (zh) | 门户集成方法、装置、设备及存储介质 | |
CN118034895A (zh) | 一种文件预览方法和相关装置 | |
CN117479172A (zh) | 隐私号绑定方法、装置、电子设备及存储介质 | |
CN113918183A (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 |