几种负载均衡算法
负载均衡在大规模Web系统中是常采用的技术,以实现高可用和高并发等目标。
负载均衡可以从硬件和软件层次来实现,硬件层次实现的负载均衡性能高,配置少,但是相比于软件实现的来说灵活性不够高,另外价格经济成本也很高,软件层次实现的负载均衡性能比硬件层次低,配置较多,但是使用很灵活。
软件层次的负载均衡常见的就是:
- Haproxy
- Nginx
- LVS
其中Nginx是7层负载均衡,其他两个是4层负载均衡,除此之外Nginx主要的功能是作为一个高性能的Web服务器。
负载均衡是将请求通过一定的转发策略转发到集群中的某一台机器,这里提到的转发策略便是负载均衡的算法。
常见的负载均衡的算法有如下几种:
轮询
将请求按顺序轮流地分配到后端服务器上,它均衡地对待后端的每一台服务器,而不关心服务器实际的连接数和当前的系统负载。加权轮询法
不同的后端服务器可能机器的配置和当前系统的负载并不相同,因此它们的抗压能力也不相同。给配置高、负载低的机器配置更高的权重,让其处理更多的请;而配置低、负载高的机器,给其分配较低的权重,降低其系统负载,加权轮询能很好地处理这一问题,并将请求顺序且按照权重分配到后端。
随机法
通过系统的随机算法,根据后端服务器的列表大小值来随机选取其中的一台服务器进行访问。由概率统计理论可以得知,随着客户端调用服务端的次数增多,
其实际效果越来越接近于平均分配调用量到后端的每一台服务器,也就是轮询的结果。
加权随机法
与加权轮询法一样,加权随机法也根据后端机器的配置,系统的负载分配不同的权重。不同的是,它是按照权重随机请求后端服务器,而非顺序。
一致性哈希
将源地址通过哈希函数计算一个哈希值,通过一致性哈希算法将其对应到某台机器上。
同一IP地址的客户端,当后端服务器机器数量不变时,它每次都会映射到同一台后端服务器进行访问。
这种负载均衡算法常常运用cache服务器集群,能保证不同的机器上不会存储重复的cache内容。
同时由于能够保证每个相同的请求能对应到相同的主机,因此也可以作存储Session集群。最小连接数法
最小连接数算法比较灵活和智能,由于后端服务器的配置不尽相同,对于请求的处理有快有慢,它是根据后端服务器当前的连接情况,动态地选取其中当前积压连接数最少的一台服务器来处理当前的请求,尽可能地提高后端服务的利用效率,将负责合理地分流到每一台服务器。