美文网首页
2020-08-30_负载均衡的几种算法分析与实战

2020-08-30_负载均衡的几种算法分析与实战

作者: kikop | 来源:发表于2020-08-30 15:37 被阅读0次

负载均衡的几种算法分析与实战

1概述

在SpringCloud构建的微服务系统中,Ribbon作为服务消费者的负载均衡器,有两种使用方式,一种是和RestTemplate结合,另一种是和Feign结合。Feign默认集成了Ribbon。

1.1 负载均衡器的核心类LoadBalancerClient

spring-cloud-commons-2.1.0.RELEASE.jar

org.springframework.cloud.client.loadbalancer.LoadBalancerClient

ServiceInstance choose(String serviceId);

RibbonLoadBalancerClient是LoadBalancerClient最终实现类。

image.png

图 1


public interface ServiceInstanceChooser {

    /**

     * Chooses a ServiceInstance from the LoadBalancer for the specified service.

     * @param serviceId The service ID to look up the LoadBalancer.

     * @return A ServiceInstance that matches the serviceId.

     */

    ServiceInstance choose(String serviceId);

}

image.png

图 2

1.1.1 ILoadBalancer

image.png

图 3

image.png

图 4

1.1.2 DynamicServerListLoadBalancer

继承BaseLoadBalancer,其中BaseLoadBalancer默认的负载均衡配置:

private final static IRule DEFAULT_RULE = new RoundRobinRule();

这里IRule用于配置负载均衡的策略。其它的配置还有:

IClientConfig ribbonClientConfig:DefaultClientConfigImpl

IPing ribbonPing:DummyPing

ServerList ribbonServerList:ConfigurationBasedServerList

ServerListFilter ribbonServerListFilter:ZonePerferenceServerListFilter

ILoadBalancer ribbonLoadBalancer:ZoneAwareLoadBalancer

IRule ribbonRule:RoundRobinRule

1.1.2.1 IRule


public interface IRule{

    /*

     * choose one alive server from lb.allServers or

     * lb.upServers according to key

     *

     * @return choosen Server object. NULL is returned if none

     *  server is available

     */

    public Server choose(Object key);

    public void setLoadBalancer(ILoadBalancer lb);

    public ILoadBalancer getLoadBalancer();    

}

IRule默认的实现类有如下7种。

image.png

图 5

BestAvailableRule:选择最小请求数

ClientConfigEnabledRoundRobinRule:轮询

RandomRule:随机选择一个server

RoundRobinRule:轮询选择一个server(clound默认方式)

RetryRule:根据轮询的方式重试

WeightedResponseTimeRule:根据相应时间分配weight,weight越低,被选择的可能性越低

ZoneAvoidanceRule:根据server的zone区域和可用性来轮询选择

参考

1 深入理解Spring Cloud与微服务构建(2th)方志明

相关文章

网友评论

      本文标题:2020-08-30_负载均衡的几种算法分析与实战

      本文链接:https://www.haomeiwen.com/subject/dldesktx.html