Ribbon负载均衡
1、负载均衡实现流程
2、Ribbon内部流程
一、负载均衡策略
常见负载均衡策略:
内置负载均衡规则类 | 规则描述 |
---|---|
RoundRobinRule | 简单轮询服务列表来选择服务器,是Ribbon默认的负载均衡规则 |
AvailabilityFilteringRule | 对以下 两种服务器进行忽略:1、短路状态的机器(3次连接不上即设置为短路状态30s,后续再次失败,持续时间几何增加);2、并发过高的机器(并发数可由客户端设置:《clientName》.《clientConfigNameSpace》.ActiveConnectionsLimit属性进行配置) |
WeightedResponseTimeRule | 依据权重值选择(权重值:响应时间越长,权重值越小) |
ZoneAvoidanceRule | 使用zone选择机房/机架后,再轮询(@LoadBalanced默认实现) |
BestAvailableRule | 忽略短路机器,并选择并发低的机器 |
RandomRule | 随机选用一个可用的服务器 |
RetryRule | 重试机制 |
二、修改负载均衡策略
1、全局修改,在Application启动类中重新定义一个IRule
@Bean
public IRule randomRule(){
return new RandomRule();
}
2、配置文件方式(消费者的application.yml文件中),可对不同服务定义不同策略:
userservice:
ribbon:
NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则
三、Ribbon饥饿加载
Ribbon默认:懒加载
即第一次访问时,才去创建LoadBalancerClient,故请求时间长(与单例的懒汉模式类似)
饥饿加载:
启动时创建LoadBalancerClient,降低第一次调用时的功耗(与单例的饿汉模式类似)
启动饥饿加载的方式:
ribbon:
eager-load:
enabled: true # 开启饥饿加载
clients: # 指定饥饿加载的服务名称,可多个
- userservice
- orderservice