Ribbon-负载均衡

复制代码
负载方案:
1.在客户端和服务端中间使用独立的代理方式进行负载,Nginx
2.消费端根据自己的请求做负载均衡,Ribbon

常见算法:
	随机:通过随机选择服务进行执行
	轮询:默认实现方式,服务请求 一个接着一个 依次处理
	权重:对服务器性能的分析,给高配置,低负载的服务器分配更高的权重
    最小连接数:哪台服务器接收请求连接越少,就分给哪台

1. Ribbon常用负载均衡策略

复制代码
IRule:所有负载均衡策略的父接口,核心方法choose方法,通过服务名称选择服务实例。
AbstractLoadBalancerRule:抽象类,主要定义了一个ILoadBalancer,辅助负载均衡策略选取合适的服务端实例。
RandomRule:随机策略,每次通过底层方法生成一个不大于服务器实例总数的随机数,并将该数作为下标获取一个服务实例。
RoundRobinRule:轮询策略,开启一个计数器,在while循环中遍历服务清单,获取清单之前先通过底层方法获取一个下标,这个下标是一个不断自增长的数先+1然后和服务清单总数取模之后获取到的,再通过这个小标去服务清单中获取服务实例。
RetryRule:重试策略,在轮询的基础上进行重试,比如在轮询的过程中选择的服务实例为null或者已失效,则在请求超时时间范围内会不断的进行重试获取服务实例。
WeightedResponseTimeRule:权重策略,底层方法会根据每一个服务实例的运行情况计算出该实例的一个权重数,然后在挑选服务实例的时候则根据权重进行挑选,能够实现更优的服务实例调用。

2.修改Ribbon负载均衡策略

1.方式一:配置类
复制代码
自定义负载均衡策略配置类要放在启动类扫描包路径之外,否则自定义的配置类会被所有的服务提供方共享。
1.修改Ribbon负载均衡策略配置类
java 复制代码
@Configuration
public class RibbonRandomRuleConfig {

    @Bean
    //方法名iRule不要修改
    public IRule iRule(){
        return new RandomRule();
    }

}
2.启动类添加RibbonClients注解
复制代码
注:使用RestTemplete进行接口调用,需要添加@LoadBalanced注解
java 复制代码
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
@MapperScan({"com.daily.project.mapper"})
@EnableFeignClients
@RibbonClients(value = {
        //服务提供方,也就是当前服务需要调用的服务
        //当前服务调用daily-project-system时采用Ribbon负载均衡随机策略
        @RibbonClient(name="daily-project-system",configuration = RibbonRandomRuleConfig.class)
})
public class TrainSportApplication {
    public static void main(String[] args) {
        SpringApplication.run(TrainSportApplication.class, args);
    }
    
	@Bean
    @LoadBalanced
    public RestTemplate restTemplate(RestTemplateBuilder builder){
        RestTemplate restTemplate = builder.build();
        return restTemplate;
    }
}
2.方式二:配置文件yml
yaml 复制代码
#服务提供方
#服务提供方
daily-project-system:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
##第一次访问服务ribbon默认懒加载响应慢的问题
ribbon:
  eager-load:
    #开启ribbon饥饿加载(服务启动时就加载)
    enabled: true
    #多个使用,分隔
    clients: daily-project-system
相关推荐
超龄超能程序猿2 分钟前
Spring 应用中 Swagger 2.0 迁移 OpenAPI 3.0 详解:配置、注解与实践
java·spring boot·后端·spring·spring cloud
都叫我大帅哥1 小时前
深入浅出 Resilience4j:Java 微服务的“免疫系统”实战指南
java·spring cloud
都叫我大帅哥13 小时前
Spring Cloud LoadBalancer:微服务世界的“吃货选餐厅”指南 🍜
java·spring cloud
都叫我大帅哥13 小时前
🌈 深入浅出Java Ribbon:微服务负载均衡的艺术与避坑大全
java·spring cloud
都叫我大帅哥14 小时前
阿里巴巴Sentinel:高可用防护的瑞士军刀
java·spring cloud
都叫我大帅哥14 小时前
Nacos全解:从微服务管家到AI协作者,一篇让你笑中带悟的指南
java·spring cloud
都叫我大帅哥15 小时前
🌌 星际迷航版Java微服务探索:Eureka服务发现全解
java·spring cloud
要开心吖ZSH17 小时前
Spring Cloud LoadBalancer 详解
后端·spring·spring cloud
吉吉611 天前
docker的搭建
spring cloud·docker·容器
麦兜*1 天前
SpringBoot 3.x集成阿里云OSS:文件上传 断点续传 权限控制
java·spring boot·后端·spring·spring cloud·阿里云·maven