CN111447150B - 访问请求限流方法、服务器及存储介质 - Google Patents
访问请求限流方法、服务器及存储介质 Download PDFInfo
- Publication number
- CN111447150B CN111447150B CN202010131710.3A CN202010131710A CN111447150B CN 111447150 B CN111447150 B CN 111447150B CN 202010131710 A CN202010131710 A CN 202010131710A CN 111447150 B CN111447150 B CN 111447150B
- Authority
- CN
- China
- Prior art keywords
- request
- current limiting
- token
- access request
- residual
- 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
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/215—Flow control; Congestion control using token-bucket
-
- 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
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明涉及数据处理技术,提供了一种访问请求限流方法、服务器及存储介质。该方法通过网关接收客户端的访问请求后,根据请求中的URL地址获得相应的限流策略,根据请求中的标识生成时间戳及请求对应的业务类型的键值对,根据业务类型的键值对读取令牌桶处理完上次请求后的令牌数、上次获取令牌的时间,基于时间戳、上一次获取令牌的时间及限流策略计算得到处理该请求后的剩余令牌数,将时间戳及该剩余令牌数写入数据库,并将剩余令牌数发送至网关,最后根据剩余令牌数及预设值判断是否对该请求执行限流操作。本发明可以控制客户端的访问请求数,不需要单独维护令牌桶和令牌数,极大地减少了内存和线程的消耗。
Description
技术领域
本发明涉及数据处理领域,尤其涉及一种访问请求限流方法、服务器及存储介质。
背景技术
限流是服务降级的一种,通过限制系统的输入和输出流量以达到保护系统的目的。目前JAVA编程实现的令牌桶算法的限流方法只能满足单机限流,与令牌桶相关的数据信息直接存放在内存,无法满足在微服务分布式条件下多机限流,此外,通过这种限流方法控制客户端的访问请求时,由于令牌工厂会以特定的速率往令牌桶中投放令牌,系统需要维护多个令牌桶和令牌工厂,极大地增加了系统内存和线程的消耗。
发明内容
鉴于以上内容,本发明提供一种访问请求限流方法、服务器及存储介质,其目的在于解决现有的限流方法对系统内存和线程消耗大的问题。
为实现上述目的,本发明提供一种访问请求限流方法,该方法包括:
接收步骤:通过所述网关接收客户端发出的访问请求,解析所述访问请求,获取所述访问请求携带的URL地址和请求标识,将所述URL地址与预设数据库中预先配置的限流策略集合进行匹配,得到与该URL地址匹配的限流策略;
读取步骤:基于所述请求标识生成该请求的时间戳及该请求对应的业务类型的键值对,并将所述业务类型的键值对写入所述预设数据库,基于所述限流策略读取该请求对应的令牌桶速率及请求所需令牌数;
计算步骤:根据所述业务类型的键值对从所述预设数据库中读取令牌桶第一剩余令牌数、上一次获取令牌的时间,基于所述时间戳、所述上一次获取令牌的时间及所述令牌桶速率,计算得到令牌桶新增的令牌数,基于所述第一剩余令牌数及所述新增的令牌数计算得到令牌桶的第二剩余令牌数,基于所述请求所需令牌数及所述第二剩余令牌数计算得到第三剩余令牌数,并将所述时间戳及第三剩余令牌数写入所述预设数据库;及
限流步骤:将所述第三剩余令牌数发送至所述网关,若所述第三剩余令牌数大于或等于预设值,则响应所述访问请求,并将处理所述访问请求的结果反馈至客户端,若所述第三剩余令牌数小于预设值,则拒绝所述访问请求。
优选的,所述接收步骤包括:
遍历所述限流策略集合中的限流策略,若基于所述URL地址未匹配到限流策略,则将限流策略集中通用的限流策略作为所述URL地址匹配的限流策略,若基于所述URL地址匹配到多个限流策略,则从所述多个限流策略中读取优先级最高的限流策略作为所述URL地址匹配的限流策略。
优选的,所述将所述时间戳及第三剩余令牌数写入所述预设数据库包括:
分别生成所述时间戳及所述第三剩余令牌数对应的键值对,将所述对应的键值对写入所述预设数据库,基于预设计算规则为所述对应的键值对的键值设置有效时长。
优选的,所述预设计算规则包括:
T=(C/V)×a,
其中,T表示所述有效时长,C表示令牌桶容量,V表示所述令牌桶速率,a表示常数。
优选的,所述方法还包括:
判断所述访问请求是否为恶意注册请求,或爬虫过度抓取请求,当判断所述访问请求为恶意请求或爬虫过度抓取请求时,确定所述访问请求为异常请求并拒绝所述异常请求,当判断所述访问请求为非恶意注册请求或非爬虫过度抓取请求时,确定所述访问请求为正常请求并响应所述正常请求。
为实现上述目的,本发明还提供一种服务器,该服务器包括:存储器及处理器,所述存储器上存储访问请求限流程序,所述访问请求限流程序被所述处理器执行,实现如下步骤:
接收步骤:通过所述网关接收客户端发出的访问请求,解析所述访问请求,获取所述访问请求携带的URL地址和请求标识,将所述URL地址与预设数据库中预先配置的限流策略集合进行匹配,得到与该URL地址匹配的限流策略;
读取步骤:基于所述请求标识生成该请求的时间戳及该请求对应的业务类型的键值对,并将所述业务类型的键值对写入所述预设数据库,基于所述限流策略读取该请求对应的令牌桶速率及请求所需令牌数;
计算步骤:根据所述业务类型的键值对从所述预设数据库中读取令牌桶第一剩余令牌数、上一次获取令牌的时间,基于所述时间戳、所述上一次获取令牌的时间及所述令牌桶速率,计算得到令牌桶新增的令牌数,基于所述第一剩余令牌数及所述新增的令牌数计算得到令牌桶的第二剩余令牌数,基于所述请求所需令牌数及所述第二剩余令牌数计算得到第三剩余令牌数,并将所述时间戳及第三剩余令牌数写入所述预设数据库;及
限流步骤:将所述第三剩余令牌数发送至所述网关,若所述第三剩余令牌数大于或等于预设值,则响应所述访问请求,并将处理所述访问请求的结果反馈至客户端,若所述第三剩余令牌数小于预设值,则拒绝所述访问请求。
优选的,所述接收步骤包括:
遍历所述限流策略集合中的限流策略,若基于所述URL地址未匹配到限流策略,则将限流策略集中通用的限流策略作为所述URL地址匹配的限流策略,若基于所述URL地址匹配到多个限流策略,则从所述多个限流策略中读取优先级最高的限流策略作为所述URL地址匹配的限流策略。
优选的,所述将所述时间戳及第三剩余令牌数写入所述预设数据库包括:
分别生成所述时间戳及所述第三剩余令牌数对应的键值对,将所述对应的键值对写入所述预设数据库,基于预设计算规则为所述对应的键值对的键值设置有效时长。
优选的,所述预设计算规则包括:
T=(C/V)×a,
其中,T表示所述有效时长,C表示令牌桶容量,V表示所述令牌桶速率,a表示常数。
为实现上述目的,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质中包括访问请求限流程序,所述访问请求限流程序被处理器执行时,实现如上所述访问请求限流方法中的任意步骤。
本发明提出的访问请求限流方法、服务器及存储介质,可以在网关对单个微服务集群和整体系统进行限流,采用数据库实现令牌桶算法不需要单独维护一个令牌桶,所有的请求访问都访同一个数据库,可以满足多机限流,用两次获取令牌的时间差计算令牌桶剩余的令牌数,可以有效地控制客户端的访问请求数,不需要单独维护令牌桶和令牌数,极大减少了内存和线程的消耗。
附图说明
图1为本发明服务器较佳实施例的示意图;
图2为图1中访问请求限流程序较佳实施例的模块示意图;
图3为本发明访问请求限流方法较佳实施例的流程图;
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
参照图1所示,为本发明服务器1较佳实施例的示意图。
该服务器1包括但不限于:存储器11、处理器12、显示器13及网络接口14。所述服务器1通过网络接口14连接网络,获取原始数据。其中,所述网络可以是企业内部网(Intranet)、互联网(Internet)、全球移动通讯系统(Global System of Mobilecommunication,GSM)、宽带码分多址(Wideband Code Division Multiple Access,WCDMA)、4G网络、5G网络、蓝牙(Bluetooth)、Wi-Fi、通话网络等无线或有线网络。
其中,存储器11至少包括一种类型的可读存储介质,所述可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘等。在一些实施例中,所述存储器11可以是所述服务器1的内部存储单元,例如该服务器1的硬盘或内存。在另一些实施例中,所述存储器11也可以是所述服务器1的外部存储设备,例如该服务器1配备的插接式硬盘,智能存储卡(SmartMedia Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。当然,所述存储器11还可以既包括所述服务器1的内部存储单元也包括其外部存储设备。本实施例中,存储器11通常用于存储安装于所述服务器1的操作系统和各类应用软件,例如访问请求限流程序10的程序代码等。此外,存储器11还可以用于暂时地存储已经输出或者将要输出的各类数据。
处理器12在一些实施例中可以是中央处理器(Central Processing Unit,CPU)、控制器、微控制器、微处理器、或其他数据处理芯片。该处理器12通常用于控制所述服务器1的总体操作,例如执行数据交互或者通信相关的控制和处理等。本实施例中,所述处理器12用于运行所述存储器11中存储的程序代码或者处理数据,例如运行访问请求限流程序10的程序代码等。
显示器13可以称为显示屏或显示单元。在一些实施例中显示器13可以是LED显示器、液晶显示器、触控式液晶显示器以及有机发光二极管(Organic Light-EmittingDiode,OLED)触摸器等。显示器13用于显示在服务器1中处理的信息以及用于显示可视化的工作界面,例如显示数据统计的结果。
网络接口14可选地可以包括标准的有线接口、无线接口(如WI-FI接口),该网络接口14通常用于在所述服务器1与其它电子设备之间建立通信连接。
图1仅示出了具有组件11-14以及访问请求限流程序10的服务器1,但是应理解的是,并不要求实施所有示出的组件,可以替代的实施更多或者更少的组件。
可选地,所述服务器1还可以包括用户接口,用户接口可以包括显示器(Display)、输入单元比如键盘(KEYboard),可选的用户接口还可以包括标准的有线接口、无线接口。可选地,在一些实施例中,显示器可以是LED显示器、液晶显示器、触控式液晶显示器以及有机发光二极管(Organic Light-Emitting Diode,OLED)触摸器等。其中,显示器也可以适当的称为显示屏或显示单元,用于显示在服务器1中处理的信息以及用于显示可视化的用户界面。
该服务器1还可以包括射频(Radio Frequency,RF)电路、传感器和音频电路等等,在此不再赘述。
在上述实施例中,处理器12执行存储器11中存储的访问请求限流程序10时可以实现如下步骤:
接收步骤:通过所述网关接收客户端发出的访问请求,解析所述访问请求,获取所述访问请求携带的URL地址和请求标识,将所述URL地址与预设数据库中预先配置的限流策略集合进行匹配,得到与该URL地址匹配的限流策略;
读取步骤:基于所述请求标识生成该请求的时间戳及该请求对应的业务类型的键值对,并将所述业务类型的键值对写入所述预设数据库,基于所述限流策略读取该请求对应的令牌桶速率及请求所需令牌数;
计算步骤:根据所述业务类型的键值对从所述预设数据库中读取令牌桶第一剩余令牌数、上一次获取令牌的时间,基于所述时间戳、所述上一次获取令牌的时间及所述令牌桶速率,计算得到令牌桶新增的令牌数,基于所述第一剩余令牌数及所述新增的令牌数计算得到令牌桶的第二剩余令牌数,基于所述请求所需令牌数及所述第二剩余令牌数计算得到第三剩余令牌数,并将所述时间戳及第三剩余令牌数写入所述预设数据库;及
限流步骤:将所述第三剩余令牌数发送至所述网关,若所述第三剩余令牌数大于或等于预设值,则响应所述访问请求,并将处理所述访问请求的结果反馈至客户端,若所述第三剩余令牌数小于预设值,则拒绝所述访问请求。
所述存储设备可以为服务器1的存储器11,也可以为与服务器1通讯连接的其它存储设备。
关于上述步骤的详细介绍,请参照下述图2关于访问请求限流程序10实施例的程序模块图以及图3关于访问请求限流方法实施例的流程图的说明。
在其他实施例中,所述访问请求限流程序10可以被分割为多个模块,该多个模块被存储于存储器12中,并由处理器13执行,以完成本发明。本发明所称的模块是指能够完成特定功能的一系列计算机程序指令段。
参照图2所示,为图1中访问请求限流程序10一实施例的程序模块图。在本实施例中,所述访问请求限流程序10可以被分割为:接收模块110、读取模块120、计算模块130及限流模块140。
接收模块110,用于通过所述网关接收客户端发出的访问请求,解析所述访问请求,获取所述访问请求携带的URL地址和请求标识,将所述URL地址与预设数据库中预先配置的限流策略集合进行匹配,得到与该URL地址匹配的限流策略。
在本实施例中,与服务器通信连接的网关接收客户端发出的访问请求后,服务器解析该请求获取请求中的URL地址和请求标识,并将URL地址与预设数据库(例如,Redis数据库)中预先配置的限流策略集合进行匹配,得到与该URL地址匹配的限流策略。所有客户端的访问请求都会先通过网关(Gateway)访问系统,网关又称网间连接器、协议转换器。例如存在网络A和网络B,如果网络A中的主机发现数据包的目的主机不在网络A中,该主机就把数据包转发至网络A的网关,由网络A的网关将该数据包转发至网络B的网关,网络B的网关将数据包发送给网络B的目的主机。所以在网关限流既可以控制整个系统的流量,也可限制单个分布式微服务集群的整体流量,例如,在某个预售系统的网关进行限流,既可以控制整个预售系统流量,也可以限制预售系统中的订单系统或库存系统的流量。
限流策略以JSON格式预先存储在配置文件中,也可以集成到数据库或者缓存中。限流策略包括令牌桶的容量、单位时间内允许的流量大小和限流规则等。在本实施例中,可以根据不同的业务场景制定限流规则,比如根据访问请求的标识、Token、API等方式限流。在配置限流策略时,根据各种不同业务类型的访问请求携带的URL地址或标识预先匹配一个或多个限流策略,从而建立请求与限流策略的映射关系。
进一步地,将URL地址与预设数据库中预先配置的限流策略集合进行匹配,得到与该URL地址匹配的限流策略包括:遍历所述限流策略集合中的限流策略,若基于所述URL地址未匹配到限流策略,则将限流策略集中通用的限流策略作为所述URL地址匹配的限流策略,若基于所述URL地址匹配到多个限流策略,则从所述多个限流策略中读取优先级最高的限流策略作为所述URL地址匹配的限流策略。
读取模块120,用于基于所述请求标识生成该请求的时间戳及该请求对应的业务类型的键值对,并将所述业务类型的键值对写入所述预设数据库,基于所述限流策略读取该请求对应的令牌桶速率及请求所需令牌数。
本实施例中,可以根据预设的哈希函数生成所述请求对应的业务类型的键值对,哈希函数可以是md5哈希函数或crc32哈希函数等。生成键值对后,将该键值对写入所述预设数据库中。其中,令牌桶容量、令牌桶速率及请求所需令牌数是配置在相应的限流策略里的,本实施例中,请求所需令牌数量默认为一个请求需要一个令牌。
不同的限流策略会生成一个KEY,KEY与限流策略对应,在Redis存储数据时用不同的KEY来区分不同的限流策略。假设在限流策略里,某个业务类型生成的KEY字符串为aabb11,拼上_time之后,KEY就变成了aabb11_time,表示上一次获取令牌时间的KEY,业务类型生成的KEY字符串是aabb11,该KEY字符串拼上_tokens后,KEY就变成了aabb11_tokens,表示令牌桶的剩余令牌数的KEY。
计算模块130,用于根据所述业务类型的键值对从所述预设数据库中读取令牌桶第一剩余令牌数、上一次获取令牌的时间,基于所述时间戳、所述上一次获取令牌的时间及所述令牌桶速率,计算得到令牌桶新增的令牌数,基于所述第一剩余令牌数及所述新增的令牌数计算得到令牌桶的第二剩余令牌数,基于所述请求所需令牌数及所述第二剩余令牌数计算得到第三剩余令牌数,并将所述时间戳及第三剩余令牌数写入所述预设数据库。
在本实施例中,从预设数据库(Redis数据库)中读取令牌桶的第一剩余令牌数,第一剩余令牌数是指处理完上次请求时,令牌桶中剩余的令牌数,如果是第一次业务请求,第一剩余令牌数为令牌桶容量,从Redis数据库中读取上一次获取令牌的时间,如果是第一次读取,值设置为0,所述请求生成的时间戳和上一次获取令牌时间之差就是所述请求与上一次请求获取令牌的时间间隔,将该时间间隔乘以令牌桶速率(即令牌桶产生令牌的速率),得到上次处理请求后到所述时间戳为止令牌桶新增的令牌数,根据所述第一剩余令牌数及所述新增的令牌数计算得到令牌桶的第二剩余令牌数,第二剩余令牌数表示处理所述请求前,令牌桶中剩余的令牌数,基于所述请求所需令牌数及第二剩余令牌数,计算得到第三剩余令牌数,第三剩余令牌数表示处理所述请求后,令牌桶剩余的令牌数,并将所述时间戳及第三剩余令牌数写入Redis数据库,当需要处理下一次请求时,就可以获取所述时间戳和所述第三剩余令牌数,从而计算出处理该请求后令牌桶的剩余令牌数。该方式实现的令牌桶算法,用两次获取令牌的时间差计算令牌桶剩余的令牌数,不需要单独维护令牌桶和令牌数,极大减少了系统的内存和线程的开销。
进一步地,将所述时间戳及第三剩余令牌数写入所述预设数据库包括:分别生成所述时间戳及所述第三剩余令牌数对应的键值对,将所述对应的键值对写入所述预设数据库,基于预设计算规则为所述对应的键值对的键值设置有效时长。当该键值对失效之后,Redis数据库会自动清除失效的键值对,防止数据库中存在过多无效的键值对。所述预设计算规则包括:
T=(C/V)×a,
其中,T表示所述有效时长,C表示令牌桶容量,V表示所述令牌桶速率,a表示常数,取值为3。
限流模块140,用于将所述第三剩余令牌数发送至所述网关,若所述第三剩余令牌数大于或等于预设值,则响应所述访问请求,并将处理所述访问请求的结果反馈至客户端,若所述第三剩余令牌数小于预设值,则拒绝所述访问请求。
在本实施例中,将第三剩余令牌数发送至网关,如果第三剩余令牌数大于或等于预设值(取值为0),则说明流量没有超出限制,服务器响应所述请求,将处理请求的结果反馈至客户端,如果第三剩余令牌数小于0,则说明流量已超出限制,拒绝所述请求。
进一步地,访问请求限流程序被处理器执行时还可实现:判断所述请求是否为恶意注册请求,或判断所述请求是否为爬虫过度抓取请求,当判断所述请求为恶意请求或爬虫过度抓取请求时,确定所述请求为非正常请求,当判断所述请求为非恶意注册请求或非爬虫过度抓取请求时,确定所述请求为正常请求,当确定所述请求为所述非正常请求时,拒绝所述请求。
此外,本发明还提供一种访问请求限流方法。参照图3所示,为本发明访问请求限流方法的实施例的方法流程示意图。服务器1的处理器12执行存储器11中存储的访问请求限流程序10时实现访问请求限流方法的如下步骤:
步骤S10:通过所述网关接收客户端发出的访问请求,解析所述访问请求,获取所述访问请求携带的URL地址和请求标识,将所述URL地址与预设数据库中预先配置的限流策略集合进行匹配,得到与该URL地址匹配的限流策略。
在本实施例中,与服务器通信连接的网关接收客户端发出的访问请求后,服务器解析该请求获取请求中的URL地址和请求标识,并将URL地址与预设数据库(例如,Redis数据库)中预先配置的限流策略集合进行匹配,得到与该URL地址匹配的限流策略。所有客户端的访问请求都会先通过网关(Gateway)访问系统,网关又称网间连接器、协议转换器。例如存在网络A和网络B,如果网络A中的主机发现数据包的目的主机不在网络A中,该主机就把数据包转发至网络A的网关,由网络A的网关将该数据包转发至网络B的网关,网络B的网关将数据包发送给网络B的目的主机。所以在网关限流既可以控制整个系统的流量,也可限制单个分布式微服务集群的整体流量,例如,在某个预售系统的网关进行限流,既可以控制整个预售系统流量,也可以限制预售系统中的订单系统或库存系统的流量。
限流策略以JSON格式预先存储在配置文件中,也可以集成到数据库或者缓存中。限流策略包括令牌桶的容量、单位时间内允许的流量大小和限流规则等。在本实施例中,可以根据不同的业务场景制定限流规则,比如根据访问请求的标识、Token、API等方式限流。在配置限流策略时,根据各种不同业务类型的访问请求携带的URL地址或标识预先匹配一个或多个限流策略,从而建立请求与限流策略的映射关系。
进一步地,将URL地址与预设数据库中预先配置的限流策略集合进行匹配,得到与该URL地址匹配的限流策略包括:遍历所述限流策略集合中的限流策略,若基于所述URL地址未匹配到限流策略,则将限流策略集中通用的限流策略作为所述URL地址匹配的限流策略,若基于所述URL地址匹配到多个限流策略,则从所述多个限流策略中读取优先级最高的限流策略作为所述URL地址匹配的限流策略。
步骤S20:基于所述请求标识生成该请求的时间戳及该请求对应的业务类型的键值对,并将所述业务类型的键值对写入所述预设数据库,基于所述限流策略读取该请求对应的令牌桶速率及请求所需令牌数。
本实施例中,可以根据预设的哈希函数生成所述请求对应的业务类型的键值对,哈希函数可以是md5哈希函数或crc32哈希函数等。生成键值对后,将该键值对写入所述预设数据库中。其中,令牌桶容量、令牌桶速率及请求所需令牌数是配置在相应的限流策略里的,本实施例中,请求所需令牌数量默认为一个请求需要一个令牌。
不同的限流策略会生成一个KEY,KEY与限流策略对应,在Redis存储数据时用不同的KEY来区分不同的限流策略。假设在限流策略里,某个业务类型生成的KEY字符串为aabb11,拼上_time之后,KEY就变成了aabb11_time,表示上一次获取令牌时间的KEY,业务类型生成的KEY字符串是aabb11,该KEY字符串拼上_tokens后,KEY就变成了aabb11_tokens,表示令牌桶的剩余令牌数的KEY。
步骤S30:根据所述业务类型的键值对从所述预设数据库中读取令牌桶第一剩余令牌数、上一次获取令牌的时间,基于所述时间戳、所述上一次获取令牌的时间及所述令牌桶速率,计算得到令牌桶新增的令牌数,基于所述第一剩余令牌数及所述新增的令牌数计算得到令牌桶的第二剩余令牌数,基于所述请求所需令牌数及所述第二剩余令牌数计算得到第三剩余令牌数,并将所述时间戳及第三剩余令牌数写入所述预设数据库。
在本实施例中,从预设数据库(Redis数据库)中读取令牌桶的第一剩余令牌数,第一剩余令牌数是指处理完上次请求时,令牌桶中剩余的令牌数,如果是第一次业务请求,第一剩余令牌数为令牌桶容量,从Redis数据库中读取上一次获取令牌的时间,如果是第一次读取,值设置为0,所述请求生成的时间戳和上一次获取令牌时间之差就是所述请求与上一次请求获取令牌的时间间隔,将该时间间隔乘以令牌桶速率(即令牌桶产生令牌的速率),得到上次处理请求后到所述时间戳为止令牌桶新增的令牌数,根据所述第一剩余令牌数及所述新增的令牌数计算得到令牌桶的第二剩余令牌数,第二剩余令牌数表示处理所述请求前,令牌桶中剩余的令牌数,基于所述请求所需令牌数及第二剩余令牌数,计算得到第三剩余令牌数,第三剩余令牌数表示处理所述请求后,令牌桶剩余的令牌数,并将所述时间戳及第三剩余令牌数写入Redis数据库,当需要处理下一次请求时,就可以获取所述时间戳和所述第三剩余令牌数,从而计算出处理该请求后令牌桶的剩余令牌数。该方式实现的令牌桶算法,用两次获取令牌的时间差计算令牌桶剩余的令牌数,不需要单独维护令牌桶和令牌数,极大减少了系统的内存和线程的开销。
进一步地,将所述时间戳及第三剩余令牌数写入所述预设数据库包括:分别生成所述时间戳及所述第三剩余令牌数对应的键值对,将所述对应的键值对写入所述预设数据库,基于预设计算规则为所述对应的键值对的键值设置有效时长。当该键值对失效之后,Redis数据库会自动清除失效的键值对,防止数据库中存在过多无效的键值对。所述预设计算规则包括:
T=(C/V)×a,
其中,T表示所述有效时长,C表示令牌桶容量,V表示所述令牌桶速率,a表示常数,取值为3。
步骤S40:将所述第三剩余令牌数发送至所述网关,若所述第三剩余令牌数大于或等于预设值,则响应所述访问请求,并将处理所述访问请求的结果反馈至客户端,若所述第三剩余令牌数小于预设值,则拒绝所述访问请求。
在本实施例中,将第三剩余令牌数发送至网关,如果第三剩余令牌数大于或等于预设值(取值为0),则说明流量没有超出限制,服务器响应所述请求,将处理请求的结果反馈至客户端,如果第三剩余令牌数小于0,则说明流量已超出限制,拒绝所述请求。
进一步地,访问请求限流方法还包括:判断所述请求是否为恶意注册请求,或判断所述请求是否为爬虫过度抓取请求,当判断所述请求为恶意请求或爬虫过度抓取请求时,确定所述请求为非正常请求,当判断所述请求为非恶意注册请求或非爬虫过度抓取请求时,确定所述请求为正常请求,当确定所述请求为所述非正常请求时,拒绝所述请求。
此外,本发明实施例还提出一种计算机可读存储介质,该计算机可读存储介质可以是硬盘、多媒体卡、SD卡、闪存卡、SMC、只读存储器(ROM)、可擦除可编程只读存储器(EPROM)、便携式紧致盘只读存储器(CD-ROM)、USB存储器等等中的任意一种或者几种的任意组合。所述计算机可读存储介质中包括访问请求限流程序10,所述访问请求限流程序10被处理器执行时实现如下操作:
接收步骤:通过所述网关接收客户端发出的访问请求,解析所述访问请求,获取所述访问请求携带的URL地址和请求标识,将所述URL地址与预设数据库中预先配置的限流策略集合进行匹配,得到与该URL地址匹配的限流策略;
读取步骤:基于所述请求标识生成该请求的时间戳及该请求对应的业务类型的键值对,并将所述业务类型的键值对写入所述预设数据库,基于所述限流策略读取该请求对应的令牌桶速率及请求所需令牌数;
计算步骤:根据所述业务类型的键值对从所述预设数据库中读取令牌桶第一剩余令牌数、上一次获取令牌的时间,基于所述时间戳、所述上一次获取令牌的时间及所述令牌桶速率,计算得到令牌桶新增的令牌数,基于所述第一剩余令牌数及所述新增的令牌数计算得到令牌桶的第二剩余令牌数,基于所述请求所需令牌数及所述第二剩余令牌数计算得到第三剩余令牌数,并将所述时间戳及第三剩余令牌数写入所述预设数据库;及
限流步骤:将所述第三剩余令牌数发送至所述网关,若所述第三剩余令牌数大于或等于预设值,则响应所述访问请求,并将处理所述访问请求的结果反馈至客户端,若所述第三剩余令牌数小于预设值,则拒绝所述访问请求。
本发明之计算机可读存储介质的具体实施方式与上述访问请求限流方法的具体实施方式大致相同,在此不再赘述。
需要说明的是,上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。并且本文中的术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、装置、物品或者方法不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、装置、物品或者方法所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、装置、物品或者方法中还存在另外的相同要素。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在如上所述的一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (8)
1.一种访问请求限流方法,应用于服务器,该服务器通信连接网关及客户端,其特征在于,所述方法包括:
接收步骤:通过所述网关接收客户端发出的访问请求,解析所述访问请求,获取所述访问请求携带的URL地址和请求标识,将所述URL地址与预设数据库中预先配置的限流策略集合进行匹配,得到与该URL地址匹配的限流策略;
读取步骤:基于所述请求标识生成该请求的时间戳及该请求对应的业务类型的键值对,并将所述业务类型的键值对写入所述预设数据库,基于所述限流策略读取该请求对应的令牌桶速率及请求所需令牌数;
计算步骤:根据所述业务类型的键值对从所述预设数据库中读取令牌桶第一剩余令牌数、上一次获取令牌的时间,基于所述时间戳、所述上一次获取令牌的时间及所述令牌桶速率,计算得到令牌桶新增的令牌数,基于所述第一剩余令牌数及所述新增的令牌数计算得到令牌桶的第二剩余令牌数,基于所述请求所需令牌数及所述第二剩余令牌数计算得到第三剩余令牌数,并将所述时间戳及第三剩余令牌数写入所述预设数据库;及
限流步骤:将所述第三剩余令牌数发送至所述网关,若所述第三剩余令牌数大于或等于预设值,则响应所述访问请求,并将处理所述访问请求的结果反馈至客户端,若所述第三剩余令牌数小于预设值,则拒绝所述访问请求;
其中,所述将所述时间戳及第三剩余令牌数写入所述预设数据库包括:分别生成所述时间戳及所述第三剩余令牌数对应的键值对,将所述对应的键值对写入所述预设数据库,基于预设计算规则为所述对应的键值对的键值设置有效时长。
2.如权利要求1所述的访问请求限流方法,其特征在于,所述接收步骤包括:
遍历所述限流策略集合中的限流策略,若基于所述URL地址未匹配到限流策略,则将限流策略集中通用的限流策略作为所述URL地址匹配的限流策略,若基于所述URL地址匹配到多个限流策略,则从所述多个限流策略中读取优先级最高的限流策略作为所述URL地址匹配的限流策略。
3.如权利要求1所述的访问请求限流方法,其特征在于,所述预设计算规则包括:
T=(C/V)×a,
其中,T表示所述有效时长,C表示令牌桶容量,V表示所述令牌桶速率,a表示常数。
4.如权利要求1所述的访问请求限流方法,其特征在于,所述方法还包括:
判断所述访问请求是否为恶意注册请求,或爬虫过度抓取请求,当判断所述访问请求为恶意请求或爬虫过度抓取请求时,确定所述访问请求为异常请求并拒绝所述异常请求,当判断所述访问请求为非恶意注册请求或非爬虫过度抓取请求时,确定所述访问请求为正常请求并响应所述正常请求。
5.一种服务器,该服务器通信连接网关及客户端,该服务器包括存储器及处理器,其特征在于,所述存储器上存储访问请求限流程序,所述访问请求限流程序被所述处理器执行,实现如下步骤:
接收步骤:通过所述网关接收客户端发出的访问请求,解析所述访问请求,获取所述访问请求携带的URL地址和请求标识,将所述URL地址与预设数据库中预先配置的限流策略集合进行匹配,得到与该URL地址匹配的限流策略;
读取步骤:基于所述请求标识生成该请求的时间戳及该请求对应的业务类型的键值对,并将所述业务类型的键值对写入所述预设数据库,基于所述限流策略读取该请求对应的令牌桶速率及请求所需令牌数;
计算步骤:根据所述业务类型的键值对从所述预设数据库中读取令牌桶第一剩余令牌数、上一次获取令牌的时间,基于所述时间戳、所述上一次获取令牌的时间及所述令牌桶速率,计算得到令牌桶新增的令牌数,基于所述第一剩余令牌数及所述新增的令牌数计算得到令牌桶的第二剩余令牌数,基于所述请求所需令牌数及所述第二剩余令牌数计算得到第三剩余令牌数,并将所述时间戳及第三剩余令牌数写入所述预设数据库;及
限流步骤:将所述第三剩余令牌数发送至所述网关,若所述第三剩余令牌数大于或等于预设值,则响应所述访问请求,并将处理所述访问请求的结果反馈至客户端,若所述第三剩余令牌数小于预设值,则拒绝所述访问请求;
其中,所述将所述时间戳及第三剩余令牌数写入所述预设数据库包括:分别生成所述时间戳及所述第三剩余令牌数对应的键值对,将所述对应的键值对写入所述预设数据库,基于预设计算规则为所述对应的键值对的键值设置有效时长。
6.如权利要求5所述的服务器,其特征在于,所述接收步骤包括:
遍历所述限流策略集合中的限流策略,若基于所述URL地址未匹配到限流策略,则将限流策略集中通用的限流策略作为所述URL地址匹配的限流策略,若基于所述URL地址匹配到多个限流策略,则从所述多个限流策略中读取优先级最高的限流策略作为所述URL地址匹配的限流策略。
7.如权利要求5所述的服务器,其特征在于,所述预设计算规则包括:
T=(C/V)×a,
其中,T表示所述有效时长,C表示令牌桶容量,V表示所述令牌桶速率,a表示常数。
8.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中包括访问请求限流程序,所述访问请求限流程序被处理器执行时,实现如权利要求1至4中任一项所述访问请求限流方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010131710.3A CN111447150B (zh) | 2020-02-29 | 2020-02-29 | 访问请求限流方法、服务器及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010131710.3A CN111447150B (zh) | 2020-02-29 | 2020-02-29 | 访问请求限流方法、服务器及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111447150A CN111447150A (zh) | 2020-07-24 |
CN111447150B true CN111447150B (zh) | 2023-07-28 |
Family
ID=71650665
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010131710.3A Active CN111447150B (zh) | 2020-02-29 | 2020-02-29 | 访问请求限流方法、服务器及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111447150B (zh) |
Families Citing this family (42)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114070847B (zh) * | 2020-07-27 | 2024-01-23 | 腾讯科技(深圳)有限公司 | 服务器的限流方法、装置、设备及存储介质 |
CN111935030A (zh) * | 2020-08-04 | 2020-11-13 | 科大国创云网科技有限公司 | 一种多维度的流量控制方法及系统 |
CN113765819A (zh) * | 2020-09-01 | 2021-12-07 | 北京沃东天骏信息技术有限公司 | 资源访问方法、装置、电子设备及存储介质 |
CN112087401B (zh) * | 2020-09-10 | 2024-05-28 | 北京星辰天合科技股份有限公司 | 分布式存储中实现服务质量的方法和装置 |
CN112202682A (zh) * | 2020-09-27 | 2021-01-08 | 平安国际智慧城市科技股份有限公司 | 接口流量控制方法、装置、计算机设备及存储介质 |
CN112564968B (zh) * | 2020-12-03 | 2022-03-29 | 深圳市腾讯计算机系统有限公司 | 故障处理方法、装置及存储介质 |
CN112615792B (zh) * | 2020-12-10 | 2023-10-13 | 北京房天下嘉居网络技术有限公司 | 接口限流方法及装置 |
CN112600761B (zh) * | 2020-12-11 | 2024-04-09 | 腾讯科技(深圳)有限公司 | 一种资源分配的方法、装置及存储介质 |
CN112612618B (zh) * | 2020-12-30 | 2022-07-19 | 深圳我家云网络科技有限公司 | 接口限流方法、装置、计算机设备和存储介质 |
CN112752307A (zh) * | 2021-01-04 | 2021-05-04 | 欧普照明股份有限公司 | 控制方法、数据处理设备、控制系统及存储介质 |
CN112953840A (zh) * | 2021-01-27 | 2021-06-11 | 上海金仕达成括信息科技有限公司 | 一种限流控制方法、网关设备及限流控制系统 |
CN113760365A (zh) * | 2021-01-28 | 2021-12-07 | 北京京东拓先科技有限公司 | 取令牌操作执行方法、装置、电子设备和计算机可读介质 |
CN112929291A (zh) * | 2021-02-18 | 2021-06-08 | 欧冶云商股份有限公司 | 一种基于redis的分布式限流方法、计算机设备和存储介质 |
CN113031872A (zh) * | 2021-03-26 | 2021-06-25 | 山东英信计算机技术有限公司 | 一种存储系统的数据写入方法及相关装置 |
CN115297037A (zh) * | 2021-04-19 | 2022-11-04 | 中国移动通信集团安徽有限公司 | 拨测方法、装置、设备及存储介质 |
CN113238815B (zh) * | 2021-05-13 | 2023-08-08 | 北京京东振世信息技术有限公司 | 一种接口访问控制方法、装置、设备及存储介质 |
CN113518041B (zh) * | 2021-06-15 | 2023-05-16 | 新华三大数据技术有限公司 | 一种报文处理方法及装置 |
CN113342498A (zh) * | 2021-06-28 | 2021-09-03 | 平安信托有限责任公司 | 并发请求处理方法、装置、服务器及存储介质 |
CN113542150B (zh) * | 2021-07-14 | 2023-06-02 | 杭州海康威视数字技术股份有限公司 | 一种数据传输方法、装置及中心端网桥 |
CN113282902B (zh) * | 2021-07-26 | 2022-03-08 | 南京蓝鲸人网络科技有限公司 | 一种业务行为安全控制方法、系统与设备 |
CN113704000B (zh) * | 2021-08-30 | 2024-05-17 | 康键信息技术(深圳)有限公司 | 服务访问优化方法、装置、设备及介质 |
CN113885794B (zh) * | 2021-09-10 | 2024-01-26 | 鸬鹚科技(深圳)有限公司 | 基于多云存储的数据访问方法、装置、计算机设备及介质 |
CN113938430B (zh) * | 2021-09-15 | 2023-06-30 | 山东有人物联网股份有限公司 | 一种流量控制方法、装置、设备及存储介质 |
CN113992593B (zh) * | 2021-10-20 | 2024-03-01 | 京东科技信息技术有限公司 | 服务资源调用方法、装置、电子设备及存储介质 |
CN114143265A (zh) * | 2021-11-26 | 2022-03-04 | 杭州安恒信息技术股份有限公司 | 一种网络流量限流方法、装置、设备及存储介质 |
CN114257550B (zh) * | 2021-12-31 | 2024-01-30 | 广州零世纪信息科技有限公司 | 接口访问流量的自动控制方法、装置、存储介质及服务器 |
CN114500381A (zh) * | 2022-01-20 | 2022-05-13 | 北京奇艺世纪科技有限公司 | 网络带宽限制方法、系统、电子设备及可读存储介质 |
CN114666411B (zh) * | 2022-03-02 | 2024-05-17 | 中国建设银行股份有限公司 | 请求处理方法、装置、服务器、存储介质及产品 |
CN114598658A (zh) * | 2022-03-07 | 2022-06-07 | 浪潮云信息技术股份公司 | 一种流量限制方法及装置 |
CN114866320A (zh) * | 2022-05-06 | 2022-08-05 | 中国银行股份有限公司 | 一种url参数防篡改的方法、装置、设备及存储介质 |
CN115037693B (zh) * | 2022-05-17 | 2023-05-26 | 瀚云科技有限公司 | 一种基于令牌桶的分布式限流方法和分布式限流装置 |
CN114979012B (zh) * | 2022-05-31 | 2024-06-21 | 郑州浪潮数据技术有限公司 | 一种网络流量的限流方法、系统、装置及计算机存储介质 |
CN115174486B (zh) * | 2022-06-01 | 2024-05-28 | 湖南天冠电子信息技术有限公司 | 一种报文传输方法、系统及存储介质 |
CN114915593B (zh) * | 2022-06-10 | 2023-05-09 | 北京世纪好未来教育科技有限公司 | 基于Redis的流量控制方法、装置、电子设备及存储介质 |
CN115242722B (zh) * | 2022-06-14 | 2024-04-16 | 中盈优创资讯科技有限公司 | 一种基于api网关的高级流控实现方法 |
CN115190078B (zh) * | 2022-06-28 | 2024-06-14 | 上海砾阳软件有限公司 | 一种访问流量控制方法、装置、设备以及存储介质 |
CN115208834A (zh) * | 2022-07-12 | 2022-10-18 | 武汉众邦银行股份有限公司 | 一种基于数据库存储过程设计的服务流量限制方法 |
CN115277854A (zh) * | 2022-07-21 | 2022-11-01 | 平安壹钱包电子商务有限公司 | 业务请求处理方法、装置、电子设备及存储介质 |
CN115396513A (zh) * | 2022-07-26 | 2022-11-25 | 深圳市酷开网络科技股份有限公司 | 流量的控制方法及装置、存储介质、电子设备 |
CN115190177B (zh) * | 2022-07-29 | 2024-06-04 | 中国工商银行股份有限公司 | 请求处理方法、装置、计算机设备、存储介质和程序产品 |
CN115801688A (zh) * | 2022-10-27 | 2023-03-14 | 兴业银行股份有限公司 | 支持动态配置细粒度流控方法和系统 |
CN116095013B (zh) * | 2022-12-29 | 2023-07-25 | 北京开科唯识技术股份有限公司 | 一种服务请求限流方法、装置及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108418764A (zh) * | 2018-02-07 | 2018-08-17 | 深圳壹账通智能科技有限公司 | 限流方法、装置、计算机设备和存储介质 |
CN109936511A (zh) * | 2017-12-19 | 2019-06-25 | 北京金山云网络技术有限公司 | 一种令牌获取方法、装置、服务器、终端设备及介质 |
CN110380986A (zh) * | 2019-07-23 | 2019-10-25 | 中南民族大学 | 基于Zuul的流量限制方法、装置、设备及存储介质 |
-
2020
- 2020-02-29 CN CN202010131710.3A patent/CN111447150B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109936511A (zh) * | 2017-12-19 | 2019-06-25 | 北京金山云网络技术有限公司 | 一种令牌获取方法、装置、服务器、终端设备及介质 |
CN108418764A (zh) * | 2018-02-07 | 2018-08-17 | 深圳壹账通智能科技有限公司 | 限流方法、装置、计算机设备和存储介质 |
CN110380986A (zh) * | 2019-07-23 | 2019-10-25 | 中南民族大学 | 基于Zuul的流量限制方法、装置、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN111447150A (zh) | 2020-07-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111447150B (zh) | 访问请求限流方法、服务器及存储介质 | |
CN108494771B (zh) | 电子装置、防火墙开通验证方法及存储介质 | |
EP3178011B1 (en) | Method and system for facilitating terminal identifiers | |
CN108491301B (zh) | 电子装置、基于redis的异常预警方法及存储介质 | |
CN110516471B (zh) | 基于信息安全的产品推广方法及相关设备 | |
CN110222107B (zh) | 一种数据发送方法及相关设备 | |
CN111131221B (zh) | 接口校验的装置、方法及存储介质 | |
CN111651667B (zh) | 数据推送分流控制方法、装置及计算机可读存储介质 | |
CN108965291B (zh) | 混合应用程序的注册登录方法、系统及计算机设备 | |
CN109995876B (zh) | 文件传输方法、装置、系统和计算机存储介质 | |
CN112130936B (zh) | 基于轮询的数据调用方法、装置、设备及存储介质 | |
CN113259429B (zh) | 会话保持管控方法、装置、计算机设备及介质 | |
CN108491466B (zh) | 电子装置、访问指令信息获取方法及存储介质 | |
CN105282112A (zh) | 一种终端及检测终端数据交互的安全性的方法 | |
CN110719263B (zh) | 多租户dns安全管理方法、装置及存储介质 | |
CN112596919A (zh) | 模型调用方法、装置、设备及存储介质 | |
CN111385360A (zh) | 终端设备的识别方法、装置及计算机可读存储介质 | |
CN111949363A (zh) | 业务访问的管理方法、计算机设备、存储介质及系统 | |
CN111654398B (zh) | 一种更新配置的方法、装置、计算机设备及可读存储介质 | |
CN113162997B (zh) | 数据传输方法、装置、电子设备及可读存储介质 | |
CN115481002A (zh) | 异常行为的识别方法、装置、设备及存储介质 | |
CN109582680B (zh) | 基于新产品开发的业务处理方法、电子装置及可读存储介质 | |
CN105519069A (zh) | 数据处理系统、中心装置以及程序 | |
CN109785129B (zh) | 数据获取方法、装置、设备及计算机可读存储介质 | |
CN114567678A (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 |