数据请求处理方法及装置的制造方法
【技术领域】
[0001]本公开涉及互联网技术领域,尤其涉及数据请求处理方法及装置。
【背景技术】
[0002]Web服务作为一个建立可互操作的分布式应用程序的新平台,对延时非常敏感。当前端不断地向服务器发出请求时,如果请求的数量峰值没有超过服务器后台数据处理的最大处理能力,则服务器可以处于很好的工作状态,而一旦前端请求的数量峰值超过了服务器后台数据处理的最大处理能力,且服务器并未做任何相应保护措施,这就使得累计的未处理请求越来越多,导致历史累计的超时请求达到一定的规模,形成恶性循环。服务器对这些超时请求所进行的处理都会因为超时而无效,对外呈现的服务能力也会为零,且这种情况无法自动恢复。服务器只能通过重启来缓解这种情况,但是重启后的服务器仍然会被汹涌的前端请求占满,从而导致服务器再一次过载,陷入“过载一一重启”的恶性循环。
[0003]针对上述Web服务所面临的问题,目前采取一种清空请求队列的方式。具体来讲就是将接收到的前端请求都保存到队列中,当请求堆积到一定程度、且队列中的很多请求都超时时,就可以采取清空请求队列的方式。这种方法可以通过采取一定的监控方式来实现,例如模拟客户端的请求,每隔一段时间向服务器发送一些请求,如果大部分请求都能正常返回,说明后端处理系统正常,如果大部分请求都超时,则说明后台处理系统已经瘫痪,此时就需要清空请求队列,以暂时处理请求高峰期的情况。
[0004]然而,这种方式治标不治本,因为服务器后台处理的请求数量是一定的,当在请求高峰期时,即使清空请求队列,仍然会继续接收到大量汹涌而来的前端请求,导致大量堵塞而使服务器瘫痪,从而再次陷入“过载一一重启”的恶性循环。
【发明内容】
[0005]为克服相关技术中存在的问题,本公开实施例提供一种数据请求处理方法及装置,用以在服务器处理数据请求的能力达到最大时,能够拒绝接收新的请求并采用其他有效方式处理新的请求。
[0006]根据本公开实施例的第一方面,提供一种数据请求处理方法,包括:
[0007]将获取数据的请求分配至线程中,开启所述线程处理所述请求;
[0008]当处于工作状态的线程数目等于第一数目时,如果接收到新的请求,则在接收到所述新的请求后的预设时长内,利用空闲线程或者第二服务器处理所述新的请求;其中,所述第一数目为预先为所述第一服务器设定的开启线程最大数目,所述空闲线程为所述处于工作状态的线程中从工作状态变更为空闲状态的线程。
[0009]本公开的实施例提供的技术方案可以包括以下有益效果:
[0010]该方案在处于工作状态的线程数目达到最大时,拒绝接收新的请求并利用空闲线程或者其他服务器来处理未超时的新的请求,使得服务器达到最大处理能力之后仍能处理接收到的新的请求,提高了服务器处理请求的效率。[0011 ] 在一个实施例中,所述处于工作状态的线程数目等于第一数目之前,所述方法还包括:
[0012]当处于工作状态的线程数目等于第二数目时,继续接收到请求,所述第二数目小于所述第一数目;
[0013]将继续接收到的请求添加至有界队列中,在添加的过程中,如果出现所述空闲线程,则将有界队列中的请求分配至出现的空闲线程进行处理;
[0014]当所述有界队列中的请求数量等于预设数量时,将所述有界队列中的请求分配至预设线程进行处理,直到处于工作状态的线程数目等于第一数目,所述预设线程包括出现的空闲线程、或者未被开启的线程。
[0015]该实施例中,采用阶梯式的分配方式将接收到的请求分配至线程中进行处理,提高了服务器处理请求的效率。
[0016]在一个实施例中,所述当处于工作状态的线程数目等于第一数目时,如果接收到新的请求,则在接收到所述新的请求后的预设时长内,利用空闲线程或者第二服务器处理所述新的请求,包括:
[0017]当处于工作状态的线程数目等于第一数目、且所述有界队列中的请求数量等于预设数量时,如果接收到新的请求,则在接收到所述新的请求后的预设时长内,利用空闲线程或者第二服务器处理所述新的请求。
[0018]该实施例中,在处于工作状态的线程数目达到最大数目、且有界队列中的请求数量也等于预设的最大数量时,拒绝处理新的请求,并采用空闲线程或者其他服务器来处理未超时的新的请求,使得服务器达到最大处理能力之后仍能处理接收到的新的请求,提高了服务器处理请求的效率。
[0019]在一个实施例中,所述如果接收到新的请求,则在接收到所述新的请求后的预设时长内,利用空闲线程处理所述新的请求,包括:
[0020]在接收到所述新的请求后的预设时长内,记录所述新的请求,并监测是否出现所述空闲线程;
[0021]当在所述预设时长内出现所述空闲线程时,将所述记录的新的请求分配至出现的空闲线程中进行处理;
[0022]当在所述预设时长内没有出现所述空闲线程时,删除所述记录的新的请求。
[0023]该实施例中,利用空闲线程处理未超过预设时长的请求,并将超过预设时长的请求删除掉,使得服务器达到最大处理能力之后仍能处理接收到的新的请求,不仅提高服务器处理请求的效率,同时避免向用户返回已经超时很久的请求。
[0024]在一个实施例中,所述如果接收到新的请求,则在接收到所述新的请求后的预设时长内,利用空闲线程处理所述新的请求,包括:
[0025]在接收到所述新的请求后的预设时长内,记录所述新的请求,并监测所述有界队列中的请求数量是否小于所述预设数量;
[0026]当在所述预设时长内监测到所述有界队列中的请求数量小于所述预设数量时,将所述记录的新的请求添加至所述有界队列中,在添加的过程中,如果出现所述空闲线程,则将所述有界队列中的请求分配至出现的空闲线程进行处理;
[0027]当在所述预设时长内监测到所述有界队列中的请求数量始终等于所述预设数量时,删除所述记录的新的请求。
[0028]该实施例利用有界队列和空闲线程处理新的请求,使得服务器能够最大效率地处理请求,且避免向用户返回已经超时很久的请求。
[0029]在一个实施例中,所述如果接收到新的请求,则在接收到所述新的请求后的预设时长内,利用第二服务器处理所述新的请求,包括:
[0030]在接收到所述新的请求后的预设时长内,将所述新的请求转发给所述第二服务器进行处理。
[0031]该实施例中,利用其它服务器来处理接收到的新的请求,使得服务器达到最大处理能力之后仍能处理接收到的新的请求,提高了服务器处理请求的效率。
[0032]在一个实施例中,所述方法还包括:
[0033]当预设的全部所述第二服务器中每一个所述第二服务器拒绝所述新的请求的次数都超过预设次数时,发出所述第二服务器的数目过少的提示信息。
[0034]在一个实施例中,所述将获取数据的请求分配至线程中,开启所述线程处理所述请求之后,所述方法还包括:
[0035]当处于工作状态的线程数目等于第一数目时,如果接收到新的请求,则在接收到所述新的请求后的预设时长内,利用离线下载服务器对所述新的请求进行离线处理。
[0036]该实施例中,在请求过多的情况下采取离线处理的方式,使得服务器达到最大处理能力之后仍能通过其他方式处理接收到的新的请求,提高了服务器处理请求的效率。
[0037]根据本公开实施例的第二方面,提供一种数据请求处理装置,用于第一服务器,包括:
[0038]开启模块,用于将获取数据的请求分配至线程中,开启所述线程处理所述请求;
[0039]第一处理模块,用于当处于工作状态的线程数目等于第一数目时,如果接收到新的请求,则在接收到所述新的请求后的预设时长内,利用空闲线程或者第二服务器处理所述新的请求;其中,所述第一数目为预先为所述第一服务器设定的开启线程最大数目,所述空闲线程为所述处于工作状态的线程中从工作状态变更为空闲状态的线程。
[0040]在一个实施例中,所述装置还包括:
[0041]接收模块,用于当处于工作状态的线程数目等于第二数目时,继续接收到请求,所述第二数目小于所述第一数目;
[0042]添加模块,用于将继续接收到的请求添加至有界队列中,在添加的过程中,如果出现所述空闲线程,则将有界队列中的请求分配至出现的空闲线程进行处理;
[0043]分配模块,用于当所述有界队列中的请求数量等于预设数量时,将