CN111355626A - 一种请求处理方法和装置 - Google Patents
一种请求处理方法和装置 Download PDFInfo
- Publication number
- CN111355626A CN111355626A CN201811584056.0A CN201811584056A CN111355626A CN 111355626 A CN111355626 A CN 111355626A CN 201811584056 A CN201811584056 A CN 201811584056A CN 111355626 A CN111355626 A CN 111355626A
- Authority
- CN
- China
- Prior art keywords
- characteristic value
- request
- shielding
- service request
- feature
- 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
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L43/00—Arrangements for monitoring or testing data switching networks
- H04L43/08—Monitoring or testing based on specific metrics, e.g. QoS, energy consumption or environmental parameters
- H04L43/0876—Network utilisation, e.g. volume of load or congestion level
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L43/00—Arrangements for monitoring or testing data switching networks
- H04L43/16—Threshold monitoring
-
- 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
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/14—Network architectures or network communication protocols for network security for detecting or protecting against malicious traffic
- H04L63/1408—Network architectures or network communication protocols for network security for detecting or protecting against malicious traffic by monitoring network traffic
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/14—Network architectures or network communication protocols for network security for detecting or protecting against malicious traffic
- H04L63/1408—Network architectures or network communication protocols for network security for detecting or protecting against malicious traffic by monitoring network traffic
- H04L63/1416—Event detection, e.g. attack signature detection
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/14—Network architectures or network communication protocols for network security for detecting or protecting against malicious traffic
- H04L63/1408—Network architectures or network communication protocols for network security for detecting or protecting against malicious traffic by monitoring network traffic
- H04L63/1425—Traffic logging, e.g. anomaly detection
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer Hardware Design (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- Environmental & Geological Engineering (AREA)
- Computer And Data Communications (AREA)
Abstract
本发明公开了一种请求处理方法和装置,用以解决现有技术中流量攻击、服务状态异常的问题。方法包括:服务器接收第一业务请求;针对预先设置的每个第一特征,在第一业务请求中提取该第一特征的第一特征值;判断预先保存的屏蔽特征值组中是否存在与第一特征值组匹配的第一屏蔽特征值组,其中,第一特征值组中包含每个第一特征值;如果是,则过滤所述第一业务请求。服务器可以根据业务请求中的特征值来确定是否处理该业务请求进行限流,在一定程度上过滤掉非法业务请求,保证公共服务平台正常提供服务。
Description
技术领域
本发明涉及流量安全技术领域,特别涉及一种请求处理方法和装置。
背景技术
公共服务平台在运行过程中,不可避免地会碰到流量过载的问题,这些流量可能属于正常的业务请求,也可能是恶意攻击行为导致的不正常的业务请求。如果对这些业务请求均进行处理,可能会导致公共服务平台对应的服务器达到性能瓶颈,无法及时响应正常的业务请求,严重情况下可能会形成扩散,导致整个系统资源不足,引起服务状态异常的问题。为了避免流量攻击,防止系统过载,需要提出一种限流策略,对业务请求进行分析,过滤掉非法请求,以保证公共服务平台正常提供服务。
发明内容
本发明实施例公开了一种请求处理方法和装置,用以解决现有技术中流量攻击、服务状态异常的问题。
为达到上述目的,本发明实施例公开了一种请求处理方法,所述方法包括:
服务器接收第一业务请求;
针对预先设置的每个第一特征,在第一业务请求中提取该第一特征的第一特征值;
判断预先保存的屏蔽特征值组中是否存在与第一特征值组匹配的第一屏蔽特征值组,其中,第一特征值组中包含每个第一特征值;
如果是,则过滤所述第一业务请求。
进一步地,如果判断结果为否,还包括:
处理所述第一业务请求;
判断是否保存有第一特征值组对应的请求数量;
如果是,则对当前保存的所述第一特征值组对应的请求数量进行更新,并判断更新后的请求数量是否大于针对第一特征值设置的数量阈值;如果是,则将第一特征值组确定为第二屏蔽特征值组;
如果否,则针对第一特征值组,设置其对应的请求数量和数量阈值,并保存。
进一步地,在将第一特征值组确定为第二屏蔽特征值组之后,还包括:
为第二屏蔽特征值组设置对应的屏蔽时长,并在屏蔽时长到达后,删除所述第二屏蔽特征值组。
进一步地,在将第一特征值组确定为第二屏蔽特征值组之后,还包括:
删除第一特征值对应的请求数量和数量阈值。
进一步地,在处理所述第一业务请求之后,在确定是否保存有第一特征值组对应的请求数量之前,还包括:
判断是否开启自动确定屏蔽名单的功能,如果是,则进行后续步骤。
进一步地,在针对预先设置的每个第一特征,在第一业务请求中提取该第一特征的第一特征值之前,还包括:
针对用户预先配置的每个第二特征,在第一业务请求中提取该第二特征的第二特征值;
判断第二特征值是否位于特征值列表中;
如果是,则进行后续步骤。
进一步地,所述服务器为代理服务器。
本发明实施例公开了一种请求处理装置,所述装置包括:
接收模块,用于接收第一业务请求;
提取模块,用于针对预先设置的每个第一特征,在第一业务请求中提取该第一特征的第一特征值;
屏蔽模块,用于判断预先保存的屏蔽特征值组中是否存在与第一特征值组匹配的第一屏蔽特征值组,其中,第一特征值组中包含每个第一特征值;如果是,则过滤所述第一业务请求。
本发明实施例公开了一种电子设备,包括:处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
所述存储器中存储有计算机程序,当所述程序被所述处理器执行时,使得所述处理器执行上述请求处理方法中任一项所述方法的步骤。
本发明实施例公开了一种计算机可读存储介质,其存储有可由电子设备执行的计算机程序,当所述程序在所述电子设备上运行时,使得所述电子设备执行上述请求处理方法中任一项所述方法的步骤。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种请求处理过程示意图;
图2为本发明实施例提供的一种请求处理过程示意图;
图2A为本发明实施例提供的一种请求处理过程示意图;
图3为本发明实施例提供的一种请求处理装置结构图;
图4为本发明实施例提供的一种电子设备;
图5为本发明实施例提供的一种电子设备。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例1:
图1为本发明实施例提供的一种请求处理过程示意图,该过程包括以下步骤:
S101:服务器接收第一业务请求。
本发明实施例提供的请求处理方法应用于服务器。
用户在需要公共服务平台为其提供服务时,可以向公共服务器平台发送业务请求,该业务请求一般为http请求。公共服务平台接收用户发送的业务请求,实际可以理解为公共服务平台的服务器接收用户发送的业务请求,将服务器接收到的业务请求称为第一业务请求,第一业务请求可以理解为服务器接收到的任一业务请求。
S102:针对预先设置的每个第一特征,在第一业务请求中提取该第一特征的第一特征值。
服务器中预先设置有多个第一特征,该第一特征用于对用户发送的业务请求起限流作用,服务器可以提取第一业务请求中每个第一特征的特征值,将第一业务请求中每个第一特征的特征值称为第一特征值。
预先设置的第一特征可以是发送业务请求的发送方的标识,例如包括以下任一种:
URL,ip,appip,sourceid。
预先设置的第一特征还可以是预设字段,为了便于区分,该预设字段一般为不表示上述的URL,ip,appip,sourceid中的任一预设字段。
通常,统一认证的公共服务平台通过sourceid标识业务平台,通过appid标识具体应用,请求报文中包含这两个特征之一。对于不同的接口,sourceid和appid有可能存在于header或param中,也有可能放在body中。服务器可以针对指定sourceid或appid的业务请求进行限流,以过滤掉非法的业务请求。
S103:判断预先保存的屏蔽特征值组中是否存在与第一特征值组匹配的第一屏蔽特征值组,如果是,则进行S104,如果否,则进行S105。
S104:过滤所述第一业务请求,以及向所述第一业务请求的发送方发送请求被拒绝处理的提示信息。
S105:处理所述第一业务请求。
服务器中预先保存有屏蔽特征值组,服务器可以为屏蔽特征值组创建屏蔽名单,也就是屏蔽名单中包含多组屏蔽特征值,屏蔽名单中的屏蔽特征值组可以是用户预先配置的。
在确定出第一业务请求对应的每个第一特征值后,可以将该多个第一特征值作为一组,即第一特征值组,也就是第一特征值组中包含每个第一特征值。
服务器在确定出第一特征值组后,可以确定屏蔽名单中保存的屏蔽特征值组中是否存在与第一特征值组匹配的屏蔽特征值组;如果存在,则说明可以对该业务请求进行屏蔽限流,则过滤该第一业务请求,也就是不处理该第一业务请求,较优地,服务器还可以向第一业务请求的发送方发送业务请求被拒绝处理的提示信息,具体可以是向业务请求的发送方返回“403”。如果不存在,则说明无需对该第一业务请求进行限流,则可以处理该第一业务请求。
在确定预先保存的屏蔽特征值组中是否存在与第一特征值组匹配的屏蔽特征值组时,可以是确定第一特征值组与预先保存的每个屏蔽特征值组的相似度,确定相似度是否大于预设的相似度阈值,如果大于预设的相似度阈值,则认为匹配,否则,不匹配。该相似度阈值可以是100%,也可以是90%,60%等。
第一特征值组与某个屏蔽特征值组的相似度,可以理解为第一特征值组中的第一特征值中与该屏蔽特征值组中的特征值相同的数量占预设的第一特征的数量的概率。例如第一特征的数量为3,第一特征值组中的第一特征值中与该屏蔽特征值组中的特征值相同的数量为2,则可以理解为概率即相似度为2/3,即67%。
如果保存的相似度阈值为100%,此时可以理解为确定预先保存的屏蔽特征值组中是否存在与第一特征值组相同的屏蔽特征值组。
由于在本发明实施例中,服务器可以根据业务请求中的特征值来确定是否处理该业务请求进行限流,在一定程度上过滤掉非法业务请求,保证公共服务平台正常提供服务。
实施例2:
为了智能地实现对非法过量请求的限流,在上述各实施例的基础上,在本发明实施例中,在处理了该第一业务请求之后,还包括:
判断是否保存有第一特征值组对应的请求数量;
如果是,则对当前保存的所述第一特征值组对应的请求数量进行更新,并判断更新后的请求数是否大于针对第一特征值预设的数量阈值;如果是,则将第一特征值组确定为第二屏蔽特征值组;
如果否,则针对第一特征值组,设置其对应的请求数量和数量阈值,并保存。
在本发明实施例中,屏蔽名单中的屏蔽特征值组可以是服务器自动确定的,服务器可以针对特征值组保存接收到包含该特征值组的业务请求的数量,当接收到包含相同特征值组的业务请求的数量足够多时,可以对后续接收到的包含该特征值组的业务请求进行屏蔽,也就是过滤,不进行处理。
服务器在处理了第一业务请求后,可确定是否保存有第一业务请求中的第一特征值组对应的请求数量;如果否,一般可以说明是第一次接收到包含该第一特征值组的请求,服务器可以针对该第一特征值组设置其对应的请求数量,还可以设置第一特征值组对应的请求数量阈值,并保存第一特征值组与其对应的请求数量和请求数量阈值的对应关系。服务器首次设置特征值组对应的请求数量是,一般创建为1,请求数量阈值可以是1000,可以是5000的等。
如果服务器中保存有第一业务请求中的第一特征值组对应的请求数量,一般可以说明不是第一次接收到包含该第一特征值组的业务请求,一般情况下,已经针对该第一特征值组保存有其对应的请求数量,此时可以对当前保存的该第一特征值组对应的请求数量进行更新。一般为对当前保存的请求数量加1。
服务器可以针对特征值组确定其对应的数量阈值,当接收到包含该特征值组的业务请求的数量达到设定的数量阈值后,就可以将该类业务请求确定为非法业务请求,将该特征值组作为屏蔽特征值组,后续可以对该类非法业务请求进行限制。
以第一特征值组为例,服务器在对当前保存的第一特征值组对应的请求数进行更新后,服务器还可以判断更新后的请求数量是否大于针对该第一特征值组设置的数量阈值;如果是,则将第一特征值组确定为第二屏蔽特征值组,添加到屏蔽名单中。
实施例3:
为了更加智能地实现对非法过量请求的限流,在上述各实施例的基础上,在本发明实施例中,在将第一特征值组确定为第二屏蔽特征值组之后,还包括:
为第二屏蔽特征值组设置对应的屏蔽时长,并在屏蔽时长到达后,删除所述第二屏蔽特征值组。
在本发明实施例中,服务器可以为每个屏蔽特征值组设置对应的屏蔽时长,该屏蔽时长可以理解为该屏蔽特征值组的生效时间,在生效时间内,屏蔽特征值组可以起屏蔽限流作用,当屏蔽时长达到后,该屏蔽特征值组不再起屏蔽限流作用。
以第二屏蔽特征值组为例进行说明,服务器在将第一特征值组确定为第二屏蔽特征值组后,可以为该第二屏蔽特征值组设置对应的屏蔽时长,并开始计时,服务器监控第二屏蔽特征值组的计时时间是否达到设置的屏蔽时长,如果达到了设置的屏蔽时长,则将该第二屏蔽特征值组删除。
如果服务器自动确定屏蔽特征值组,为了避免资源的浪费,服务器在接收到第一业务请求后,可以先判断是否保存有屏蔽特征值组,如果保存有,再确定第一业务请求对应的每个第一特征值,如果没有保存,则说明无需对该第一业务请求进行限流,则可以处理该第一业务请求。
实施例4:
为了更加智能地实现对非法过量请求的限流,在上述各实施例的基础上,在本发明实施例中,在将第一特征值组确定为第二屏蔽特征值组之后,还包括:删除第一特征值对应的请求数量和数量阈值。
实施例5:
为了更加智能地实现对非法过量请求的限流,在上述各实施例的基础上,在本发明实施例中,在处理所述第一业务请求之后,在确定是否保存有第一特征值组对应的请求数量之前,还包括:
判断是否开启自动确定屏蔽名单的功能,如果是,则进行后续步骤。
服务器可以设置是否开启自动确定屏蔽名单的功能,如果服务器当前开启了自动确定屏蔽名单的功能,则可以根据特征值组对应的请求数量及数量阈值确定是否将特征值组确定为屏蔽特征值组,如果服务器当前未开启自动确定屏蔽名单的功能,则不能自动确定屏蔽名单,也可就是不能根据特征值组对应的请求数量及数量阈值确定屏蔽名单。
服务器可以针对是否开启自动确定屏蔽名单的功能设置一个时间段,可以是在固定时间段内开启自动确定屏蔽名单的功能,在其他时间段不能开启自动确定屏蔽名单的功能。该时间段可以理解为屏蔽时间。
也可以是人为设置开启自动确定屏蔽名单的功能,并设置一个时长值,当时长值达到后,关闭自动确定屏蔽名单的功能。
实施例6:
在上述各实施例的基础上,在本发明实施例中,在针对预先设置的每个第一特征,在第一业务请求中提取该第一特征的第一特征值之前,还包括:
针对用户预先配置的每个第二特征,在第一业务请求中提取该第二特征的第二特征值;
判断第二特征值是否位于特征值列表中,其中,特征值列表中针对每个第二特征保存有至少一个特征值;
如果是,则进行后续步骤。
用户还可以在服务器上配置第二特征,及每个第二特征的第二特征值,一个第二特征可能对应多个特征值,可以将用户设置的第二特征及其对应的特征值看作是一个特征值列表,该特征值列表中包含了用户配置的所有的第二特征以及第二特征的特征值。
当接收到第一业务请求后,可以先针对用户预先配置的每个第二特征,提取第一业务请求中针对该第二特征对应的特征值,可以将第一业务请求中第二特征的特征值称为第二特征值。根据第二特征值确定是要直接处理该第一业务请求,还是将第一业务请求的第一特征值组与屏蔽特征值组进行匹配。
服务器在提取出每个第二特征的第二特征值后,可以判断第二特征值是否位于特征值列表中,如果位于特征值列表中,则可以提取多个第一特征值组成第一特征值组,并将第一特征值组与屏蔽特征值组进行匹配,确定是否处理该第一业务请求。如果不位于特征值列表中,则可以直接对该第一业务请求进行处理。
在判断第二特征值是否位于特征值列表中时,可以是确定是否存在位于特征值列表中的第二特征值,较优的,确定所有的第二特征值是否均位于特征值列表中。特征值列表用于对业务请求起限流作用,可以将特征值列表称为限制列表。
第二特征与第一特征可以相同,也可以不同。如果第一特征与第二特征相同,则屏蔽名单为限制列表的子集。限制列表可以理解为永不过期,而屏蔽名单有自动过期机制。
图2为本发明实施例提供的一种请求处理过程示意图:
接收业务请求;
解析业务请求的内容,提取特征值;
将提取的特征值与限流列表中的特征值进行对比,确定是否匹配;
如果不匹配,则处理该业务请求;
如果匹配,则将提取的特征值对应的特征值组与屏蔽名单中的屏蔽特征值组进行匹配,确定屏蔽名单中是否存在该特征值组;
如果存在,则向业务请求的发送方发送请求被拒绝的提示信息,具体可以是向业务请求的发送方返回403。
如果不存在,则处理该业务请求。
在处理该业务请求之后,可以确定是否开启了自动确定屏蔽名单的功能;
如果未开启,则结束;
如果开启了,并对业务请求中的特征值组对应的请求数量进行更新,具体为对请求数量进行加1。
确定更新后的请求数量是否大于预设的数量阈值;
如果是,则将业务请求中的特征值组确定为屏蔽特征值组添加到屏蔽名单中,为该屏蔽特征值组设置对应的屏蔽时长,监控计时时间,并在屏蔽时长到达后,删除所述第二屏蔽特征值组。在将业务请求中的特征值组确定为屏蔽特征值组添加到屏蔽名单中后,还可以删除第一特征值对应的请求数量和数量阈值。
实施例7:
用户发出的业务请求经过外网达到代理层,代理层转发给应用层处理,为了进一步减少无用请求占用的大量带宽和计算资源,进行请求闲置的服务器可以是代理服务器,该代理服务器可以是Nginx。为了减少时延,以及保证安全,上述的屏蔽特征值组,请求数量阈值,屏蔽时长等信息均可以保存在代理服务器本地。将请求拦截在代理层之外,减少发往内网的冗余数据,节省内网资源,将提高系统容量。
Nginx做为http反向代理服务器,具有高性能,高并发的特性。Nginx采用模块化架构,通过开发模块扩展Nginx,能够结合具体业务场景实现可编程的处理逻辑,具体业务场景比如请求合法性校验,安全审计等。Nginx本身的模块化架构仅支持C语言,开发者必须使用C语言增加模块,并且需要对nginx源码十分熟悉才能完成开发,开发周期较长,对开发人员的要求也较高。lua语言是一种脚本语言,简单易用。在本申请中,开发者可以采用lua语言基于Ngx_lua模块进行开发,开发人员不需要掌握C语言或了解nxing内部代码,仅需要掌握lua语言以及nginx内置变量等知识即可,极大地提高了开发效率。同时由于lua的紧凑、高速以及内建协程,在降低开发成本的同时保证了高并发的处理能力。
nginx在处理每一个用户请求时,总共划分为11个阶段。其中access阶段的主要任务是进行访问控制,如检查用户权限及IP合法性等,在请求报文被处理之前执行,本申请的请求处理进行流量控制的过程可以放在该阶段。通过使用ngx_lua的access_by_lua或access_by_lua_file指令,可将lua代码插入到nginx的access阶段中,执行较复杂的验证。其中access_by_lua指示nginx执行nginx.conf中的一段嵌入式Lua代码,适用于轻量级的程序,access_by_lua_file指示nginx执行一个本地lua脚本,适用于更复杂的lua程序。
nginx的多个线程之间要共享数据,有两种方式可以实现,一是多个插件将数据写到分布式共享缓存(例如redis)中,多个nginx进程之间实现真正的数据共享,计数精确。
二是nginx采用ngx_lua的共享内存字典项API来实现,在本地内存进行请求计数,不影响nginx性能。
一个代理服务器中有多个接口可以接收业务请求,为了实现业务请求隔离,避免错误扩散,提高系统的健壮性,在申请中,还可以为针对代理服务器中的每个接口实现上述的请求处理过程,也就是服务器的第一接口接收第一业务请求。
服务器可以针对每个接口,设置在每个时间周期中该接口的限流总数量可参见表1。服务器的第一接口在接收到第一业务请求后,可以对该第一接口在当前周期中接收到的业务请求的数量进行更新,并确定更新的后的数量是否大于针对该第一接口预设的数量阈值,如果大于,则在当前周期中停止接收业务请求。
如图2A所示,nginx上的请求一般是负载均衡器发送过来的,该负载均衡器可以是F5均衡器,负载均衡器有个请求入口,F5负载均衡器将当前的请求的数量分发给每个nginx,每个nginx分得的请求的数量limit=F5负载均衡器接收到的总数量limit总数/nginx的数量+c。nginx中限流模块确定是否对请求进行限流,如果不限流,可以将请求发送给应用层,如图2A所示,例如可以将请求发送的应用1、应用2、应用3。
限流策略包括多种维度,ngx_lua的数据字典仅支持key-value形式的存储结构,为了使用key-value结构表达复杂的限流策略,提出一种限流方法。
数据存储设计到如下概念:
接口:业务请求对应的接口。
限流特征:在接口内,对业务请求进行计数的依据,例如限流特征为ip时,同一个ip下的请求视为相同的请求,限流特征为appid时,同一个appid的请求视为相同的请求。
限制成员:被限制的业务请求的特征值(组)。
限流阈值:当包含某一特征值(组)请求超过该限流值(请求数量阈值)时,实施限制策略,具体可以认为是将该特征值组确定为屏蔽特征值组,添加到屏蔽名单中。
屏蔽时长:包含某一特征值(组)的请求超过限流阈值时,后续包含相同特征值的业务请求被屏蔽的时长,也就是作为屏蔽特征值组的生效时长。
为了表征上述数据,参见以下表结构及示例数据:
接口(主键) | 限流特征 | 总流量 |
/test1 | ip | 10000 |
/test2 | appid | 20000 |
表1
表1表示一种限流策略表,针对不同的接口,采用不同的特征进行限流,并且根据一个接口在每个周期中能够处理的请求的总数量进行限流。例如,针对接口test1,设置的特征为IP,test1的限流总数量为10000。
表2
表2为限制成员表,记录了针对每个接口,该接口在限流时考虑的特征,以及特征值,限流阈值,以及屏蔽时长。例如,针对接口test1,其限流的特征为ip,限流成员为127.0.0.1和127.0.0.2,针对127.0.0.1,其限流阈值为5000,限流时长为60ms。
可以将表转化为只有一个非主键的形式,将存在多个非主键的表拆分为多个表。例如,表1和表2都分别存在两个非主键,各自拆分为两个新表。
可以将表1拆分为表3和表4
接口(主键) | 限流特征 |
/test1 | ip |
/test2 | appid |
表3
接口(主键) | 总流量 |
/test1 | 10000 |
/test2 | 20000 |
表4
可以将表2拆分为表5和表6
表5
表6
可以将表3-表6中的主键值+非主键名,作为key,非主键值作为value,存储在数据字典中,该存储结构支持根据主键查询单条数据。
本申请中可以将上述存在的数据分为静态数据和动态数据。
静态数据包括限流特征,限流成员,限流阈值,屏蔽时长。程序启动后,从配置文件中解析出这些参数,存入共享内存字典。对应上述四种静态数据,限流模块需要存储如下四种映射:
接口:总流量
接口:限流特征
接口+限流特征+限制成员:限流阈值
接口+限流特征+限制成员:屏蔽时长
接口名与其他字段之间以:分隔,其他字段之间以_分隔。例如,要对接口/test进行限流,总流量限制为2000,来自ip=192.168.1.1和192.168.1.1的流量限制为1000,屏蔽时长为30s,可以存储如下字段
表7
为简化描述,假设请求的appid在header中。限流模块读取静态数据的过程如下:在收到接口/test的请求后,首先通过key=/test:limit_header_type对应的值,得到限流特征为appid,从ngx变量中读取出appid地址,根据appid得到key=/test:limit_header_ip_{appid}对应的值,即限制成员,如果该值存在,说明appid在限制列表或屏蔽名单中,执行限流逻辑,否则不进行限制。当然还可以通过/test:total_limit读取该接口总的流量阈值,判断总流量是否超上限。
动态数据包括包含特征值组的业务请求的计数器,请求总数计数器,屏蔽名单。计数器可以用来记录被限制成员当前1秒内的请求次数,同样以数据字典的方式存储,key的组成方式为:
路径:header_{限流特征}_{限制成员}_timestamp
timestamp表示当前时间戳,精确到秒。value为请求次数,请求计数器的过期时间为2s。由于计数器中包含时间信息,限流模块收到请求后,获取当前时间戳与其他信息组装key值,作为当前1s的计数器的key值;在下一秒,根据当前时间戳生成key值后,由于timestamp已更新,获取不到对应的value,就会自动创建一个新的计数器,这样就实现了限流模块总是会操作当前1s内的计数器。计数器2s后自动删除。
请求总数计数器的实现原理类似,key值为:
路径:total_时间戳
屏蔽名单的key值组成方式为:
路径:blockheader_{限流特征}_{限制成员}
如果key值存在,value总是为1,表示该成员正在被屏蔽。屏蔽名单的过期时间为屏蔽时长,过期之后自动清除。对于某个特征匹配请求,只要屏蔽名单存在,就表示在屏蔽周期内,限流模块返回403即可。屏蔽时间过期后屏蔽名单被自动清除,请求被正常转发。
动态数据的格式如表8所示:
表8
限流的各种参数可以通过配置文件来指定,配置文件名为limit_by_lua.config,放在nginx的conf目录中,配置内容的格式为json。配置参数对应限流模块的静态数据,参数说明如表9。
表9
配置详解
path:限流起作用的路径。
total_limit代表接口总流量阈值,当前1s内请求总数超过该阈值,则拒绝当前1s内的其他请求。
type:限流特征,取值为(1)ip;(2)header字段名。当type="ip"时,list列表中是被限流的ip;type为其他header时(例如"appid"或"sourceid"),list列表中是被限流请求的header值。
list:被限制成员列表。例如当type=ip时,列表["100000001","100000002"]表示对appid为"100000001"和"100000002"的请求进行限流。
limit:流量阈值,请求频率超过该阈值,则当前1秒内的后续请求都被屏蔽,下一秒恢复正常。
interval:流量超出后的屏蔽时长。
系统初始化阶段的工作,包括为多线程分配共享内存,以及将静态数据从配置文件加载到共享内存中。
配置项以json格式放在limit_by_lua.config中,通过文件load_config.lua读取并解析,转换成静态数据存放在共享内存中。分配共享内存和加载配置都发生在初始化阶段,因此在nginx的http块中,通过init_by_lua_file指令,指定nginx启动后执行初始化脚本,加载配置。
通过以上配置,nginx启动后,在接收第一个请求之前,即可执行load_config.lua脚本,完成初始化。
为了进行特征匹配,限流模块需要从请求的特定位置提取出要匹配的内容,包括从header中提取,从praram中提取,和从body中提取。
从header中提取内容利用nginx提供的内置变量实现,在ngx_lua中,通过“ngx.+变量名”的形式使用内置变量,例如,当appid在header中时,使用ngx.var.appid来读取;当appid在body中时,首先使用ngx.req.get_body_data()读取请求内容,然后提取appid。
基于与上述请求处理方法的同一发明构思,如图3所示,提供了一种请求处理装置结构图,所述装置包括:
接收模块31,用于接收第一业务请求;
提取模块32,用于针对预先设置的每个第一特征,在第一业务请求中提取该第一特征的第一特征值;
屏蔽模块33,用于判断预先保存的屏蔽特征值组中是否存在与第一特征值组匹配的第一屏蔽特征值组,其中,第一特征值组中包含每个第一特征值;如果是,则过滤所述第一业务请求。
进一步地,所述屏蔽模块33,还用于如果判断结果为否,处理所述第一业务请求;
判断是否保存有第一特征值组对应的请求数量;
如果是,则对当前保存的所述第一特征值组对应的请求数量进行更新,并判断更新后的请求数量是否大于针对第一特征值设置的数量阈值;如果是,则将第一特征值组确定为第二屏蔽特征值组;
如果否,则针对第一特征值组,设置其对应的请求数量和数量阈值,并保存。
进一步地,所述屏蔽模块33,还用于在将第一特征值组确定为第二屏蔽特征值组之后,为第二屏蔽特征值组设置对应的屏蔽时长,并在屏蔽时长到达后,删除所述第二屏蔽特征值组。
进一步地,所述屏蔽模块,还用于在将第一特征值组确定为第二屏蔽特征值组之后,删除第一特征值对应的请求数量和数量阈值。
进一步地,所述屏蔽模块33,还用于在处理所述第一业务请求之后,在确定是否保存有第一特征值组对应的请求数量之前,判断是否开启自动确定屏蔽名单的功能,如果是,则进行后续步骤。
进一步地,还包括:
限流模块34,用于针对用户预先配置的每个第二特征,在第一业务请求中提取该第二特征的第二特征值;
判断第二特征值是否位于特征值列表中;
如果是,则触发所述提取模块32。
进一步地,所述装置为代理服务器。
基于与上述请求处理方法的同一发明构思,如图4所示,本发明实施例提供了一种电子设备,包括:处理器41、通信接口42、存储器43和通信总线44,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
所述存储器中存储有计算机程序,当所述程序被所述处理器执行时,使得所述处理器执行上述请求处理方法中任一项所述方法的步骤。
上述各实施例中的电子设备提到的通信总线可以是外设部件互连标准(Peripheral Component Interconnect,PCI)总线或扩展工业标准结构(ExtendedIndustry Standard Architecture,EISA)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
通信接口,用于上述电子设备与其他设备之间的通信。
存储器可以包括随机存取存储器(Random Access Memory,RAM),也可以包括非易失性存储器(Non-Volatile Memory,NVM),例如至少一个磁盘存储器。可选地,存储器还可以是至少一个位于远离前述处理器的存储装置。
上述处理器可以是通用处理器,包括中央处理器、网络处理器(NetworkProcessor,NP)等;还可以是数字信号处理器(Digital Signal Processing,DSP)、专用集成电路、现场可编程门陈列或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。
基于与上述请求处理方法的同一发明构思,如图5所示,本发明实施例提供了一种电子设备,包括处理器51、存储器52和收发机53;
在图5中,总线架构可以包括任意数量的互联的总线和桥,具体由处理器51代表的一个或多个处理器51和存储器52代表的存储器52的各种电路链接在一起。总线架构还可以将诸如外围设备、稳压器和功率管理电路等之类的各种其他电路链接在一起,这些都是本领域所公知的,因此,本文不再对其进行进一步描述。处理器51负责管理总线架构和通常的处理,存储器52可以存储处理器51在执行操作时所使用的数据。收发机53可以是多个元件,即包括发送机和接收机,提供用于在传输介质上与各种其他装置通信的单元。
可选的,处理器51可以是CPU(中央处埋器)、ASIC(Application SpecificIntegrated Circuit,专用集成电路)、FPGA(Field-Programmable Gate Array,现场可编程门阵列)或CPLD(Complex Programmable Logic Device,复杂可编程逻辑器件)。
所述处理器51,用于读取所述存储器52中的程序,执行下列过程:
控制收发机53接收第一业务请求;
并针对预先设置的每个第一特征,在第一业务请求中提取该第一特征的第一特征值;
判断预先保存的屏蔽特征值组中是否存在与第一特征值组匹配的第一屏蔽特征值组,其中,第一特征值组中包含每个第一特征值;
如果是,则过滤所述第一业务请求。
进一步地,所述处理器51,还用于如果判断结果为否,处理所述第一业务请求;
判断是否保存有第一特征值组对应的请求数量;
如果是,则对当前保存的所述第一特征值组对应的请求数量进行更新,并判断更新后的请求数量是否大于针对第一特征值设置的数量阈值;如果是,则将第一特征值组确定为第二屏蔽特征值组;
如果否,则针对第一特征值组,设置其对应的请求数量和数量阈值,并保存。
进一步地,所述处理器51,还用于在将第一特征值组确定为第二屏蔽特征值组之后,为第二屏蔽特征值组设置对应的屏蔽时长,并在屏蔽时长到达后,删除所述第二屏蔽特征值组。
进一步地,所述处理器51,还用于在将第一特征值组确定为第二屏蔽特征值组之后,删除第一特征值对应的请求数量和数量阈值。
进一步地,所述处理器51,还用于在处理所述第一业务请求之后,在确定是否保存有第一特征值组对应的请求数量之前,判断是否开启自动确定屏蔽名单的功能,如果是,则进行后续步骤。
进一步地,所述处理器51在针对预先设置的每个第一特征,在第一业务请求中提取该第一特征的第一特征值之前,针对用户预先配置的每个第二特征,在第一业务请求中提取该第二特征的第二特征值;
判断第二特征值是否位于特征值列表中;
如果是,则进行后续步骤。
进一步地,所述电子设备为代理服务器。
基于与上述请求处理方法的同一发明构思,本发明实施例提供了一种计算机可读存储介质,其存储有可由电子设备执行的计算机程序,当所述程序在所述电子设备上运行时,使得所述电子设备执行上述请求处理方法中任一项所述方法的步骤。
上述实施例中的计算机可读存储介质可以是电子设备中的处理器能够存取的任何可用介质或数据存储设备,包括但不限于磁性存储器如软盘、硬盘、磁带、磁光盘(MO)等、光学存储器如CD、DVD、BD、HVD等、以及半导体存储器如ROM、EPROM、EEPROM、非易失性存储器(NAND FLASH)、固态硬盘(SSD)等。
对于系统/装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者一个操作与另一个实体或者另一个操作区分开来,而不一定要求或者暗示这些实体或者操作之间存在任何这种实际的关系或者顺序。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全应用实施例、或结合应用和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
Claims (10)
1.一种请求处理方法,其特征在于,所述方法包括:
服务器接收第一业务请求;
针对预先设置的每个第一特征,在第一业务请求中提取该第一特征的第一特征值;
判断预先保存的屏蔽特征值组中是否存在与第一特征值组匹配的第一屏蔽特征值组,其中,第一特征值组中包含每个第一特征值;
如果是,则过滤所述第一业务请求。
2.如权利要求1所述的方法,其特征在于,如果判断结果为否,还包括:
处理所述第一业务请求;
判断是否保存有第一特征值组对应的请求数量;
如果是,则对当前保存的所述第一特征值组对应的请求数量进行更新,并判断更新后的请求数量是否大于针对第一特征值设置的数量阈值;如果是,则将第一特征值组确定为第二屏蔽特征值组;
如果否,则针对第一特征值组,设置其对应的请求数量和数量阈值,并保存。
3.如权利要求2所述的方法,其特征在于,在将第一特征值组确定为第二屏蔽特征值组之后,还包括:
为第二屏蔽特征值组设置对应的屏蔽时长,并在屏蔽时长到达后,删除所述第二屏蔽特征值组。
4.如权利要求2所述的方法,其特征在于,在将第一特征值组确定为第二屏蔽特征值组之后,还包括:
删除第一特征值对应的请求数量和数量阈值。
5.如权利要求2所述的方法,其特征在于,在处理所述第一业务请求之后,在确定是否保存有第一特征值组对应的请求数量之前,还包括:
判断是否开启自动确定屏蔽名单的功能,如果是,则进行后续步骤。
6.如权利要求2-5任一项所述的方法,其特征在于,在针对预先设置的每个第一特征,在第一业务请求中提取该第一特征的第一特征值之前,还包括:
针对用户预先配置的每个第二特征,在第一业务请求中提取该第二特征的第二特征值;
判断第二特征值是否位于特征值列表中;
如果是,则进行后续步骤。
7.如权利要求1-6任一项所述的方法,其特征在于,所述服务器为代理服务器。
8.一种请求处理装置,其特征在于,所述装置包括:
接收模块,用于接收第一业务请求;
提取模块,用于针对预先设置的每个第一特征,在第一业务请求中提取该第一特征的第一特征值;
屏蔽模块,用于判断预先保存的屏蔽特征值组中是否存在与第一特征值组匹配的第一屏蔽特征值组,其中,第一特征值组中包含每个第一特征值;如果是,则过滤所述第一业务请求。
9.一种电子设备,其特征在于,包括:处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
所述存储器中存储有计算机程序,当所述程序被所述处理器执行时,使得所述处理器执行权利要求1-7任一项所述方法的步骤。
10.一种计算机可读存储介质,其特征在于,其存储有可由电子设备执行的计算机程序,当所述程序在所述电子设备上运行时,使得所述电子设备执行权利要求1-7任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811584056.0A CN111355626A (zh) | 2018-12-24 | 2018-12-24 | 一种请求处理方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811584056.0A CN111355626A (zh) | 2018-12-24 | 2018-12-24 | 一种请求处理方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111355626A true CN111355626A (zh) | 2020-06-30 |
Family
ID=71196778
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811584056.0A Pending CN111355626A (zh) | 2018-12-24 | 2018-12-24 | 一种请求处理方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111355626A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113194075A (zh) * | 2021-04-09 | 2021-07-30 | 海尔数字科技(青岛)有限公司 | 访问请求的处理方法、装置、设备及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070211627A1 (en) * | 2006-03-13 | 2007-09-13 | Alcatel | Distributed communication traffic control systems and methods |
CN102769549A (zh) * | 2011-05-05 | 2012-11-07 | 腾讯科技(深圳)有限公司 | 网络安全监控的方法和装置 |
CN105282152A (zh) * | 2015-09-28 | 2016-01-27 | 广东睿江科技有限公司 | 一种异常流量检测的方法 |
CN107819745A (zh) * | 2017-10-25 | 2018-03-20 | 北京京东尚科信息技术有限公司 | 异常流量的防御方法和装置 |
-
2018
- 2018-12-24 CN CN201811584056.0A patent/CN111355626A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070211627A1 (en) * | 2006-03-13 | 2007-09-13 | Alcatel | Distributed communication traffic control systems and methods |
CN102769549A (zh) * | 2011-05-05 | 2012-11-07 | 腾讯科技(深圳)有限公司 | 网络安全监控的方法和装置 |
CN105282152A (zh) * | 2015-09-28 | 2016-01-27 | 广东睿江科技有限公司 | 一种异常流量检测的方法 |
CN107819745A (zh) * | 2017-10-25 | 2018-03-20 | 北京京东尚科信息技术有限公司 | 异常流量的防御方法和装置 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113194075A (zh) * | 2021-04-09 | 2021-07-30 | 海尔数字科技(青岛)有限公司 | 访问请求的处理方法、装置、设备及存储介质 |
CN113194075B (zh) * | 2021-04-09 | 2023-04-18 | 海尔数字科技(青岛)有限公司 | 访问请求的处理方法、装置、设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11456965B2 (en) | Network service request throttling system | |
CN107992398B (zh) | 一种业务系统的监控方法和监控系统 | |
CN106778260B (zh) | 攻击检测方法和装置 | |
CN108829581B (zh) | 应用程序测试方法、装置、计算机设备及存储介质 | |
CN104065657A (zh) | 一种基于ip访问的动态控制用户行为的方法及系统 | |
CN109614262B (zh) | 业务校验方法、装置及计算机可读存储介质 | |
CN111290958B (zh) | 一种调试智能合约的方法及装置 | |
CN111290696A (zh) | 一种应用程序组件的流控方法及装置 | |
CN113225339B (zh) | 网络安全监测方法、装置、计算机设备及存储介质 | |
CN111262875B (zh) | 服务器安全监测方法、装置、系统及存储介质 | |
CN110933082B (zh) | 失陷主机识别方法、装置、设备及存储介质 | |
CN111083093A (zh) | 调用端能力的方法和装置 | |
CN105592134A (zh) | 一种负载分担的方法和装置 | |
WO2021233109A1 (zh) | 基于区块链的消息处理方法、装置、设备以及存储介质 | |
CN111355626A (zh) | 一种请求处理方法和装置 | |
CN112769739B (zh) | 数据库操作违规处理方法、装置及设备 | |
CN112766963A (zh) | 结合区块链和数字货币的数据安全检测方法及云计算中心 | |
CN110298677B (zh) | 一种云计算资源计费的方法、装置、电子设备和存储介质 | |
CN109995889B (zh) | 映射关系表的更新方法、装置、网关设备及存储介质 | |
CN111770093B (zh) | 交易监控决策方法、装置、设备及计算机可读存储介质 | |
CN110113187B (zh) | 一种配置更新方法、装置、配置服务器及配置系统 | |
CN113992453A (zh) | 一种防止数据外泄的阻断方法、装置及存储介质 | |
CN111324796A (zh) | 基于区块链和sdn边缘计算网络系统的域名爬取方法及装置 | |
CN113596600A (zh) | 直播嵌入程序的安全管理方法、装置、设备及存储介质 | |
WO2019120629A1 (en) | On-demand snapshots from distributed data storage systems |
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 | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20200630 |