网站负载均衡的原理以及算法介绍

  “负载”在这里是指网站访问处理负载和服务器网络带宽负载。如果有多个网站服务器组成一个集群,则需要有一种方法来在服务器集群中分担负载。该方法可实现节点间的动态负载分配,并可按照每个节点的可用资源而进行性能资源分配改变。在现有的负载均衡方法中,通常采取轮询法、随机法和源地址散列法,对其进行了改进,分别得到了加权轮询法和加权随机法。查询方法:这是最简单的查询方式。指令系统需要从客户机向集群中的服务器依次分配请求,并对每个服务器一视同仁。如果某个服务器发生故障,则从顺序队列中移除该服务器,而不参与下一轮的轮询。但这样做会忽略请求的不同。一些请求很快就结束了,另一些则需要相当长的时间,因此,尽管是平均分布的,实际的服务器连接数和系统负载还是有很大差别。

图怪兽_50d74b6dbff719bf9770140f8bf1cc25_11268.png

有许多(持续和非持续)服务器负载平衡算法,包括轮循算法,最少连接算法,响应时间算法,哈希算法,最少连接错误算法,链路带宽算法等。另外,可以对实际服务器(RealServer)分配不同的加权值,以调整分配的流量。例如,性能高的大型服务器可以配置较大的加权值,而较小的加权值则用于性能低的小型服务器。为避免由于过载而导致服务器崩溃,可以为实际服务器指定最大连接阈值,以避免服务器过载。可以将任意服务器指定为其他服务器的备份服务器或溢出服务器,从而进一步保证应用程序的可用性。

不连续算法(Non-ssistent):

可以将来自客户机的不同请求分配到实际服务组中的不同实服务器上进行处理。包括轮循算法,最小连接算法,响应速度算法等。

轮循算法:

描述:

从网络发出的每次请求被轮流分配到内部的每个服务器,从1到N,然后重新开始。

举例来说:

此均衡算法适用于所有服务器在一个服务器组中具有相同的软硬件配置和平均服务请求的相对均衡;

最低连接算法(LeastConnection):

描述:

客户机的每次请求服务在服务器上的停留时间可能有很大的差别,如果采用简单轮循或随机均衡算法,随着工作时间的延长,每个服务器上的连接进程可能会有很大的差别,这样的结果并不能真正达到负载均衡。最小连接数均衡算法对每个具有内部负载的服务器都有一个数据记录,记录的内容是该服务器当前正在处理的连接数,当出现新的服务连接请求时,将向连接数最低的服务器分配当前请求,从而使均衡更符合实际,负载更均衡。

说明:这种均衡算法适用于长时间处理请求服务。

反应速度算法(反应时间):

描述:

负荷平衡装置向内部服务器发出探测请求(如Ping),然后根据内部服务器对探测请求的最快响应时间,决定由哪个服务器对客户机的服务请求作出响应。

举例来说:

这种均衡算法能够很好地反映服务器的当前运行状态,但是最快的响应时间只是指在负载均衡设备和服务器之间的响应时间最快,而非在客户端和服务器之间的响应时间。

持久性算法(sistent):

所有来自特定客户机的请求都被分配到同一个实服务器上的一个实服务组进行处理。包括:

基于IP协议的算法。

sistentIP(pi):根据用户IP地址选择服务器。

hashIP(hi):根据用户IP地址选择服务器的HASH值。

*ConsistentHashIP(chi):

基于Header/Request的算法。

-Hashyader(hh):在用户请求报的HTTP头文件中选择服务器;

sitehostname(ph):根据用户请求报中HTTP报头的Hostname的HASH值选择服务器;

sistentURL(pu):根据URITag和值的静态对应关系选择服务器。

-SSLSessionID(sslsid):可根据SSL会话标识选择服务器。

C.基于库基的算法

(c):选择服务器的静态对应关系,根据用户请求包使用CookyName/Valhead(静态对应);

-HashCookie(hc):根据用户请求,选择服务器与CookieName/Value的Hash值对应;

-InsertCookie(ic):选择服务器将Cookie插入到服务器响应包中的负载均衡器;

-Re-writeCookie(rc):选择服务器基于负载均衡器将cookie值覆盖到服务器响应包中。

(Cookie值的偏移必须指定为重写)

基本的负载平衡算法。

均衡算法设计的优劣直接影响集群负载均衡的表现,而设计不好的算法,则会造成集群负载失衡。常规均衡算法的主要任务是确定如何选择下一个集群节点并向其转发新的服务请求。一些简单的平衡方法可以单独使用,而一些必须与其他简单或高级方法结合使用。而且一种好的负载均衡算法也不是万能的,它通常只是在一些特殊的应用环境中才能达到最大的性能。所以在研究负载均衡算法时,还应注意算法本身的适用范围,在采用集群部署时,应根据集群自身的特点综合考虑,将各种算法和技术相结合。

分享: