Spring Cloud 负载均衡 Ribbon

2023-01-03  本文已影响0人  Tinyspot

1. 负载均衡策略

策略类 名称 描述
RandomRule 随机策略 随机选择
RoundRobinRule 轮询策略 按顺序循环选择
RetryRule 重试策略 若选择不成功,则重试
BestAvailableRule 最低并发策略 选择并发连接最低的 server
AvailabilityFilteringRule 可用过滤策略
ResponseTimeWeightedRule 响应时间加权策略 根据 server 的响应时间分配权重
ZoneAvoidanceRule 区域权衡策略

1.1 全局策略设置

@Configuration
public class MyRule {
    @Bean
    public IRule ribbonRule() {
        return new RandomRule();
    }
}

启动类配置
@RibbonClient 表示访问 concrete-eureka-client 服务时使用的策略是 MyRule 配置的

@SpringBootApplication
@EnableEurekaClient
@RibbonClient(name = "concrete-eureka-client", configuration = MyRule.class)
public class ConcreteRibbonApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConcreteRibbonApplication.class, args);
    }
}

1.2 基于配置文件的策略设置

# 配置 ribbon 规则
concrete-eureka-client: # 被调用服务名称
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

2. 超时重试

# 全局超时配置
ribbon:
  ConnectTimeout: 5000
  ReadTimeout: 5000
  MaxAutoRetries: 1 # 对第一次请求的服务的重试次数
  MaxAutoRetriesNextServer: 2 # 要重试的下一个服务的重试次数
  OkToRetryOnAllOperations: true #对所有操作请求都进行重试,默认false

如果是配置下实例下只作用于当前实例

concrete-eureka-client: # 被调用服务名称
  ribbon:
    ConnectTimeout: 5000
    ReadTimeout: 5000
    MaxAutoRetries: 1
    MaxAutoRetriesNextServer: 2

2. 核心工作原理

核心接口 描述 默认实现类
IClientConfig 管理配置接口 DefaultClientConfigImpl
IRule 负载均衡策略接口 ZoneAvoidanceRule
IPing 定期 ping 服务检查可用性接口 DummyPing
ServerList<Server> 获取服务列表方法 ConfigurationBaseServerList
serverListFilter<Server> ZonePreferenceServerListFilter
ILoadBalancer 负载均衡选择服务 ZoneAwareLoadBalancer
ServerListUpdater PollingServerListUpdate
上一篇 下一篇

猜你喜欢

热点阅读