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的下载和配置

相关推荐
七七知享1 小时前
Go 语言编程全解析:Web 微服务与数据库十大专题深度精讲
数据库·web安全·网络安全·微服务·golang·web3·webkit
种豆走天下8 小时前
Dubbo、SpringCloud框架学习
学习·spring cloud·dubbo
JZC_xiaozhong12 小时前
微服务架构下的 Node.js
科技·微服务·架构·node.js
!!!52513 小时前
Spring Cloud Gateway 笔记
笔记·spring cloud·gateway
桂月二二13 小时前
云原生服务网格:构建智能化的微服务神经网络
神经网络·微服务·云原生
啾啾Fun15 小时前
[微服务设计]2_演化式架构
java·微服务·架构
B1nnnn丶16 小时前
Spring Boot/Spring Cloud 整合 ELK(Elasticsearch、Logstash、Kibana)详细避坑指南
spring boot·elk·spring cloud
2301_7672332218 小时前
框架、云原生、微服务的基本概念
微服务·云原生·架构
蒂法就是我18 小时前
单机和微服务的区别,微服务有什么问题?数据一致性问题怎么解决?幂等问题怎么解决?
微服务·云原生·架构