负载均衡的作用是将用户请求分发给不同的服务实例,既可以提高系统的吞吐量,也可以避免因为单一服务实例宕机导致整个系统不可用的情况。

负载均衡算法定义了如何将请求分散到服务实例的规则,优秀的负载均衡算法能够有效提高系统的吞吐量,使服务集群中各服务的负载处于高效稳定的状态。常见的负载均衡算法如下:

1.随机法

      该算法是随机从可用服务列表中选取一个服务实例来分发请求。它的实现非常h简单,一定程度上保证了请求的分散性,但是无法顾及请求分配是否与服务实例的负载能力相符合

 

2.轮询法或者加权轮询法

        该算法将请求轮流分配给现有可用服务列表中的每一个服务实例,轮询法适用于集群中服务中服务实例的负载能力大致相同且请求处理能力差异不大的场景。加权轮询法会根据各个服务实例的权重,额外分配给权重较大者相适应的更多请求。

 

3.Hash法或一致Hash法

       该算法根据请求的某些属性(比如userId),使用Hash算法将其分散到不同服务实例中,这样保证了相同属性的请求会被转发到相同的服务实例中,可以更好地利用缓存,提高系统的整体性能。改进的一致性Hash算法则基于虚拟节点,在某一个服务实例宕机或不可用后能将其请求平摊到其他服务节点,避免请求分发的目标实例发生剧烈的变化,影响系统的整体处理性能。

 

4.最小连接数法

       该算法将请求分配到当前可用服务列表中正在处理最少请求的服务实例上。该算法需要负载均衡器和各个服务实例之间进行一定量的信息交互,负载均衡器还需要了解集群中各个服务的负载情况。

 

 

负载均衡实现

可参考Dubbo负载均衡的实现进行学习:https://dubbo.apache.org/zh/docs/v2.7/dev/source/loadbalance/#m-zhdocsv27devsourceloadbalance

 

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐