一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种业务请求响应方法、系统、设备及计算机可读介质与流程

2022-02-20 07:32:28 来源:中国专利 TAG:


1.本发明涉及计算机技术领域,特别是涉及一种业务请求响应方法、系统、设备及计算机可读介质。


背景技术:

2.目前,主流站点(比如排名靠前的视频网站、大型购物网站等主流站点)都需要经过业务请求访问验证来支撑站点的正常运营。对于这些主流站点的管理人员而言,在对业务请求访问验证时,需要对这些业务请求进行安全防范。而目前在进行安全防范时,常规的做法是利用防火墙对站点进行内部定期扫描、利用防火墙对站点进行端口限制、利用防火墙来限制外部对站点的恶意攻击。但是,在利用防火墙进行安全防范时,对于单独的关键接口、内部外泄的接口等薄弱环节,可能还是存在无法克服的安全风险;例如外部客户端利用爬虫形成的高并发业务请求,或者外部客户端在短时间内产生了大量的业务请求,若这些业务请求在短时间内通过这些薄弱接口对站点服务器端进行集中访问,则会造成整个站点服务器端所对应的运营系统雪崩和瘫痪。因此,需要提供一种技术手段,来保证这些高并发业务请求能够被正常响应,以及保证这些高并发业务请求在响应时不会对服务器端的运营系统造成雪崩和瘫痪。


技术实现要素:

3.鉴于以上所述现有技术的缺点,本发明的目的在于提供一种业务请求响应方法、系统、设备及计算机可读介质,用于解决现有技术无法正常响应高并发业务请求,以及在响应高并发业务请求时服务器出现雪崩和瘫痪的问题。
4.为实现上述目的及其他相关目的,本发明提供一种业务请求响应方法,其特征在于,所述方法包括以下步骤:
5.获取用于访问服务器端的多个业务请求;
6.在所述服务器端创建目标线程池,并将所创建的目标线程池作为所述多个业务请求的缓存区域;
7.对所述目标线程池中来自同一客户端的业务请求进行调整,所述调整至少包括对来自同一客户端的业务请求数量进行降低;
8.对调整后的所有业务请求进行响应。
9.可选地,在对所述目标线程池中来自同一客户端的业务请求进行调整前,还包括:
10.获取每个客户端的请求头,并根据所获取的请求头将所述目标线程池中的所有业务请求转换为无序数组;
11.对每个客户端的请求头进行编号,并按照编号后的请求头对所述无序数组中的业务请求进行排序,获取有序数组。
12.可选地,对所述目标线程池中来自同一客户端的业务请求进行调整的过程包括:
13.获取所述有序数组以及所述有序数组中的所有业务请求;
14.判断所述有序数组中任意相邻的两个请求头编号值是否相同;
15.若相同,则保留该编号值首次出现的业务请求,并删除后续出现的业务请求,降低来自同一客户端的业务请求数量;
16.若均不相同,则完成对所述业务请求的调整。
17.可选地,在判断所述有序数组中任意相邻的两个请求头编号值是否相同时,若所述有序数组中某一目标请求头编号值的出现次数超过所述有序数组的一半长度,则还包括查找该请求头编号值,有:
18.遍历查找所述有序数组中的每一个元素值,并在遍历查找所述有序数组时,保存所述有序数组中的元素值和元素值出现的次数;其中,所述元素值至少包括请求头编号值;
19.如果查找的下一个元素值和上一个保存的元素值相同,则对上一个元素值的出现次数加1;
20.如果查找的下一个元素值和上一个保存的元素值不相同,则对上一个元素值的出现次数减1;且在对上一个元素值的出现次数进行减1后,若上一个元素值的出现次数为0,则保存下一个元素值,并把下一个元素值的出现次数设为1,用于进行下一次查找;
21.在对所述有序数组中的每一个元素值完成遍历查找后,获取最后一次次数设为1时对应的请求头编号值,作为待查找的请求头编号值。
22.可选地,所述方法还包括:
23.在所述服务器端创建新的线程池,并从所述目标线程池中获取调整后的所有业务请求,以及将所获取的业务请求缓存至所述新的线程池中;
24.对所述新的线程池中的所有业务请求进行响应。
25.可选地,在获取所述业务请求后,还包括判断业务请求的接收时间是否符合预设的时间分布标准,有:
26.将预设时间段划分为多个单位时间段,并根据每个业务请求的接收时间,计算每个单位时间段所对应的业务请求数量;
27.若存在一个单位时间段对应的业务请求数量大于预设值,则判定所述业务请求的接收时间不符合预设的时间分布标准,并判断所述业务请求是否为恶意请求;
28.若不存在一个单位时间段对应的业务请求数量大于预设值,则判定所述业务请求的接收时间符合预设的时间分布标准。
29.可选地,判断所述业务请求是否为恶意请求的过程包括:
30.在服务器端获取到某客户端发送的业务请求后,确定在第一预设时间段内,该客户端发送业务请求的次数,及确定该客户端在第二预设时间段内登录的次数;
31.若业务请求发送次数大于或等于第一预设值,且登录次数大于或等于第二预设值,则确定该客户端发送的业务请求为恶意请求,并拒绝接收该客户端发送的业务请求;
32.若业务请求发送次数大于或等于第一预设值,且登录次数小于第二预设值,则向该客户端发送重登录指令。
33.本发明还提供一种业务请求响应系统,所述系统包括有:
34.业务请求模块,用于获取访问服务器端的多个业务请求;
35.线程池模块,用于在所述服务器端创建目标线程池,并将所创建的目标线程池作为所述多个业务请求的缓存区域;
36.业务请求调整模块,用于对所述目标线程池中来自同一客户端的业务请求进行调整,所述调整至少包括对来自同一客户端的业务请求数量进行降低;
37.业务请求响应模块,用于对调整后的所有业务请求进行响应。
38.本发明还提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于:所述处理器执行所述计算机程序时实现上述中任一项所述方法的步骤。
39.本发明还提供一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现上述中任一项所述方法的步骤。
40.如上所述,本发明提供一种业务请求响应方法、系统、设备及计算机可读介质,具有以下有益效果:本发明首先获取业务请求,所述业务请求至少包括在一个或多个客户端生成的用于访问服务器端的多个业务请求;然后在所述服务器端创建第一线程池,并将所创建的第一线程池作为所述业务请求的缓存区域;获取每个客户端的请求头,并根据所获取的请求头将所述第一线程池中的所有业务请求转换为无序数组;对每个客户端的请求头进行编号,并按照编号后的请求头对所述无序数组中的业务请求进行排序,获取有序数组;对所述有序数组中来自同一客户端的业务请求进行调整,所述调整至少包括对来自同一客户端的业务请求数量进行降低;对调整后的所有业务请求进行响应。本发明通过对在客户端生成的多个业务请求进行调整,使得本发明对每个客户端的重复业务请求只响应一次,这样既可以保证这些高并发业务请求能够被正常响应,而且还可以保证这些高并发业务请求在响应时不会对服务器端的运营系统造成雪崩和瘫痪。此外,本发明通过对多个业务请求进行调整,相当于将每个客户端生成的业务请求作为一个单用户的业务请求,而单个用户访问链接一般和正常速度是一样的,所以本发明通过这种方式能够解决恶意攻击和爬虫程序的数据窃取。
附图说明
41.图1为一实施例提供的业务请求响应方法的流程示意图;
42.图2为一实施例提供的识别异常业务请求的流程示意图;
43.图3为一实施例提供的业务请求响应系统的硬件结构示意图;
44.图4为一实施例提供的计算机设备的硬件结构示意图。
具体实施方式
45.以下通过特定的具体实例说明本发明的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本发明的其他优点与功效。本发明还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本发明的精神下进行各种修饰或改变。需说明的是,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合。
46.需要说明的是,以下实施例中所提供的图示仅以示意方式说明本发明的基本构想,遂图式中仅显示与本发明中有关的组件而非按照实际实施时的组件数目、形状及尺寸绘制,其实际实施时各组件的型态、数量及比例可为一种随意的改变,且其组件布局型态也可能更为复杂。
47.高并发业务请求:通常是指能够被同时并行处理的业务请求。
48.请参阅图1所示,本实施例提供一种业务请求响应方法,所述方法包括以下步骤:
49.s100,获取业务请求,所述业务请求至少包括在一个或多个客户端生成的用于访问服务器端的多个业务请求。作为示例,本方法中的业务请求中可以包含多个数据类型的数据值,以及多个数据类型与数据值的对应关系。具体地,数据类型包括:业务请求的接收时间、业务请求的请求对象、业务请求的请求类型以及业务请求的优先级等。在获取所述业务请求后,还包括判断业务请求的接收时间是否符合预设的时间分布标准,如图2所示,有:
50.s110,将预设时间段划分为多个单位时间段,并根据每个业务请求的接收时间,计算每个单位时间段所对应的业务请求数量;
51.s120-1,若存在一个单位时间段对应的业务请求数量大于预设值,则判定所述业务请求的接收时间不符合预设的时间分布标准,并判断所述业务请求是否为恶意请求;
52.s120-2,若不存在一个单位时间段对应的业务请求数量大于预设值,则判定所述业务请求的接收时间符合预设的时间分布标准。
53.本方法通过在获取到业务请求后来判断各个业务请求的接收时间是否符合预设的时间分布标准,可以完成对所获取的业务请求进行异常业务请求识别。
54.作为示例,判断业务请求是否为恶意请求的过程可以包括:在服务器端获取到某客户端发送的业务请求后,确定在第一预设时间段内,该客户端发送业务请求的次数,及确定该客户端在第二预设时间段内登录的次数;若业务请求发送次数大于或等于第一预设值,且登录次数大于或等于第二预设值,则确定该客户端发送的业务请求为恶意请求,并拒绝接收该客户端发送的业务请求;若业务请求发送次数大于或等于第一预设值,且登录次数小于第二预设值,则向该客户端发送重登录指令。
55.由于在正常情况下,客户端在预置的第一时间段内发送业务请求的次数是有限的,即可设置一个请求次数的阈值,基于该阈值来确定客户端在第一预设时间段内发送的业务请求的次数是否超过了正常范围,若超过正常范围,则表明该客户端发送的业务请求为恶意请求的概率较大,若未超过该正常范围,则表明客户端发送的业务请求为正常请求。同时,考虑到不同业务在该第一预设时间段内发送业务请求的次数的最大值是不一样的,若仅仅设置一个请求次数的阈值,则可能产生误判断的情况,即将非恶意请求确定为恶意请求,这将严重影响到用户的使用体验。为了避免误判断的情况,需要引入另一个参数与请求次数进行综合判断,考虑到客户端在第二预设时间段内能够登录业务服务器的次数也是有限的,即可再设置一个登录次数的阈值,基于登录次数及请求次数综合确定客户端发送的业务请求是否为恶意请求,能够有效的提高恶意请求识别的准确性。其中,上述请求次数的阈值为预先设置的第一数值,即第一预设值;登录次数的阈值为预先设置的第二数值,即第二预设值。在本实施例中,客户端在接收到重登录指令之后,可以再发送登录请求,以实现与服务器端之间的连接,且服务器端在每次与客户端建立连接时,都将记录此次建立连接的时间,以便能够基于建立连接的时间确定客户端在第二预设时间段内的登录次数。
56.根据上述记载,确定在第一预设时间段内所述客户端发送业务请求的请求次数的过程包括:获取在所述第一时间段内接收到的所有业务请求;统计所述所有业务请求中ip地址与所述第一业务请求的ip地址相同的业务请求的个数,将所统计出的个数作为所述请求次数。本技术通过利用业务请求中包含的ip地址,能够有效的确定具有该ip地址的客户
端在预先设置的第一时间段内发送的业务请求的请求次数,为确定上述第一业务请求是否为恶意请求提供参数。在本实施例中,通过利用业务请求中包含的ip地址,能够有效的确定具有该ip地址的客户端在预置的第一时间段内发送的业务请求的请求次数,为确定上述第一业务请求是否为恶意请求提供参数。
57.s200,在服务器端创建第一线程池,并将所创建的第一线程池作为步骤s100中所获取的业务请求的缓存区域。在本方法中,在所述服务器端创建第一线程池时,可以根据每一个线程池的参数分别创建每一个线程池。作为示例,例如通过java.uitl.concurrent.threadpoolexecutor类创建线程池,具体创建方法可以参见现有的线程池创建方法,此处不再进行赘述。在进行线程池创建时,其中,keepalivetime表示线程没有任务执行时最多保持多久时间会终止。unit为参数keepalivetime的时间单位;其中,threadfactory为线程工厂,用于创建线程;其中,handler为当拒绝处理任务时的策略。在本方法中,任务是指业务请求,执行任务是指响应业务请求。
58.在一实施例中,当handler取值为threadpoolexecutor.abortpolicy时,丢弃任务并抛出rejected execution exception异常。在另一示例性实施例中,当handler取值为threadpoolexecutor.discardpolicy时,丢弃任务,但不需抛出rejected execution exception异常。在另一示例性实施例中,当handler取值为threadpoolexecutor.discardoldestpolicy时,丢弃队列最前面的任务,然后重新尝试执行任务(重复此过程)。在另一示例性实施例中,当handler取值为threadpoolexecutor.callerrunspolicy时,由调用线程处理该任务。
59.根据上述记载,本方法中每个线程池的参数至少包括核心线程数和最大线程数;其中,所述核心线程数(core pool size)中的核心线程会一直存活,即使没有任务需要执行。当正在运行的线程数小于核心线程数时,即使有线程空闲,线程池也会优先创建新线程处理。最大线程数(maximum pool size)用于表示在线程池中最多能创建多少个线程。
60.s300,获取每个客户端的请求头,并根据所获取的请求头将第一线程池中的所有业务请求转换为无序数组。在本方法中,每个客户端仅包括一个请求头,且同一个客户端生成的所有业务请求的请求头均相同。作为示例,本实施例获取的请求头包括但不限于:accept、accept-charset、accept-encoding、accept-language、host、if-modified-since、referer、user-agent、cookie、connection、date。其中,请求头accept用于告诉服务器端,当前客户端支持的数据类型。请求头accept-charset用于告诉服务器端,当前客户端采用的编码。请求头accept-encoding用于告诉服务器端,当前客户端支持的数据压缩格式。请求头accept-language用于告诉服务器端,当前客户端的语言环境。请求头host用于告诉服务器端,当前客户端想访问的主机名。请求头if-modified-since用于告诉服务器端,当前客户端中资源的缓存时间。请求头referer用于告诉服务器端,当前客户端是从什么资源来访问服务器端的。请求头user-agent用于告诉服务器端,当前客户端的软件环境。请求头cookie用于告诉服务器端,当前客户端可以向服务器端带数据。请求头connection用于告诉服务器端,当前客户端在完成当前请求后是关闭还是保持链接。请求头date用于告诉服务器端,当前客户端的请求时间。
61.s400,对每个客户端的请求头进行编号,并按照编号后的请求头对无序数组中的业务请求进行排序,获取有序数组。作为示例,若目前获取了8个业务请求,则对生成这8个
业务请求的客户端的请求头进行编号,并按照编号后的请求头对无序数组中的业务请求进行排序,得到有序数组。在本实施例中,对无序数组中的业务请求可以进行升序排序,也可以进行降序排序。具体地,若无序这8个业务请求形成的无序数组为:{2,5,7,2,2,8,2,2},则按照编号后的请求头对所述无序数组中的业务请求进行排序,得到的有序数组为:{2,2,2,2,2,5,7,8}。其中,无序数组中的2表示在第2个客户端生成的业务请求,5表示在第5个客户端生成的业务请求,7表示在第7个客户端生成的业务请求,8表示在第8个客户端生成的业务请求。
62.在另一实施例中,按照编号后的请求头对所述无序数组中的业务请求进行排序,获取有序数组的方式还可以使用partition函数实现。具体地,首先对编号进行下标,其中下标的方式可以自行设定,例如设定位n/10。如果选中的数字的下标是n/10,那么这个数字就是中位数;如果选中的数字的下标大于n/10,则中位数在它的左边,可以接着在它左边部分的数组中查找;如果选中的数字的下标小于n/10,则中位数在它的右边,可以接着在它右边部分的数组中查找。这个过程是一个递归的过程。然后递归排序拍戏完成以后完全废除了单请求的多并发变成排序后的结果(n/10 其他排序以后的请求)完成以后塞入堆缓冲区,这个缓冲区所接受到的是完全排序以后去除了其他恶意短时间n次的请求。
63.s500,对有序数组中来自同一客户端的业务请求进行调整,所述调整至少包括使调整后对来自同一客户端的业务请求数量进行降低。在本方法中,调整包括但不限于删除、聚类合并等。其中,删除是指将来自同一个客户端的n个业务请求中的n-1个业务请求删除,仅留下一个业务请求;聚类合并是指将来自同一个客户端的n个业务请求聚类为一个业务请求。作为一示例,本实施例通过删除的方式对来自同一客户端的多个业务请求进行调整,具体地:获取有序数组以及所述有序数组中的所有业务请求;判断有序数组中任意相邻的两个请求头编号值是否相同。若相同,则保留该编号值首次出现的业务请求,并删除后续出现的业务请求;若均不相同,则完成对所述有序数组的业务请求调整。在本实施例中,判断有序数组中任意相邻的两个请求头编号值是否相同的方法可以是,将任意相邻的两个请求头编号值进行作差,若差值为0,则说明相邻的两个请求头编号值相同,若差值不为0,则说明相邻的两个请求头编号值不相同。作为示例,当有序数组为{2,2,2,2,2,5,7,8}时,前5个请求头编号值均相同,均为编号2,则保留编号2首次出现的业务请求,并删除后续出现的业务请求,得到的新的有序数组为{2,5,7,8}。
64.根据上述记载,在一示例性实施例中,在判断所述有序数组中任意相邻的两个请求头编号值是否相同时,若所述有序数组中某一目标请求头编号值的出现次数超过所述有序数组的一半长度,则还包括查找该请求头编号值,有:遍历查找所述有序数组中的每一个元素值,并在遍历查找所述有序数组时,保存所述有序数组中的元素值和元素值出现的次数;其中,所述元素值至少包括请求头编号值;如果查找的下一个元素值和上一个保存的元素值相同,则对上一个元素值的出现次数加1;如果查找的下一个元素值和上一个保存的元素值不相同,则对上一个元素值的出现次数减1;且在对上一个元素值的出现次数进行减1后,若上一个元素值的出现次数为0,则保存下一个元素值,并把下一个元素值的出现次数设为1,用于进行下一次查找;在对所述有序数组中的每一个元素值完成遍历查找后,获取最后一次次数设为1时对应的请求头编号值,作为待查找的请求头编号值。由于要进行调整的元素值的出现次数比其他所有元素值出现的次数之和还要多,所以本方法将最后一次把
出现次数设为1时所对应的元素值作为要进行调整的元素值。作为示例,对于有序数组为{2,2,2,2,2,5,7,8},由于编号值2出现的次数为5次,超过有序数组的一半,所以此时查找的请求头编号值记为编号2。
65.s600,完成业务请求调整后,再在服务器端创建第二线程池,并从第一线程池中获取有序数组调整后的所有业务请求,以及将所获取的业务请求缓存至所述第二线程池中。其中,创建第二线程池的方式与创建第一线程池的方式相同,例如第一线程池和第二线程池可以基于netty开源框架创建。由于netty的高并发主要满足于业务的高并发访问,并且netty是一个利用java的高级网络的能力,通过隐藏其背后的复杂性来提供一个易于使用的api的客户端/服务器框架。而且netty对于传统意义上的高并发已经做了全面的升级,改变了传统意义上的io模式,同时netty不仅能够高并发,而且传输快。但是在安全防范上,很难做到在高并发中需要进行去除恶意并发请求,所以在传统意义上光单单使用netty是不够的,本发明基于netty开源框架创建第一线程池和第二线程池,可以完成与netty的融合,不仅能高并发,而且也能控制恶意并发。
66.s700,对第二线程池中的所有业务请求进行响应,完成对调整后的所有业务请求进行响应。由于第一线程池中缓存的均是无序的业务请求,而第二线程池存储的是有序的业务请求,且是进行调整后的有序的业务请求,所以,与直接响应第一线程池中的业务请求相比,本方法通过新创建一个第二线程池来响应调整后的有序的业务请求,可以增大响应速度,提高响应效率。
67.综上所述,本发明提供一种业务请求响应方法,首先获取业务请求,所述业务请求至少包括在一个或多个客户端生成的用于访问服务器端的多个业务请求;然后在所述服务器端创建第一线程池,并将所创建的第一线程池作为所述业务请求的缓存区域;再获取每个客户端的请求头,并根据所获取的请求头将所述第一线程池中的所有业务请求转换为无序数组;对每个客户端的请求头进行编号,并按照编号后的请求头对所述无序数组中的业务请求进行排序,获取有序数组;并对所述有序数组中来自同一客户端的业务请求进行调整,所述调整至少包括对来自同一客户端的业务请求数量进行降低;最后对调整后的所有业务请求进行响应。即在完成业务请求调整后,再在服务器端创建第二线程池,并从第一线程池中获取有序数组调整后的所有业务请求,以及将所获取的业务请求缓存至所述第二线程池中;对第二线程池中的所有业务请求进行响应,完成对调整后的所有业务请求进行响应。本方法通过对在客户端生成的多个业务请求进行调整,使得本方法对每个客户端的重复业务请求只响应一次,这样既可以保证这些高并发业务请求能够被正常响应,而且还可以保证这些高并发业务请求在响应时不会对服务器端的运营系统造成雪崩和瘫痪。此外,本方法通过对多个业务请求进行调整,相当于将每个客户端生成的业务请求作为一个单用户的业务请求,而单个用户访问链接一般和正常速度是一样的,所以本方法通过这种方式能够解决恶意攻击和爬虫程序的数据窃取。
68.如图3所示,本实施例还提供一种业务请求响应系统,所述系统包括有:
69.业务请求模块m10,用于获取业务请求,所述业务请求至少包括在一个或多个客户端生成的用于访问服务器端的多个业务请求;作为示例,本系统中的业务请求中可以包含多个数据类型的数据值,以及多个数据类型与数据值的对应关系。具体地,数据类型包括:业务请求的接收时间、业务请求的请求对象、业务请求的请求类型以及业务请求的优先级
等。在获取所述业务请求后,还包括判断业务请求的接收时间是否符合预设的时间分布标准,如图2所示,有:将预设时间段划分为多个单位时间段,并根据每个业务请求的接收时间,计算每个单位时间段所对应的业务请求数量;若存在一个单位时间段对应的业务请求数量大于预设值,则判定所述业务请求的接收时间不符合预设的时间分布标准;若不存在一个单位时间段对应的业务请求数量大于预设值,则判定所述业务请求的接收时间符合预设的时间分布标准。本系统通过在获取到业务请求后来判断各个业务请求的接收时间是否符合预设的时间分布标准,可以完成对所获取的业务请求进行异常业务请求识别。
70.作为示例,判断业务请求是否为恶意请求的过程可以包括:在服务器端获取到某客户端发送的业务请求后,确定在第一预设时间段内,该客户端发送业务请求的次数,及确定该客户端在第二预设时间段内登录的次数;若业务请求发送次数大于或等于第一预设值,且登录次数大于或等于第二预设值,则确定该客户端发送的业务请求为恶意请求,并拒绝接收该客户端发送的业务请求;若业务请求发送次数大于或等于第一预设值,且登录次数小于第二预设值,则向该客户端发送重登录指令。
71.由于在正常情况下,客户端在预置的第一时间段内发送业务请求的次数是有限的,即可设置一个请求次数的阈值,基于该阈值来确定客户端在第一预设时间段内发送的业务请求的次数是否超过了正常范围,若超过正常范围,则表明该客户端发送的业务请求为恶意请求的概率较大,若未超过该正常范围,则表明客户端发送的业务请求为正常请求。同时,考虑到不同业务在该第一预设时间段内发送业务请求的次数的最大值是不一样的,若仅仅设置一个请求次数的阈值,则可能产生误判断的情况,即将非恶意请求确定为恶意请求,这将严重影响到用户的使用体验。为了避免误判断的情况,需要引入另一个参数与请求次数进行综合判断,考虑到客户端在第二预设时间段内能够登录业务服务器的次数也是有限的,即可再设置一个登录次数的阈值,基于登录次数及请求次数综合确定客户端发送的业务请求是否为恶意请求,能够有效的提高恶意请求识别的准确性。其中,上述请求次数的阈值为预先设置的第一数值,即第一预设值;登录次数的阈值为预先设置的第二数值,即第二预设值。在本实施例中,客户端在接收到重登录指令之后,可以再发送登录请求,以实现与服务器端之间的连接,且服务器端在每次与客户端建立连接时,都将记录此次建立连接的时间,以便能够基于建立连接的时间确定客户端在第二预设时间段内的登录次数。
72.根据上述记载,确定在第一预设时间段内所述客户端发送业务请求的请求次数的过程包括:获取在所述第一时间段内接收到的所有业务请求;统计所述所有业务请求中ip地址与所述第一业务请求的ip地址相同的业务请求的个数,将所统计出的个数作为所述请求次数。本技术通过利用业务请求中包含的ip地址,能够有效的确定具有该ip地址的客户端在预先设置的第一时间段内发送的业务请求的请求次数,为确定上述第一业务请求是否为恶意请求提供参数。在本实施例中,通过利用业务请求中包含的ip地址,能够有效的确定具有该ip地址的客户端在预置的第一时间段内发送的业务请求的请求次数,为确定上述第一业务请求是否为恶意请求提供参数。
73.线程池模块m20,用于在所述服务器端创建目标线程池,并将所创建的目标线程池作为业务请求模块所获取的业务请求的缓存区域。在本系统中,在所述服务器端创建第一线程池时,可以根据每一个线程池的参数分别创建每一个线程池。作为示例,例如通过java.uitl.concurrent.threadpoolexecutor类创建线程池,具体创建方法可以参见现有的
线程池创建方法,此处不再进行赘述。在进行线程池创建时,其中,keepalivetime表示线程没有任务执行时最多保持多久时间会终止。unit为参数keepalivetime的时间单位;其中,threadfactory为线程工厂,用于创建线程;其中,handler为当拒绝处理任务时的策略。在本系统中,任务是指业务请求,执行任务是指响应业务请求。
74.在一实施例中,当handler取值为threadpoolexecutor.abortpolicy时,丢弃任务并抛出rejected execution exception异常。在另一示例性实施例中,当handler取值为threadpoolexecutor.discardpolicy时,丢弃任务,但不需抛出rejected execution exception异常。在另一示例性实施例中,当handler取值为threadpoolexecutor.discardoldestpolicy时,丢弃队列最前面的任务,然后重新尝试执行任务(重复此过程)。在另一示例性实施例中,当handler取值为threadpoolexecutor.callerrunspolicy时,由调用线程处理该任务。
75.根据上述记载,本系统中每个线程池的参数至少包括核心线程数和最大线程数;其中,所述核心线程数(core pool size)中的核心线程会一直存活,即使没有任务需要执行。当正在运行的线程数小于核心线程数时,即使有线程空闲,线程池也会优先创建新线程处理。最大线程数(maximum pool size)用于表示在线程池中最多能创建多少个线程。
76.业务请求调整模块m30,用于对所述目标线程池中来自同一客户端的业务请求进行调整,所述调整至少包括对来自同一客户端的业务请求数量进行降低。具体地,对所述目标线程池中来自同一客户端的业务请求进行调整的过程包括:获取每个客户端的请求头,并根据所获取的请求头将所述目标线程池中的所有业务请求转换为无序数组;对每个客户端的请求头进行编号,并按照编号后的请求头对所述无序数组中的业务请求进行排序,获取有序数组;对所述有序数组中来自同一客户端的业务请求进行调整,完成对所述目标线程池中来自同一客户端的业务请求进行调整。
77.在本系统中,每个客户端仅包括一个请求头,且同一个客户端生成的所有业务请求的请求头均相同。作为示例,本实施例获取的请求头包括但不限于:accept、accept-charset、accept-encoding、accept-language、host、if-modified-since、referer、user-agent、cookie、connection、date。其中,请求头accept用于告诉服务器端,当前客户端支持的数据类型。请求头accept-charset用于告诉服务器端,当前客户端采用的编码。请求头accept-encoding用于告诉服务器端,当前客户端支持的数据压缩格式。请求头accept-language用于告诉服务器端,当前客户端的语言环境。请求头host用于告诉服务器端,当前客户端想访问的主机名。请求头if-modified-since用于告诉服务器端,当前客户端中资源的缓存时间。请求头referer用于告诉服务器端,当前客户端是从什么资源来访问服务器端的。请求头user-agent用于告诉服务器端,当前客户端的软件环境。请求头cookie用于告诉服务器端,当前客户端可以向服务器端带数据。请求头connection用于告诉服务器端,当前客户端在完成当前请求后是关闭还是保持链接。请求头date用于告诉服务器端,当前客户端的请求时间。
78.对每个客户端的请求头进行编号,并按照编号后的请求头对无序数组中的业务请求进行排序,获取有序数组。作为示例,若目前获取了8个业务请求,则对生成这8个业务请求的客户端的请求头进行编号,并按照编号后的请求头对无序数组中的业务请求进行排序,得到有序数组。在本实施例中,对无序数组中的业务请求可以进行升序排序,也可以进
行降序排序。具体地,若无序这8个业务请求形成的无序数组为:{2,5,7,2,2,8,2,2},则按照编号后的请求头对所述无序数组中的业务请求进行排序,得到的有序数组为:{2,2,2,2,2,5,7,8}。其中,无序数组中的2表示在第2个客户端生成的业务请求,5表示在第5个客户端生成的业务请求,7表示在第7个客户端生成的业务请求,8表示在第8个客户端生成的业务请求。
79.在另一实施例中,按照编号后的请求头对所述无序数组中的业务请求进行排序,获取有序数组的方式还可以使用partition函数实现。具体地,首先对编号进行下标,其中下标的方式可以自行设定,例如设定位n/10。如果选中的数字的下标是n/10,那么这个数字就是中位数;如果选中的数字的下标大于n/10,则中位数在它的左边,可以接着在它左边部分的数组中查找;如果选中的数字的下标小于n/10,则中位数在它的右边,可以接着在它右边部分的数组中查找。这个过程是一个递归的过程。然后递归排序拍戏完成以后完全废除了单请求的多并发变成排序后的结果(n/10 其他排序以后的请求)完成以后塞入堆缓冲区,这个缓冲区所接受到的是完全排序以后去除了其他恶意短时间n次的请求。
80.对有序数组中来自同一客户端的业务请求进行调整,所述调整至少包括使调整后对来自同一客户端的业务请求数量进行降低。在本系统中,调整包括但不限于删除、聚类合并等。其中,删除是指将来自同一个客户端的n个业务请求中的n-1个业务请求删除,仅留下一个业务请求;聚类合并是指将来自同一个客户端的n个业务请求聚类为一个业务请求。作为一示例,本实施例通过删除的方式对来自同一客户端的多个业务请求进行调整,具体地:获取有序数组以及所述有序数组中的所有业务请求;判断有序数组中任意相邻的两个请求头编号值是否相同。若相同,则保留该编号值首次出现的业务请求,并删除后续出现的业务请求;若均不相同,则完成对所述有序数组的业务请求调整。在本实施例中,判断有序数组中任意相邻的两个请求头编号值是否相同的方法可以是,将任意相邻的两个请求头编号值进行作差,若差值为0,则说明相邻的两个请求头编号值相同,若差值不为0,则说明相邻的两个请求头编号值不相同。作为示例,当有序数组为{2,2,2,2,2,5,7,8}时,前5个请求头编号值均相同,均为编号2,则保留编号2首次出现的业务请求,并删除后续出现的业务请求,得到的新的有序数组为{2,5,7,8}。
81.根据上述记载,在一示例性实施例中,在判断所述有序数组中任意相邻的两个请求头编号值是否相同时,若所述有序数组中某一目标请求头编号值的出现次数超过所述有序数组的一半长度,则还包括查找该请求头编号值,有:遍历查找所述有序数组中的每一个元素值,并在遍历查找所述有序数组时,保存所述有序数组中的元素值和元素值出现的次数;其中,所述元素值至少包括请求头编号值;如果查找的下一个元素值和上一个保存的元素值相同,则对上一个元素值的出现次数加1;如果查找的下一个元素值和上一个保存的元素值不相同,则对上一个元素值的出现次数减1;且在对上一个元素值的出现次数进行减1后,若上一个元素值的出现次数为0,则保存下一个元素值,并把下一个元素值的出现次数设为1,用于进行下一次查找;在对所述有序数组中的每一个元素值完成遍历查找后,获取最后一次次数设为1时对应的请求头编号值,作为待查找的请求头编号值。由于要进行调整的元素值的出现次数比其他所有元素值出现的次数之和还要多,所以本方法将最后一次把出现次数设为1时所对应的元素值作为要进行调整的元素值。作为示例,对于有序数组为{2,2,2,2,2,5,7,8},由于编号值2出现的次数为5次,超过有序数组的一半,所以此时查找
的请求头编号值记为编号2。
82.业务请求响应模块m40,用于对调整后的所有业务请求进行响应。具体地,完成业务请求调整后,再在服务器端创建第二线程池,并从第一线程池中获取有序数组调整后的所有业务请求,以及将所获取的业务请求缓存至所述第二线程池中;对第二线程池中的所有业务请求进行响应,完成对调整后的所有业务请求进行响应。
83.其中,创建第二线程池的方式与创建第一线程池的方式相同,例如第一线程池和第二线程池可以基于netty开源框架创建。由于netty的高并发主要满足于业务的高并发访问,并且netty是一个利用java的高级网络的能力,通过隐藏其背后的复杂性来提供一个易于使用的api的客户端/服务器框架。而且netty对于传统意义上的高并发已经做了全面的升级,改变了传统意义上的io模式,同时netty不仅能够高并发,而且传输快。但是在安全防范上,很难做到在高并发中需要进行去除恶意并发请求,所以在传统意义上光单单使用netty是不够的,本发明基于netty开源框架创建第一线程池和第二线程池,可以完成与netty的融合,不仅能高并发,而且也能控制恶意并发。
84.对第二线程池中的所有业务请求进行响应,完成对调整后的所有业务请求进行响应。由于第一线程池中缓存的均是无序的业务请求,而第二线程池存储的是有序的业务请求,且是进行调整后的有序的业务请求,所以,与直接响应第一线程池中的业务请求相比,本系统通过新创建一个第二线程池来响应调整后的有序的业务请求,可以增大响应速度,提高响应效率。
85.综上所述,本发明提供一种业务请求响应系统,首先利用业务请求模块获取业务请求,所述业务请求至少包括在一个或多个客户端生成的用于访问服务器端的多个业务请求;然后利用线程池模块在所述服务器端创建第一线程池,并将所创建的第一线程池作为所述业务请求的缓存区域;再利用业务请求调整模块获取每个客户端的请求头,并根据所获取的请求头将所述第一线程池中的所有业务请求转换为无序数组;对每个客户端的请求头进行编号,并按照编号后的请求头对所述无序数组中的业务请求进行排序,获取有序数组;并对所述有序数组中来自同一客户端的业务请求进行调整,所述调整至少包括对来自同一客户端的业务请求数量进行降低;最后利用业务请求响应模块对调整后的所有业务请求进行响应。即在完成业务请求调整后,再在服务器端创建第二线程池,并从第一线程池中获取有序数组调整后的所有业务请求,以及将所获取的业务请求缓存至所述第二线程池中;对第二线程池中的所有业务请求进行响应,完成对调整后的所有业务请求进行响应。本系统通过对在客户端生成的多个业务请求进行调整,使得本系统对每个客户端的重复业务请求只响应一次,这样既可以保证这些高并发业务请求能够被正常响应,而且还可以保证这些高并发业务请求在响应时不会对服务器端的运营系统造成雪崩和瘫痪。此外,本系统通过对多个业务请求进行调整,相当于将每个客户端生成的业务请求作为一个单用户的业务请求,而单个用户访问链接一般和正常速度是一样的,所以本系统通过这种方式能够解决恶意攻击和爬虫程序的数据窃取。
86.本技术实施例还提供了一种计算机设备,例如业务请求响应设备,该设备包括:存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如图1所述方法的步骤。图4示出了一种计算机设备1000的结构示意图,参阅图4所示,计算机设备1000包括:处理器1010、存储器1020、电源1030、显示单元1040、输
入单元1060。
87.处理器1010是计算机设备1000的控制中心,利用各种接口和线路连接各个部件,通过运行或执行存储在存储器1020内的软件程序和/或数据,执行计算机设备1000的各种功能,从而对计算机设备1000进行整体监控。本技术实施例中,处理器1010调用存储器1020中存储的计算机程序时执行如图1所述的方法。可选的,处理器1010可包括一个或多个处理单元;优选的,处理器1010可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用等,调制解调处理器主要处理无线通信。在一些实施例中,处理器、存储器、可以在单一芯片上实现,在一些实施例中,它们也可以在独立的芯片上分别实现。
88.存储器1020可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、各种应用等;存储数据区可存储根据计算机设备1000的使用所创建的数据等。此外,存储器1020可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件等。
89.计算机设备1000还包括给各个部件供电的电源1030(比如电池),电源可以通过电源管理系统与处理器1010逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗等功能。
90.显示单元1040可用于显示由用户输入的信息或提供给用户的信息以及计算机设备1000的各种菜单等,本发明实施例中主要用于显示计算机设备1000中各应用的显示界面以及显示界面中显示的文本、图片等对象。显示单元1040可以包括显示面板1050。显示面板1050可以采用液晶显示屏(liquid crystal display,lcd)、有机发光二极管(organic light-emitting diode,oled)等形式来配置。
91.输入单元1060可用于接收用户输入的数字或字符等信息。输入单元1060可包括触控面板1070以及其他输入设备1080。其中,触控面板1070,也称为触摸屏,可收集用户在其上或附近的触摸操作(比如用户使用手指、触摸笔等任何适合的物体或附件在触控面板1070上或在触控面板1070附近的操作)。
92.具体的,触控面板1070可以检测用户的触摸操作,并检测触摸操作带来的信号,将这些信号转换成触点坐标,发送给处理器1010,并接收处理器1010发来的命令并加以执行。此外,可以采用电阻式、电容式、红外线以及表面声波等多种类型实现触控面板1070。其他输入设备1080可以包括但不限于物理键盘、功能键(比如音量控制按键、开关机按键等)、轨迹球、鼠标、操作杆等中的一种或多种。
93.当然,触控面板1070可覆盖显示面板1050,当触控面板1070检测到在其上或附近的触摸操作后,传送给处理器1010以确定触摸事件的类型,随后处理器1010根据触摸事件的类型在显示面板1050上提供相应的视觉输出。虽然在图4中,触控面板1070与显示面板1050是作为两个独立的部件来实现计算机设备1000的输入和输出功能,但是在某些实施例中,可以将触控面板1070与显示面板1050集成而实现计算机设备1000的输入和输出功能。
94.计算机设备1000还可包括一个或多个传感器,例如压力传感器、重力加速度传感器、接近光传感器等。当然,根据具体应用中的需要,上述计算机设备1000还可以包括摄像头等其它部件。
95.本技术实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,所述
计算机程序被处理器执行时实现如图1所述方法的步骤。
96.本领域技术人员可以理解的是,图4仅仅是计算机设备的举例,并不构成对该设备的限定,该设备可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件。为了描述的方便,以上各部分按照功能划分为各模块(或单元)分别描述。当然,在实施本技术时,可以把各模块(或单元)的功能在同一个或多个软件或硬件中实现。
97.本领域内的技术人员应明白,本技术可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。本技术是参照根据本技术实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的,应理解为可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。这些计算机程序指令可应用至通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器中以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
98.应当理解的是,尽管在本发明实施例中可能采用术语第一、第二、第三等来描述预设范围等,但这些预设范围不应限于这些术语。这些术语仅用来将预设范围彼此区分开。例如,在不脱离本发明实施例范围的情况下,第一预设范围也可以被称为第二预设范围,类似地,第二预设范围也可以被称为第一预设范围。
99.上述实施例仅例示性说明本发明的原理及其功效,而非用于限制本发明。任何熟悉此技术的人士皆可在不违背本发明的精神及范畴下,对上述实施例进行修饰或改变。因此,举凡所属技术领域中具有通常知识者在未脱离本发明所揭示的精神与技术思想下所完成的一切等效修饰或改变,仍应由本发明的权利要求所涵盖。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献