文章目录
Ribbon
- 客户端负载均衡
- 依赖:
<dependency>
<groupId>com.netflix.ribbon</groupId>
<artifactId>ribbon</artifactId>
<version>2.2.2</version>
</dependency>
ribbon 特性
负载均衡算法
- 区域权衡策略: ZoneAvoidanceRule
- 最低并发策略: BestAvailableRule
- 响应时间加权策略: WeightedResponseTimeRule
- 轮询策略: RoundRobinRule
- 随机策略: RandomRule
- 重试策略: RetryRule
- 可用过滤策略: AvailabilityFilteringRule
ribbon 禁用 eureka
- 相当于服务直连
ribbon:
eureka:
enabled: false # 禁用 eureka
listOfServers: localhost:81,localhost:82 # 手动指定服务列表
Ribbon 负载均衡
负载均衡的两种方式
-
服务器负载;
-
客户端负载;
-
api:
discoverClient.getInstances("service-name")
获取服务的所有实例- 在 restTemplate 上增加注解
@LoadBalanced
-
Ribbon 的重要接口:
ribbon 配置项
- 默认轮询的规则;
自定义负载均衡规则
- java 配置: 使用 @Bean:
-- rule 类 --
@Bean
public IRule ribbonRule(){
return new RandomRule();
}
-- config 类--
- 使用配置文件配置负载策略, 针对特定服务
service-name:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
- 给所有服务设置 ribbon 策略:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
- 全局配置:
- 直接在 规则类上加
@Configuration
注解; - 不推荐这样使用, 因为它使用覆盖的方式实现, 不太优雅; 可以使用
@RibbonClients(defaultConfiguration= xxx.Class)
进行设置
- 直接在 规则类上加
配置优先级
- java 配置优先级 > 配置优先级; 源码里基于springboot 进行实现的;
- java配置: org.springframework.cloud.context.named.NamedContextFactory#createContext
- 配置文件: RibbonCLientConfiguration.ribonRule
饿加载和懒加载
- 默认服务器等信息是懒加载;
- 修改成饿加载:
ribbon:
eager-load
enable: true
clients: xxx_name # 对这个服务使用饿加载
Ribbon 源码
- 拿到服务 ip+端口 列表(ribbon 有一个线程, 每隔30s 从注册中心更新一下服务列表);
- 选择一个具体的服务实例;
- 替换服务名称为具体的 ip+端口号;
- 发送请求