负载均衡算法有多种常用分类,以下是详细的介绍:
1、轮询法
描述:将请求按顺序轮流地分配到每个节点上,不关心每个节点实际的连接数和当前的系统负载。
优点:简单高效,易于水平扩展,每个节点满足字面意义上的均衡。
缺点:没有考虑机器的性能问题,根据木桶最短木板理论,集群性能瓶颈更多的会受性能差的服务器影响。
2、随机法
描述:将请求随机分配到各个节点,由概率统计理论得知,随着客户端调用服务端的次数增多,其实际效果越来越接近于平均分配,也就是轮询的结果。
优点:实现简单,适用于请求量相对均匀的场景。
缺点:可能导致某些节点负载过高,而其他节点负载较低。
3、源地址哈希法
描述:根据客户端的IP地址,通过哈希函数计算得到一个数值,用该数值对服务器节点数进行取模,得到的结果便是要访问节点序号,采用源地址哈希法进行负载均衡,同一IP地址的客户端,当后端服务器列表不变时,它每次都会落到到同一台服务器进行访问。
优点:相同的IP每次落在同一个节点,可以人为干预客户端请求方向,例如灰度发布。
缺点:如果某个节点出现故障,会导致这个节点上的客户端无法使用,无法保证高可用,当某一用户成为热点用户,那么会有巨大的流量涌向这个节点,导致冷热分布不均衡,无法有效利用起集群的性能,所以当热点事件出现时,一般会将源地址哈希法切换成轮询法。
4、加权轮询法
描述:不同的后端服务器可能机器的配置和当前系统的负载并不相同,因此它们的抗压能力也不相同,给配置高、负载低的机器配置更高的权重,让其处理更多的请;而配置低、负载高的机器,给其分配较低的权重,降低其系统负载,加权轮询能很好地处理这一问题,并将请求顺序且按照权重分配到后端。
优点:可以将不同机器的性能问题纳入到考量范围,集群性能最优最大化。
缺点:生产环境复杂多变,服务器抗压能力也无法精确估算,静态算法导致无法实时动态调整节点权重,只能粗糙优化。
5、加权随机法
描述:与加权轮询法一样,加权随机法也根据后端机器的配置,系统的负载分配不同的权重,不同的是,它是按照权重随机请求后端服务器,而非顺序。
优点:能够更灵活地处理不同权重的服务器。
缺点:实现复杂度较高。
6、键值范围法
描述:根据键的范围进行负债,比如0到10万的用户请求走第一个节点服务器,10万到20万的用户请求走第二个节点服务器……以此类推。
优点:容易水平扩展,随着用户量增加,可以增加节点而不影响旧数据。
缺点:容易负债不均衡,比如新注册的用户活跃度高,旧用户活跃度低,那么压力就全在新增的服务节点上,旧服务节点性能浪费,而且也容易单点故障,无法满足高可用。
7、最小连接数法
描述:根据每个节点当前的连接情况,动态地选取其中当前积压连接数最少的一个节点处理当前请求,尽可能地提高后端服务的利用效率,将请求合理地分流到每一台服务器,俗称闲的人不能闲着,大家一起动起来。
优点:动态,根据节点状况实时变化。
缺点:提高了复杂度,每次连接断开需要进行计数。
8、最快响应速度法
描述:根据请求的响应时间,来动态调整每个节点的权重,将响应速度快的服务节点分配更多的请求,响应速度慢的服务节点分配更少的请求,俗称能者多劳,扶贫救弱。
优点:动态,实时变化,控制的粒度更细,跟灵敏。
缺点:复杂度更高,每次需要计算请求的响应速度。
9、观察模式法
描述:观察者模式是综合了最小连接数和最快响应度,同时考量这两个指标数,进行一个权重的分配。
优点:综合多种因素,更加灵活。
缺点:实现复杂度较高。
相关问题与解答
问题1: 什么是轮询法?
答案1: 轮询法是一种负载均衡算法,它将请求按顺序轮流地分配到每个节点上,不关心每个节点实际的连接数和当前的系统负载,这种方法简单高效,易于水平扩展,但可能会受到性能较差的服务器的影响。
问题2: 加权轮询法有什么优点和缺点?
答案2: 加权轮询法的优点是可以纳入不同机器的性能问题,使得集群性能最优最大化,它的缺点在于生产环境复杂多变,服务器抗压能力也无法精确估算,静态算法导致无法实时动态调整节点权重,只能粗糙优化。
小伙伴们,上文介绍了“负载均衡算法有哪些常用分类”的内容,你了解清楚吗?希望对你有所帮助,任何问题可以给我留言,让我们下期再见吧。