负载均衡流程
1.发起请求
- 获取url的服务id
3.拉取服务
4.返回服务列表,如localhost:8081、loclahost:8082
-
服务负载均衡
-
选择某个服务
-
修改url,发起请求
8.轮询到8081
策略
修改方法
方法一:
在application。java文件中添加方法
@Bean
public IRule randomRule(){
return new RandomRule();
}
例如:
java
package cn.itcast.order;
import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RandomRule;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;
@MapperScan("cn.itcast.order.mapper")
@SpringBootApplication
public class OrderApplication {
public static void main(String[] args) {
SpringApplication.run(OrderApplication.class, args);
}
/**
* Spring Boot中使用RestTemplate,我们通常需要注入它。我们可以通过使用@Bean注解来实现。
*/
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
@Bean
public IRule randomRule(){
return new RandomRule();
}
}
方法二
在xml文件中添加
java
userservice:
ribbon:
NFLoadBalancerRuLeCLassName: com.netflix.Loadbalancer.RandomRule
轮询(RoundRobinRule)
简单轮询服务列表来选择服务器。它是Ribbon默认的负载均衡规则。
随机(RandomRule)
随机选择一个可用的服务器。
AvailabilityFilteringRule
对以下两种服务器进行忽略:
(1)在默认情况下,这台服务器如果3次连接失败,这台服务器就会被设置为"短路"状态。短路状态将持续30秒,如果再次连接失败,短路的持续时间就会几何级地增加。
(2)并发数过高的服务器。如果一个服务器的并发连接数过高,配置了AvailabilityFilteringRule规则的客户端也会将其忽略。并发连接数的上限,可以由客户端的
<clientName>.<clientConfigNameSpace>.Active ConnectionsLimit.
WeightedResponseTimeRule
为每一个服务器赋予一个权重值。服务器响应时间越长,这个服务器的权重就越小。这个规则会随机选择服务器,这个权重值会影响服务器的选择。
ZoneAvoidanceRule
以区域可用的服务器为基础进行服务器的选择。使用Zone对服务器进行分类,这个Zone可以理解为一个机房、一个机架等。而后再对Zone内的多个服务做轮询。
BestAvailableRule
忽略哪些短路的服务器,并选择并发数较低的服务器。
RetryRule
重试机制的选择逻辑
饥饿加载
饥饿加载则会在项目启动时创建,降低第一次访问的耗时,通过下面配置开启饥饿加载:
java
ribbon:
eager-load:
clients: userservice
enabled: true