第一天 d:
Ribbon负载均衡:
Ribbon的工作流程是什么呢?
按照一下图中运行:
1.先发送了请求到RibbonLoadBalancedClient中。
2.再痛过获取到的url中的地址id,传送到了DynamicServerListLoadBalanced中。
3.这时 Eureka server 获取到了请求。
4.这时也会返回到服务对象,返回到了DynamicServerListLoadBalanced。
5.这时,返回的服务负载回到了IRule中,从而进行了负载均衡,选择出了其中之一的服务接口
6.选出了其中之一的服务接口,回到了 RibbonLoadBalancedClient。
7.这是就会把url进行了修改从而变了一个地址。
8.最后对那个地址进行了发送请求。
在Ribbon负载均衡的规则,是IRule。那么它是有哪些规则呢?
在这里面RandomRule:是一个随机规则,而ZoneAvoidanceRule:是一个默认值规则。(因为在ClientConfigEnableRoundRule 中有轮询规则)
这里有比较详细的几个规则。
所以如何修改负载均衡的规则:
这里有两个方法:
1.在application中注入一个IRule的Bean。(是在消费端的application),这是一种全局部署。
@Bean
public IRule RandomRule(){
return new RandomRule();
}
2.在消费端的application.yml 也加入了新的配置。
userservice:#提供端的服务名
ribbon:
NFLoadBalancerRuleClassName:com.netflix.loadbalancer.RandomRlue #负载均衡
第二种方法是可以用于特定服务的,不同于第一种的全局部署。
接下来,介绍一下饥俄加载:
因为在Ribbon中采用的是懒加载,所以在第一次访问LoadBalanceClient,从而导致第一次的请求时间会很长,而饥俄加载则会在项目启动时,进行预热,降低第一次访问的时间消耗。
所以以下的饥饿加载可以解决这个问题。
ribbon:
eager-load:
enable:true #饥饿加载
clients:userservice #对于指定的服务进行饥饿加载。