当前位置: 首页 > news >正文

SpringCloud微服务:Ribbon负载均衡

目录

负载均衡策略:

负载均衡的两种方式:

饥饿加载

1. Ribbon负载均衡规则
规则接口是IRule
默认实现是ZoneAvoidanceRule,根据zone选择服务列表,然后轮询
2.负载均衡自定义方式
代码方式:配置灵活,但修改时需要重新打包发布
配置方式:直观,方便,无需重新打包发布,但是无法做全局配置
3.饥饿加载
开启饥饿加载
指定饥饿加载的微服务名称
 

负载均衡策略:

通过定义IRule实现可以修改负载均衡规则,有两种方式:
1.代码方式:在order-service中的OrderApplication类中,定义一个新的IRule:

@Bean
    public IRule randomRule(){
        return new RandomRule();//将负载均衡设置为随机,范围为:整个order服务
    }
@MapperScan("cn.itcast.order.mapper")
@SpringBootApplication
public class OrderApplication {public static void main(String[] args) {SpringApplication.run(OrderApplication.class, args);}//创建RestTemplate并注入Spring容器@Bean@LoadBalancedpublic RestTemplate restTemplate(){return new RestTemplate();}@Beanpublic IRule randomRule(){return new RandomRule();//将负载均衡设置为随机,范围为整个order}
}

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

userservice:ribbon:NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #负载均衡规则:随机。范围:userservice服务
server:port: 8080
spring:datasource:url: jdbc:mysql://localhost:3306/cloud_order?useSSL=falseusername: rootpassword: 1234driver-class-name: com.mysql.jdbc.Driverapplication:name: orderservice #order的微服务名称
mybatis:type-aliases-package: cn.itcast.user.pojoconfiguration:map-underscore-to-camel-case: true
logging:level:cn.itcast: debugpattern: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
server:port: 8080
spring:datasource:url: jdbc:mysql://localhost:3306/cloud_order?useSSL=falseusername: rootpassword: 1234driver-class-name: com.mysql.jdbc.Driverapplication:name: orderservice #order的微服务名称
mybatis:type-aliases-package: cn.itcast.user.pojoconfiguration:map-underscore-to-camel-case: true
logging:level:cn.itcast: debugpattern: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、使用饥饿加载:

 

访问速度得到提升。

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

 代码文件点击下载icon-default.png?t=N7T8https://pan.baidu.com/s/1N_sqj2YxdZJkYoqHJqAyZw?pwd=wtxq

上一篇:Eureka

下一篇:Nacos的下载和配置 

相关文章:

  • 【微服务专题】Spring启动过程源码解析
  • 【Java并发编程三】线程的基本使用一
  • 论信息系统项目的沟通管理
  • Debian/Ubuntu 安装 NodeJS【详细步骤】
  • 设计模式-创建型模式-单例模式
  • C++ 继承和派生
  • JAXB的XmlElement注解
  • 紫色调城市和奔跑人物剪影背景工会工作总结汇报PPT模板
  • RabbitMQ 部署及配置详解(集群部署)
  • VB.net WebBrowser网页元素抓取分析方法
  • HMM与LTP词性标注之依存句法分析、词性标注实现
  • 在国内购买GPT服务前的一定要注意!!!
  • Git企业开发级讲解(五)
  • 操作系统(存储管理进程管理设备管理)
  • WPF中行为与触发器的概念及用法
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • Apache的基本使用
  • Bootstrap JS插件Alert源码分析
  • classpath对获取配置文件的影响
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 扑朔迷离的属性和特性【彻底弄清】
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • 新书推荐|Windows黑客编程技术详解
  • 如何通过报表单元格右键控制报表跳转到不同链接地址 ...
  • ​人工智能之父图灵诞辰纪念日,一起来看最受读者欢迎的AI技术好书
  • # Maven错误Error executing Maven
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (C语言)共用体union的用法举例
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (二)丶RabbitMQ的六大核心
  • (附源码)spring boot智能服药提醒app 毕业设计 102151
  • (小白学Java)Java简介和基本配置
  • (心得)获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
  • *** 2003
  • .NET Core引入性能分析引导优化
  • .net 微服务 服务保护 自动重试 Polly
  • .NET/C# 使用 SpanT 为字符串处理提升性能
  • @transactional 方法执行完再commit_当@Transactional遇到@CacheEvict,你的代码是不是有bug!...
  • [<死锁专题>]
  • [17]JAVAEE-HTTP协议
  • [bug总结]: Feign调用GET请求找不到请求体实体类
  • [emacs] CUA的矩形块操作很给力啊
  • [Machine Learning] Learning with Noisy Labels
  • [node] Node.js的Web 模块
  • [NOI2005]月下柠檬树[计算几何(simpson)]
  • [python]tkinker的GUI应用执行耗时长的任务
  • [python]使用pyqt5搭建yolov8 竹签计数一次性筷子计数系统
  • [pytorch]设备选择以及卷积神经网络的应用