Load Balance

Published: 15 Mar 2017 Category: arch

1、 负载均衡

Health checks

  1. server 主动,就是轮询。
  2. client 主动,采用心跳机制。

    客户端定时来访问服务端,更新自己的当前状态,如果客户端超过指定的时间没有来更新状态,则认为客户端已经宕机或者其状态异常。

一般采用心跳机制,一是避免服务端的压力,二是灵活好控制。

2. 算法

2.1 Round-robin (轮询)

Round-robin scheduling is simple, easy to implement, and starvation-free.

 将请求按顺序轮流地分配到后端服务器上,它均衡地对待后端的每一台服务器,而不关心服务器实际的连接数和当前的系统负载。

2.2 Least-connected (最少连接)

最小连接数算法比较灵活和智能,由于后端服务器的配置不尽相同,对于请求的处理有快有慢。

它是根据后端服务器当前的连接情况,动态地选取其中当前积压连接数最少的一台服务器来处理当前的请求,尽可能地提高后端服务的利用效率,将负载合理地分流到每一台服务器。

2.3 ip-hash (哈希)

前面两种算法会出现同一个用户前后两次连接分散到不同的server上,这样就不太好保存Session了。

采用源地址哈希法进行负载均衡,同一IP地址的客户端,当后端服务器列表不变时,它每次都会映射到同一台后端服务器进行访问。

2.4 Random (随机)

通过系统的随机算法,根据后端服务器的列表大小值来随机选取其中的一台服务器进行访问。

由概率统计理论可以得知,随着客户端调用服务端的次数增多,其实际效果越来越接近于平均分配调用量到后端的每一台服务器,也就是轮询的结果。

2.5 Weighted round-robin (加权轮询)

不同的后端服务器可能机器的配置和当前系统的负载并不相同,因此它们的抗压能力也不相同。

给配置高、负载低的机器配置更高的权重,让其处理更多的请求;而配置低、负载高的机器,给其分配较低的权重,降低其系统负载,加权轮询能很好地处理这一问题,并将请求顺序且按照权重分配到后端。

2.6 Weighted random (加权随机)

按照权重随机请求后端服务器,而非顺序。