SpringCloud微服务:Ribbon负载均衡

目录

负载均衡策略:

负载均衡的两种方式:

饥饿加载

  1. Ribbon负载均衡规则

规则接口是IRule

默认实现是ZoneAvoidanceRule,根据zone选择服务列表,然后轮询

2.负载均衡自定义方式

代码方式:配置灵活,但修改时需要重新打包发布

配置方式:直观,方便,无需重新打包发布,但是无法做全局配置

3.饥饿加载

开启饥饿加载

指定饥饿加载的微服务名称

负载均衡策略:

通过定义IRule实现可以修改负载均衡规则,有两种方式:

1.代码方式:在order-service中的OrderApplication类中,定义一个新的IRule:

@Bean
public IRule randomRule(){
return new RandomRule();//将负载均衡设置为随机,范围为:整个order服务
}

java 复制代码
@MapperScan("cn.itcast.order.mapper")
@SpringBootApplication
public class OrderApplication {

    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class, args);
    }

    //创建RestTemplate并注入Spring容器
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }

    @Bean
    public IRule randomRule(){
        return new RandomRule();//将负载均衡设置为随机,范围为整个order
    }
}

2. 配置文件方式:在order-service的application.yml文件中,添加新的配置也可以修改规则:

复制代码
userservice:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #负载均衡规则:随机。范围:userservice服务
java 复制代码
server:
  port: 8080
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/cloud_order?useSSL=false
    username: root
    password: 1234
    driver-class-name: com.mysql.jdbc.Driver
  application:
    name: orderservice #order的微服务名称
mybatis:
  type-aliases-package: cn.itcast.user.pojo
  configuration:
    map-underscore-to-camel-case: true
logging:
  level:
    cn.itcast: debug
  pattern:
    dateformat: MM-dd HH:mm:ss:SSS
eureka:
  client:
    service-url: #eureka地址信息
      defaultZone: http://127.0.0.1:10086/eureka
userservice:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #负载均衡规则:随机。范围:userservice服务
ribbon:
  eager-load:
    enabled: true #开启饥饿加载
    clients:  #指定饥饿加载的服务
      - userservice

负载均衡的两种方式:

1、轮循:每个userservice循环执行

当我们执行四次请求时:可以看到user1执行1和3,user2执行2和4

2、随机:每个userservice随机执行

当我恩执行五次请求时:可以看到user1执行1、4、5,user2执行2、3

饥饿加载

Ribbon默认是采用懒加载,即第一次访问时才会去创建LoadBalanceClient,请求时间会很长。而饥饿加载则会在项目启动时创建,降低第一次访问的耗时,通过下面配置开启饥饿加载:

复制代码
ribbon:
  eager-load:
    enabled: true #开启饥饿加载
    clients:  #指定饥饿加载的服务
      - userservice
java 复制代码
server:
  port: 8080
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/cloud_order?useSSL=false
    username: root
    password: 1234
    driver-class-name: com.mysql.jdbc.Driver
  application:
    name: orderservice #order的微服务名称
mybatis:
  type-aliases-package: cn.itcast.user.pojo
  configuration:
    map-underscore-to-camel-case: true
logging:
  level:
    cn.itcast: debug
  pattern:
    dateformat: MM-dd HH:mm:ss:SSS
eureka:
  client:
    service-url: #eureka地址信息
      defaultZone: http://127.0.0.1:10086/eureka
userservice:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #负载均衡规则:随机。范围:userservice服务
ribbon:
  eager-load:
    enabled: true #开启饥饿加载
    clients:  #指定饥饿加载的服务
      - userservice

下面进行比较两种加载速度:

1、使用默认的懒加载:

2、使用饥饿加载:

访问速度得到提升。

原因:饥饿加载时,当启动项目时,这些服务会直接加载上。而懒加载只有访问的时候才会加载,导致加载时间过长。

代码文件点击下载https://pan.baidu.com/s/1N_sqj2YxdZJkYoqHJqAyZw?pwd=wtxq

上一篇:Eureka

下一篇:Nacos的下载和配置

相关推荐
一条咸鱼_SaltyFish17 小时前
[Day15] 若依框架二次开发改造记录:定制化之旅 contract-security-ruoyi
java·大数据·经验分享·分布式·微服务·架构·ai编程
2503_9469718620 小时前
【Kernel/Consensus】2026年度第二周内核重构与分布式共识战争基准索引 (Benchmark Index)
网络安全·微服务·重构·数据集·分布式系统·系统内核
程序猿阿伟21 小时前
《Python生态事件溯源与CQRS轻量化落地指南》
大数据·python·微服务
超级小猪21 小时前
007-spring cloud alibaba之Sentinel限流
微服务
喵叔哟21 小时前
18.核心服务实现(下)
数据库·后端·微服务·架构
indexsunny1 天前
互联网大厂Java求职面试实战:微服务与Spring Boot在电商场景中的应用
java·数据库·spring boot·微服务·kafka·hibernate·电商
wangbing11251 天前
平台介绍-开放API后台微服务
数据库·微服务·架构
jasnet_u1 天前
SpringBoot3.x+SpringCloudAlibaba2023+JDK17微服务基础框架搭建
微服务·云原生·架构
一条咸鱼_SaltyFish1 天前
[Day16] Bug 排查记录:若依框架二次开发中的经验与教训 contract-security-ruoyi
java·开发语言·经验分享·微服务·架构·bug·开源软件
没有bug.的程序员1 天前
Kubernetes 与微服务的融合架构:调度、弹性、健康检查深度协同
jvm·微服务·云原生·架构·kubernetes·健康检查·弹性伸缩