1.随机
采用随机算法进行负载均衡,通常在对等集群组网中,随机路由算法消息分发还是比较均匀的,但是存在两个主要缺点:
在一个截面上碰撞的概率较高
非对等集群组网,或者硬件配置差异较大,会导致各节点负载不均匀
2.轮询
轮询,按公约后的权重设置轮询比率,到达边界之后,继续绕接。他的主要缺点是存在慢的提供者累积请求问题。比如第二台机器很慢,但是没挂,当请求调到第二台时就卡在那,久而久之,所以请求都卡在调到第二台上。
轮询算法是最简单的一种负载均衡算法。它的原理是把来自用户的请求轮流分配给内部的服务器:从服务器1开始,直到服务器N,然后重新开始循环。
加权轮询策略的实现非常简单,他的原理就是按照权重,顺序循环遍历服务提供者列表,到达上限后重新归零,继续顺序循环。
3.服务调用时延
消费者缓存所有服务提供者的服务调用时延,周期性的计算服务调用平均时延,然后计算每个服务提供者服务调用时延与平均时延的差值,根据差值的大小动态调整权重,保证服务时延大的服务提供者接收更少的消息,防止消息堆积。 该策略的特点就是要保证处理能力强的服务提供者接收到更多的消息,通过动态自动调整权重消除服务调用时延的震荡范围,使所有服务提供者服务调用时延接近平均值,实现负载均衡。
4.一致性哈希
相同参数的请求总是发送到同一个服务提供者,当某一台服务提供者宕机时,原本发往该提供者的请求,基于虚拟节点,平摊到其他提供者,不会引起剧烈变动。平台提供默认的虚拟节点数,可以通过配置参数进行修改。
5.粘滞连接
粘滞连接用于有状态服务,尽可能让客户端总是向统一提供者发起服务调用,除非该提供者宕机,再连接另一台。由于服务通常被强烈建议设计成无状态的,因此,粘滞连接在实际项目中很少使用。
粘滞连接的实现比较简单,客户端首次跟服务端创建链路时,将该链路标记为粘滞连接,每次路由时,直接选择粘滞连接,不执行负载均衡路由接口。当链路中断时,更新粘滞连接为不可用,重新寻找下一个可用的连接,将其标记为粘滞连接。