负载均衡 Ribbon

1、restTemplate 是 Spring Resources 中一个访问第三方 API 接口的网络请求框架,用来消费REST 服务的

2、ribbon 作为服务消费者的负载均衡器,有两种使用 方式

1)ribbon和restTemplate 相结合

2)ribbon和feign相结合,feign已经默认集成了 ribbon

3、负载均衡器的核心类LoadBalancerClient

LoadBalancerClient 的 choose(”eureka-client'’)方法可以轮流得到 eureka-client 的两个 服务实例的信息。

@Autowired

private LoadBalancerClient loadBalancer;

@GetMapping (”/ testRibbon”)

public String testRibbon () {

Serviceinstance instance = loadBalancer.choose (”eureka client");

return instance . getHost ()+”:”+i nstance . getPor t ();

}

}

4、ribbon获取服务来源

1)从 Eureka Client获取获取服务的实例列表

ribbon会默认从 Eureka Client 的服务注册列表中获取服务的信息,并缓存一份。

根据缓存的服务注册列表信息,可以通过 LoadBalancerClient 来选择不同的服务实例, 从而实现负载均衡

 

2)从自己维护的列表中获取服务的实例

如果禁止 ribbon从 Eureka 获取注册列表信息,则需要自己去维护一份服 务注册列表信息

stores :

ribbon:

listOfServers : exarnple . corn, google. corn

ribbon :

eureka :

enabled: false

5、ribbon源码

1)ServiceInstanceChooser ---->ServiceInstance choose(String serviceId);

2)RibbonLoadBalancerClient----->ServiceInstance choose(String serviceId)---->Server getServer(ILoadBalancer loadBalancer)

3)ILoadBalancer---->Server chooseServer(Object var1)

4)DynamicServerListLoadBalancer---->Server chooseServer(Object var1)

5)IRule ------> Server choose(Object key)

BestAvailableRule: 选择最小请求数。

ClientConfigEnabledRoundRobinRule:轮询。

RandornRule: 随机选择一个 server。

RoundRobinRule: 轮询选择 server。

ReRule: 根据轮询的方式重试。

WeightedResponseTirneRule: 根据响应时间去分配一个 weight , weight 越低,被选 择的可能性就越低。

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

6、 ribbon 的负载均衡主要是通过 LoadBalancerClient 来实现的,而 LoadBalancerClient 具体交给了 ILoadBalancer 来处理, ILoadBalancer 通过配置 !Rule、 !Ping 等,向 EurekaClient 获取注册列表的信息,默认每 10 秒向 EurekaClient 发送一次“ping”, 进而检查是否需要更新 服务的注册列表信息。最后,在得到服务注册列表信息后, ILoadBalancer 根据!Rule 的策略进 行负载均衡。 而 RestTemplate 加上@LoadBalance 注解后,在远程调度时能够负载均衡, 主要是维护了 一个被@LoadBalance 注解的 RestTemplate 列表,并给该列表中的 RestTemplate 对象添加了拦 截器。在拦截器的方法中,将远程调度方法交给了 Ribbon 的负载均衡器 LoadBalancerClient 去处理,从而达到了负载均衡的目

 

转载于:https://my.oschina.net/u/2610056/blog/3060905

你可能感兴趣的:(java)