一种负载均衡方法及一种服务器与流程

文档序号:12279024阅读:150来源:国知局
一种负载均衡方法及一种服务器与流程

本发明属于计算机技术领域,尤其涉及一种负载均衡方法及一种服务器。



背景技术:

分布式拒绝服务(DDoS,Distributed Denial of Service)攻击是指,通过大量合法的请求来占用大量网络资源,以达到瘫痪网络目的的攻击方式。通过借助于客户/服务器技术,将多个计算机联合起来作为攻击平台,对一个或多个目标发动大量连接请求,从而能够成倍地提高拒绝服务攻击的威力。

目前,终端设备主要采用http(HyperText Transfer Protocol,超文本传输协议)协议来实现与云端服务器之间的通信。此种协议简单易用,但是,当云端服务器遭遇到大量的http请求时,如用户量猛增、DDos攻击、系统重启等造成的流量洪峰时,很容易造成服务器中连接请求的长时间拥堵,导致服务不可用,严重地影响了业务的正常运作,因此,整个通信系统的稳定性较低。



技术实现要素:

本发明实施例的目的在于提供一种负载均衡方法及一种服务器,旨在解决当网页服务器遭遇到大量的http请求时,容易造成服务器中连接请求的长时间拥堵,导致服务不可用的问题。

第一方面,提供了一种负载均衡方法,包括:第一服务器接收客户端发出的N个访问请求;所述第一服务器判断当前的包转发率是否超过预设阈值;若当前的包转发率未超过预设阈值,则所述第一服务器将所述N个访问请求分别分发至一台或多台网页服务器;若当前的包转发率超过预设阈值,则所述第一服务器将M个所述访问请求转发至第二服务器,以使所述第二服务器基于网页状态码分别对所述M个访问请求进行响应;其中,所述第一服务器、所述网页服务器与所述第二服务器属于同一集群,所述M和N为整数,所述M小于等于N。

在第一方面的第一种可能的实现方式中,所述第一服务器判断当前的包转发率是否超过预设阈值包括:当检测到所述访问请求为异常请求时,所述第一服务器将所述访问请求转发至第二服务器,以使所述第二服务器基于网页状态码对所述访问请求进行响应;当检测到所述访问请求为正常请求时,所述第一服务器判断当前的包转发率是否超过预设阈值。

在第一方面的第二种可能的实现方式中,所述第一服务器判断当前的包转发率是否超过预设阈值包括:当检测到所述集群中各台所述网页服务器均处于异常状态时,所述第一服务器将所述N个访问请求转发至第二服务器,以使所述第二服务器基于网页状态码分别对所述N个访问请求进行响应;当检测到所述集群中的任一所述网页服务器处于正常状态时,所述第一服务器判断当前的包转发率是否超过预设阈值。

在第一方面的第三种可能的实现方式中,所述第一服务器将M个所述访问请求转发至第二服务器包括:所述第一服务器调整负载配置文件中所述第二服务器的权重,以使所述第二服务器的权重大于所述集群中各台所述网页服务器的权重;所述第一服务器根据所述第二服务器的权重,将M个所述访问请求转发至所述第二服务器。

在第一方面的第四种可能的实现方式中,所述第一服务器为nginx服务器。

第二方面,提供一种服务器,包括:接收单元,用于接收客户端发出的N个访问请求;判断单元,用于判断当前的包转发率是否超过预设阈值;转发单元,用于若当前的包转发率未超过预设阈值,则将所述N个访问请求分别分发至一台或多台网页服务器;若当前的包转发率超过预设阈值,则将M个所述访问请求转发至第二服务器,以使所述第二服务器基于网页状态码分别对所述M个访问请求进行响应;其中,所述服务器、所述网页服务器与所述第二服务器属于同一集群,所述M和N为整数,所述M小于等于N。

在第二方面的第一种可能的实现方式中,所述判断单元包括:第一转发子单元,用于当检测到所述访问请求为异常请求时,将所述访问请求转发至第二服务器,以使所述第二服务器基于网页状态码对所述访问请求进行响应;第一判断子单元,用于当检测到所述访问请求为正常请求时,判断当前的包转发率是否超过预设阈值。

在第二方面的第二种可能的实现方式中,所述判断单元包括:第二转发子单元,用于当检测到所述集群中各台所述网页服务器均处于异常状态时,将所述N个访问请求转发至第二服务器,以使所述第二服务器基于网页状态码分别对所述N个访问请求进行响应;第二判断子单元,用于当检测到所述集群中的任一所述网页服务器处于正常状态时,判断当前的包转发率是否超过预设阈值。

在第二方面的第三种可能的实现方式中,所述转发单元包括:调整子单元,用于调整负载配置文件中所述第二服务器的权重,以使所述第二服务器的权重大于所述集群中各台所述网页服务器的权重;第三转发子单元,用于根据所述第二服务器的权重,将M个所述访问请求转发至所述第二服务器。

在第二方面的第四种可能的实现方式中,所述第一服务器为nginx服务器。

本发明实施例中,通过第一服务器来接收来自于客户端的访问请求,即时第一服务器在某个瞬间遭遇到了大量的http请求,也能够自动识别出该异常状况并将部分访问请求转发至第二服务器。由于第二服务器能够基于长度较短的网页状态码来快速响应所述访问请求,因此,避免了网页服务器中会产生连接请求长时间拥堵的状况,在保证服务器高可用性的同时,提高了整个通信系统的稳定性。

附图说明

图1是本发明实施例提供的负载均衡方法的实现流程图;

图2是本发明另一实施例提供的负载均衡方法的实现流程图;

图3是本发明又一实施例提供的负载均衡方法的实现流程图;

图4是本发明实施例提供的负载均衡方法S104的具体实现流程图;

图5是本发明实施例提供的负载均衡方法所适用的系统架构图;

图6是本发明实施例提供的服务器的结构框图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

本发明实施例中,负载均衡是指由多台服务器组成一个服务器集合,每台服务器都可以单独对外提供服务而无须其他服务器的辅助。通过某种负载分担技术,将外部发送来的请求分配到某一台服务器上,而接收到请求的服务器能够独立地回应客户的请求。其中,将外部请求进行分配的服务器称为节点服务器,即第一服务器,而真实能够提供对外服务以及做出实际响应的服务器为网页服务器。

图1示出了本发明实施例提供的负载均衡方法的实现流程,详述如下:

在S101中,第一服务器接收客户端发出的N个访问请求。

在本发明实施例中,所述客户端,是指可以为客户提供本地服务的智能设备,进一步地,是指搭载了智能操作系统且具有网络接入功能的设备,包括但不限于智能手机、智能手表、笔记本、平板电脑、甚至包括车载电脑。

客户端通过有线或无线的方式接入网络后,与第一服务器互联。客户端内部的浏览器接收到用户输入的关于第一服务器提供的服务地址后,经过DNS解析,从网络中搜到第一服务器所在位置,并向第一服务器传递了一个数据包,根据数据包中的请求正文,发送包含客户提交的查询字符串信息。此时,客户端即向第一服务器发出了http请求,也称访问请求。

当多个客户端同时或连续向第一服务器发出访问请求,或者,当一个客户端持续向第一服务器发出访问请求时,所述第一服务器即接收到了N个访问请求。其中,N为整数。

在S102中,所述第一服务器判断当前的包转发率是否超过预设阈值。

第一服务器存储有系统管理员预设的一个包转发率阈值,每次接到客户端发送过来的http请求时,第一服务器计算出当前时刻的数据包转发率。所述数据包转发率表示,第一服务器每秒转发数据包的个数。

第一服务器获取到当前的数据包转发率以及从系统中读取到预设的包转发率阈值后,在二者之间进行大小比较,从而确定出当前的数据包转发率是否大于所述包转发率阈值。

在S103中,若当前的包转发率未超过预设阈值,则所述第一服务器将所述N个访问请求分别分发至一台或多台网页服务器。

若当前的包转发率尚未超出预设阈值,则表示当前时刻并发的数据包总量仍属于正常的范围之内,因此,对每个数据包对应的访问请求进行正常处理,即,通过负载分担技术,将此时接收到的访问请求分配至集群中的网页服务器,以使负责均衡服务器根据数据包中请求的内容做出响应。

本实施例中,第一服务器依照每台网页服务器的权重,将当前时刻所受到的访问请求的数据依照权重比例分配到不同的网页服务器中。若集群中只有一台网页服务器的权重为非零值,则将所有访问请求均分发到该网页服务器。

特别地,第一服务器还可以依照其他负载分担规则分配所述N个访问请求,包括依照轮询次序、当前时刻每台网页服务器的流量比例、应用类别或任意分配等负载分担规则。

在S104中,若当前的包转发率超过预设阈值,则所述第一服务器将M个所述访问请求转发至第二服务器,以使所述第二服务器基于网页状态码分别对所述M个访问请求进行响应。

若当前的包转发率已超出预设阈值,则表示当前时刻并发的数据包总量已不在正常的范围之内,因此,为了避免过多的访问请求会拥堵在提供正常服务的网页服务器中,将N个访问请求中的大部分请求转发至集群中的第二服务器,即,将M个访问请求转发至第二服务器。其中,上述M小于等于N。优选地,且M为整数。

在该集群中,第二服务器称为流量黑洞服务器,其无法根据访问请求中的查询字符串信息来返回正常的查询结果,仅用于对访问请求作出固定形式的响应。该固定形式为标准回应信息,即http状态码(网页状态码)。例如,“HTTP404”或“Not Found”等http状态码信息。

当M个访问请求的流量转移到第二服务器时,第二服务器能够以最小的代价将这些流量“处理掉”。针对访问请求中携带的不同URL(Uniform Resoure Locator,统一资源定位符),第二服务器可以应用相同或不同的处理规则。例如,对于URL为“/api/v2”的访问请求,以“HTTP 404”状态码作为响应;而对应URL为“/api/v3”的访问请求,则以“Not Found”状态码作为响应。

由于http状态码为的数据包较小,因此,在流量洪峰的时刻,能够以较快的速度响应,从而“消除”过多的访问请求数据包。

本发明实施例中,通过第一服务器来接收来自于客户端的访问请求,即时第一服务器在某个瞬间遭遇到了大量的http请求,也能够自动识别出该异常状况并将部分访问请求转发至第二服务器。由于第二服务器能够基于长度较短的网页状态码来快速响应所述访问请求,因此,避免了网页服务器中会产生连接请求长时间拥堵的状况,在保证服务器高可用性的同时,提高了整个通信系统的稳定性。

作为本发明的另一个实施例,如图2所示,上述S102具体如下:

在S201中,当检测到所述访问请求为异常请求时,所述第一服务器将所述访问请求转发至第二服务器,以使所述第二服务器基于网页状态码对所述访问请求进行响应。

接收到客户端发送过来的访问请求后,第一服务器判断该访问请求的数据包是否异常。例如,对访问请求的客户端来源IP进行匹配识别,若所述IP在第一服务器预设的黑名单IP地址段之内,则表示所述访问请求为异常请求;对数据包中的特定字段值、参数类型或参数值进行校验,若存在异常值,则表示所述访问请求为异常请求。

对于任意一个访问请求,当检测到该请求为异常请求时,表示其潜在有安全威胁,极大可能是恶意攻击请求,因此,为了避免网页服务器对该恶意访问请求进行无效的响应,影响正常访问请求的处理速度,第一服务器直接将该访问请求转发至第二服务器,以使第二服务器以极短消息的形式对其进行响应。

在S202中,当检测到所述访问请求为正常请求时,所述第一服务器判断当前的包转发率是否超过预设阈值。

例如,对访问请求的客户端来源IP进行匹配识别,若所述IP不在第一服务器预设的黑名单IP地址段之内,则表示所述访问请求为正常请求;对数据包中的特定字段值、参数类型或参数值进行校验,若不存在异常值,则表示所述访问请求为正常请求。

对于任意一个访问请求,当检测到该请求为正常请求时,表示其可能是普通访客发出的请求,因此,为了更进一步地对该访问请求进行识别,以寻求最佳的响应方式,第一服务器再判断当前的包转发率是否超过预设阈值。

本实施例中未提到的步骤原理与上述实施例中各步骤的实现原理均相同,因此不一一赘述。

本发明实施例提供的负载均衡方法可以很好地被应用于访问请求并发数不多,但仍为恶意攻击的场景之下。若访问请求的数量不多,但是在识别出其为恶意请求时,可以有效地避免响应资源浪费的情况发生,从而提高每台网页服务器的有效使用率。

图3示出了本发明又一实施例提供的负载均衡方法的实现流程,在本实施例中,上述S102具体为:

在S301中,当检测到所述集群中各台所述网页服务器均处于异常状态时,所述第一服务器将所述N个访问请求转发至第二服务器,以使所述第二服务器基于网页状态码分别对所述N个访问请求进行响应。

第一服务器持续监控服务池中网页服务器的运行状态,因此,在接收到客户端发送过来的访问请求后,能够实时判断出当前时刻的各台网页服务器是否均处于异常状态。

例如,第一服务器持续向后端的网页服务器发送健康检查包,若在预设的时间间隔内,有连续的K个健康检查包均没有得到响应,或响应的时间超过了预设时间值,则第一服务器判断该台网页服务器处于异常状态,其中,K为预设的数值。

当第一服务器检测出当前集群中的所有网页服务器都出现了异常状态,表示无法处理任何访问请求,系统管理员应当对网页服务器进行故障排查或重启,因此,为了避免故障处理后或重启后的网页服务器中拥挤了大量的访问请求,再次导致异常状态出现,第一服务器直接将此时的所有访问请求都转发至第二服务器,以使第二服务器以极短消息的形式对其进行响应。

在S302中,当检测到所述集群中的任意所述网页服务器处于正常状态时,所述第一服务器判断当前的包转发率是否超过预设阈值。

当第一服务器检测出当前集群中的仍有网页服务器处于正常状态时,针对接收到的每个访问请求,为了更进一步地寻求最佳的响应方式,第一服务器再判断当前的包转发率是否超过预设阈值。

特别地,当第一服务器检测出某台网页服务器出现异常时,将其自动剔除出地址池。仅在检测出该台网页服务器恢复正常后,才将其重新加入服务池里,以继续处理正常分配的访问请求。

本实施例中未提到的步骤原理与上述实施例中各步骤的实现原理均相同,因此不一一赘述。

作为本发明的一个实施例,图4示出了本发明实施例提供的负载均衡方法S104的具体实现流程,详述如下:

在S401中,所述第一服务器调整负载配置文件中所述第二服务器的权重,以使所述第二服务器的权重大于所述集群中各台所述网页服务器的权重。

第一服务器的内部存储有负载均衡配置文件,所述文件可以是一个权重列表或纯文本类型的配置文件。该负载均衡配置文件中有各台网页服务器以及第二服务器对应的权重值,默认状态下各台网页服务器的权重均为1,第二服务器的权重为0。

若当前的包转发率超过预设阈值,则所述第一服务器依照系统管理员的输入或自动将第二服务器的权重进行调整,使第二服务器的权重大于其余各台网页服务器的权重。例如,在网页服务器的权重为1的情况下,将第二服务器的权重从0调整为5。

在S402中,所述第一服务器根据所述第二服务器的权重,将M个所述访问请求转发至所述第二服务器。

第一服务器根据第二服务器的权重,计算其在总权重中所占的权重比例,从而将N个访问请求中,满足该权重比例的M个访问请求转发至第二服务器。

例如,若集群中有2台网页服务器的权重为1,1台流量黑洞服务器的权重为5,则流量黑洞服务器的权重比例为5/7,因此,每7个数据包中将有5个数据包会被转发至流量黑洞服务器,以使所述流量黑洞服务器基于网页状态码分别对这5个数据包对应的访问请求进行响应。

特别地,在一个集群中,第二服务器为一台或多台。当第二服务器为多台时,第一服务器调整负载配置文件中所有第二服务器的权重,以使每台第二服务器的权重都大于集群中每台网页服务器的权重。

作为本发明的一个实施例,所述第一服务器为nginx服务器。

当第一服务器为nginx服务器时,在其nginx.conf文件中,创建一个upstream组,并在组内加入各个web(网页)服务器的IP以及每台web服务器对应的权重。在本实施例中,web服务器即为所述网页服务器。在配置了nginx第一服务器的反向代理功能后,启动nginx服务。第一服务器经由网络与网页服务器以及第二服务器相连。

特别地,在nginx第二服务器中,可以加入lua脚本,用以自动记录访问请求的日志,包括访问时间以及来源IP、数据包属性等日志信息。

本实施例利用nginx服务器来作为第一服务器和/或第二服务器,基于nginx的轻量级特性,nginx第二服务器在处理访问请求时,能够占用更少的内存资源,在高并发连接的情况下,nginx第二服务器具有较低的消耗,因此,增强了整个负载均衡系统抵御流量洪峰的能力,从而也增强了系统的稳定性。通过对第二服务器中的访问请求进行记录,能够为管理员提供日志记录,从而排查出异常访问请求的原因,并加强应对,避免后续再次遇到相同的访问攻击。

图5是本发明实施例提供的负载均衡方法所适用的系统架构图,为了便于说明,仅示出了与本实施例相关的部分。

参照图5,该系统由第一服务器51、多个网页服务器52、多个第二服务器53和客户端54组成。其中,第一服务器51用于接收客户端54发出的多个访问请求,并在检测到当前的包转发率超过预设阈值时,依照配置文件中第二服务器53的权重,将大部分的访问请求转发至第二服务器53;若检测到当前的包转发率未超过预设阈值时,则第一服务器51将访问请求分发至网页服务器52。其中,第一服务器51、网页服务器52和第二服务器53组成一个负载均衡系统,三者属于同一集群。

客户端54是用于为用户提供本地服务的智能设备,进一步地,是指搭载了智能操作系统且具有网络接入功能的设备,包括但不限于智能手机、智能手表、笔记本、平板电脑、甚至包括车载电脑。每个客户端54作为请求端,向第一服务器51提交访问请求,并将第一服务器51返回的结果展示给用户。

网页服务器52可以为web服务器,用于提供正常对外的web服务。当接收到第一服务器51分配过来的访问请求时,能够获取用户所需的请求结果,并返回至第一服务器51,以使第一服务器51将请求结果反馈至客户端54。

第二服务器53用于对每个访问请求作出简短的响应。即,以http状态码的方式对第一服务器51转发过来的访问请求进行快速处理。

本发明实施例中,通过第一服务器来接收来自于客户端的访问请求,即时第一服务器在某个瞬间遭遇到了大量的http请求,也能够自动识别出该异常状况并将部分访问请求转发至第二服务器。由于第二服务器能够基于长度较短的网页状态码来快速响应所述访问请求,因此,避免了网页服务器中会产生连接请求长时间拥堵的状况,在保证服务器高可用性的同时,提高了整个通信系统的稳定性。

应理解,在本发明实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。

对应于本发明实施例所提供的负载均衡方法,图6示出了本发明实施例提供的服务器的结构框图,用于实现上述各个实施例中第一服务器的功能。为了便于说明,仅示出了与本实施例相关的部分。

参照图6,该服务器包括:

接收单元61,用于接收客户端发出的N个访问请求。

判断单元62,用于判断当前的包转发率是否超过预设阈值。

转发单元63,用于若当前的包转发率未超过预设阈值,则将所述N个访问请求分别分发至一台或多台网页服务器;

若当前的包转发率超过预设阈值,则将M个所述访问请求转发至第二服务器,以使所述第二服务器基于网页状态码分别对所述M个访问请求进行响应。

其中,所述服务器、所述网页服务器与所述第二服务器属于同一集群,所述M和N为整数,所述M小于等于N。

进一步地,所述判断单元62包括:

第一转发子单元,用于当检测到所述访问请求为异常请求时,将所述访问请求转发至第二服务器,以使所述第二服务器基于网页状态码对所述访问请求进行响应。

第一判断子单元,用于当检测到所述访问请求为正常请求时,判断当前的包转发率是否超过预设阈值。

进一步地,所述判断单元62包括:

第二转发子单元,用于当检测到所述集群中各台所述网页服务器均处于异常状态时,将所述N个访问请求转发至第二服务器,以使所述第二服务器基于网页状态码分别对所述N个访问请求进行响应。

第二判断子单元,用于当检测到所述集群中的任一所述网页服务器处于正常状态时,判断当前的包转发率是否超过预设阈值。

进一步地,所述转发单元63包括:

调整子单元,用于调整负载配置文件中所述第二服务器的权重,以使所述第二服务器的权重大于所述集群中各台所述网页服务器的权重。

第三转发子单元,用于根据所述第二服务器的权重,将M个所述访问请求转发至所述第二服务器。

进一步地,所述服务器为nginx服务器。

本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。

所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1