三、Ribbon负载均衡
1、概述
基于Netflix ribbon实现的一套 ==客户端、负载均衡的工具==
重要功能是提供==客户端的软件负载均衡算法==,Ribbon客户端组件提供一系列的配置项如链接超时、重试等
官网资料:github:Netfix/Ribbon
常见的负载均衡:软件Nginx、LVS 硬件F5
2、Ribbon初步配置
1、修改consumer-80的配置
修改pom配置,增加相关引用
1
2
3
4
5
6
7
8
9
10
11
12
13<!--Ribbon相关引用,与eureka有关-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>修改application.yml ,追加Eureka的注册服务地址
1
2
3
4
5eureka:
client:
service-url:
defaultZone: eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka,http://eureka7003.com:7003/eureka
register-with-eureka: false主启动类中增加注解@EnableEurekaClient,
1
2
3
4
5
6
7
public class DeptConsumer80App {
public static void main(String[] args) {
SpringApplication.run(DeptConsumer80App.class,args);
}
}ConfigBean配置中增加@LoadBalance注解,开启客户端负载均衡
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class ConfigBean {
/**
* 配置RestTemplate
* 通过RestTemplate调用提供者服务 ,发送rest请求
* 提供了多种访问http服务的方法,
* 针对于访问rest服务<strong>客户端</strong>的调用的模板类
*/
//ribbon实现的一套 ==客户端、负载均衡的工具
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}修改客户端访问类80的controller,将地址改为微服务名称STUDY-SPRINGCLOUD-DEPT
1
2
3
4/**
* 注册再EurekaServer中的微服务名称
*/
private static final String REST_URL_PREFIX="http://STUDY-SPRINGCLOUD-DEPT";启动
先启动Eureka集群,然后启动8001服务注册进eureka,再启动80客户端
3、Ribbon负载均衡
1、架构说明
2、新建8002、8003服务提供者
复制8001的配置和类
yml配置中的实例名称application name不能改
3、总结
Ribbon其实就是一个软辅在均衡的客户端组件,他和其他所有需要请求的客户端结合使用,和Eureka结合只是其中的一个实例。默认采用轮询算法。
4、Ribbon核心组件IRule
IRule:根据特定算法中从服务列表中选取一个要访问的服务
Ribbon采用的负载均衡算法:
com.netflix.loadbalancer.RoundRobinRule
轮询:默认
com.netflix.loadbalancer.RandomRule
随机
com.netflix.loadbalancer.AvailabilityFilteringRule
会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务、还有并发的连接数量超过阈值的服务,然后对剩余的服务列表按照轮询策略进行访问
com.netflix.loadbalancer.WeightedResponseTimeRule
根据平均响应时间计算所有服务的权重,响应时间越快的服务权重越大,选中的概率越高。刚启动时如果统计信息不足,则上有RoundRobinRule策略,等统计信息足够,会切换到WeightedResponseTimeRule
com.netflix.loadbalancer.RetryRule
先按RoundRobinRule轮询算法获取服务,如果失败则在指定时间内进行重试
com.netflix.loadbalancer.BestAvailableRule
会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,然后选择一个并发量最小的服务
com.netflix.loadbalancer.ZoneAvoidanceRule
默认规则,复合判断Server所在区域的性能和Server的可用性选择服务
配置负载均衡算法
在ConfigBean中显示声明算法,增加bean
1 |
|
5、Ribbon自定义
1、主启动类上添加注解@RibbonClient
1 |
|
2、配置注意细节
- 自定义配置类不能放在@ComponentScan所扫描的当前包以及子包下,否则我们自定义的这个配置类就会被所有的Ribbon客户端锁共享,达不到特殊定制化的目的
3、自定义规则深度解析
1 | /** |
本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!