服务重要的属性之一是负载均衡策略。分布式服务框架通常会提供多种负载均衡策略,同时支持用户扩展负载均衡策略。那么,负载均衡策略有哪些呢?
一、随机
采用随机算法进行负载均衡,通常在对等集群组网中,随机路由算法消息分发还是比较均匀的,但是存在两个主要缺点:一是在同一截面上碰撞的概率较高;二是非对等集群组网,或者硬件配置差异较大时,会导致各节点负载不均匀。
通常会采用java.util.Random或java.security.SecureRandom在指定服务提供者地址列表中生成随机地址,消费者基于随机生成的服务提供者地址进行远程调用。
二、轮询
轮询,按公约后的权重设置轮询比率,到达边界之后,继续绕接。它的主要缺点是,如果其中一个阶段很慢,请求就会卡住,不断发生的请求将都积累在这一阶段。
轮询策略的实现非常简单,它的原理就是按照权重,顺序循环遍历服务提供者列表,到达上限后重新归零,继续顺序循环。
三、服务调用时延
消费者缓存所有服务提供者的服务调用时延,周期性的计算服务调用平均时延,然后计算每个服务提供者服务调用时延与平均时延的差值,根据差值的大小动态调整权重,保证服务时延大的服务提供者接收更少的消息,防止消息堆积。 该策略的特点就是要保证处理能力强的服务提供者接收到更多的消息,通过动态自动调整权重消除服务调用时延的震荡范围,使所有服务提供者服务调用时延接近平均值,实现负载均衡。
四、粘滞连接
粘滞连接用于有状态服务,尽可能让客户端总是向统一提供者发起服务调用,除非该提供者宕机,再连接另一台。由于服务通常被强烈建议设计成无状态的,因此,粘滞连接在实际项目中很少使用。
粘滞连接的实现比较简单,客户端首次跟服务端创建链路时,将该链路标记为粘滞连接,每次路由时,直接选择粘滞连接,不执行负载均衡路由接口。当链路中断时,更新粘滞连接为不可用,重新寻找下一个可用的连接,将其标记为粘滞连接。
原创文章,作者:夜风博客,如若转载,请注明出处:https://www.homedt.net/19004.html