微服务-Ribbon负载均衡

文章目录

    • 负载均衡原理
      • 流程
      • 原理
        • 源码分析
        • 负载均衡流程
      • 负载均衡策略
      • 饥饿加载
      • 总结

负载均衡原理

流程

在这里插入图片描述

原理

@LoadBalanced
标记RestTemplate发起的http请求要被Ribbon进行拦截和处理

源码分析
  1. ctrl+shift+N搜索LoadBalancerInterceptor,进入。发现实现了ClientHttpRequestInterceptor(客户端Http请求拦截器)的intercept方法
    在这里插入图片描述
    拦截方法
    在这里插入图片描述
  2. 打一个断点,启动order-application,浏览器发送请求http://localhost:8080/order/104
  3. 在该方法中对http请求进行拦截,获取到了服务名serviceName = “userservice”,然后进入到了RibbonLoadBalancerClient的excute方法中。
    在这里插入图片描述
  4. 进入到excute方法,发现调用了该类的一个重载方法excute
    在这里插入图片描述
  5. step into到这个excute方法
    在这里插入图片描述发现serviceId = “userservice”,通过serviceId获取到ILoadBalancer,点开ILoadBalancer,发现里面存储了两个userservice,即成功拉取了2个userservice。获取的loadBalancer对象的名称为DynamicServerListLoadBalancer,动态服务列表负载均衡器。
    在这里插入图片描述
  6. 进入到getServer方法,下一步从loadBalancer的2个userservice中选择1个
    在这里插入图片描述再进入到chooseServer方法里,最终调用了父类的chooseServer方法
    在这里插入图片描述
    进入,最终调用了rule.choose方法
    在这里插入图片描述查看这个rule,发现是一个IRule类型,这是一个接口,ctrl+h查看实现该接口的类有哪些
    在这里插入图片描述发现有好几种规则,RoundRobin,Random等,正是通过这几种规则从多个userservice中选择出一个合适的userservice。
负载均衡流程

在这里插入图片描述

负载均衡策略

在这里插入图片描述在这里插入图片描述
通过定义IRule的实现可以修改负载均衡的策略

  1. 方式一,直接在配置类中定义。针对所有微服务而言。
@Bean
public IRule randomRule(){    return new RandomRule();
}
  1. 方式二,在application.yml中定义。针对某个微服务。
userservice:  ribbon:    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 负载均衡规则 

饥饿加载

Ribbon默认采用的是懒加载,即第一次访问Ribbon服务的时候才会加载LoadBalanceClient,请求时间会很长;
而饥饿加载在项目启动时加载

ribbon:  eager-load:    enabled: true # 开启饥饿加载     clients: userservice # 指定对userservice这个服务饥饿加载
  1. 懒加载,第一次访问是409ms,后续10ms
    在这里插入图片描述
  2. 饥饿加载,第一次访问是236ms,后续10ms
    在这里插入图片描述
    在这里插入图片描述

总结

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/120075.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电脑扬声器未插入?4个方法帮你恢复声音!

“太奇怪了吧,我的电脑扬声器一直显示未插入,我使用电脑的时候也是一直都没有声音。这是为什么呢?我应该怎么解决这个问题呀?” 我们使用电脑播放音频或视频时,都需要用到电脑扬声器。如果扬声器无法播放声音&#xff…

导入Embassy库进行爬虫

Embassy是一个基于Lua的轻量级爬虫框架,可以方便地进行网页抓取和数据提取。它提供了简单易用的接口和丰富的功能,可以帮助开发者快速构建爬虫应用。 要使用Embassy进行爬虫,首先需要安装Embassy库。可以通过Lua的包管理工具luarocks来安装E…

基于STM32+OneNet设计的物联网智能鱼缸(2023升级版)

基于STM32+OneNet设计的智能鱼缸(升级版) 一、前言 随着物联网技术的快速发展,智能家居和智能养殖领域的应用越来越广泛。智能鱼缸作为智能家居和智能养殖的结合体,受到了越来越多消费者的关注。本项目设计一款基于STM32的物联网智能鱼缸,通过集成多种传感器和智能化控制模…

LabVIEW应用开发——控件的使用(四)

接上文,这篇介绍时间控件。 LabVIEW应用开发——控件的使用(三) 1、时间控件Time Stamp control 在日常软件开发场景中,时间也是一种常用的控件,用于表达当前时间的显示、对下设置时间、时间同步等等场景。LabVIEW专门…

Uniapp 跳转回上一页面并刷新页面数据

比如我从A页面跳转到B页面 然后再从B页面返回到A页面 顺带刷新一下A页面数据 let pages getCurrentPages(); // 当前页面 //获取当前页面栈let beforePage pages[pages.length - 3]; // //获取上一个页面实例对象beforePage.$vm.reloadList(); //调用它方法然后跳转…

『C语言进阶』文件操作

🔥博客主页: 小羊失眠啦. 🔖系列专栏: C语言、Linux、Cpolar ❤️感谢大家点赞👍收藏⭐评论✍️ 文章目录 前言一、什么是文件1.1 程序文件1.2 数据文件1.3 文件名 二、文件的打开和关闭2.1 文件指针2.2 文件的打开和关…

[计算机提升] Windows文件系统类型介绍

1.13 文件系统 在Windows系统中,文件系统是一种用于组织和管理计算机上存储的文件和目录的方法。它提供了一种结构化的方式来访问、存储和检索数据。 以下是Windows系统中常见的文件系统: FAT(FAT16、FAT32):FAT&…

Kotlin 如何确定协程是否启动

在Kotlin中,你可以确定协程是否已启动并正在运行,可以使用Job接口来管理协程,并使用一些函数来检查协程的状态。以下是一些常见的方法: 1.launch 函数返回一个 Job 对象,可以使用这个对象来确定协程的状态。例如&…

node 版本管理工具(nvs)

文章目录 前言node 版本管理工具nvs的安装nvs的使用其它nvs 命令nvs 扩展前言 前端程序员面对的项目,可能一对多,而这多个项目可能是以前遗留下来的老项目,这些老项目中各有各的依赖,并不是最新版本的node就能兼容所有不同的开发项目。 比如一个项目需要用到node v16,另…

超简洁ubuntu linux 安装 cp2k

文章目录 打开下载网址解压接下来的步骤讲解 将解压的包移到对应路径下最后运行 打开下载网址 需要从github下载:下载网址 两个都可以从windows下先下载,再复制到linux中, 如果不能复制,右键这两个,复制链接&#xf…

【开源】基于SpringBoot的农村物流配送系统的设计和实现

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统登录、注册界面2.2 系统功能2.2.1 快递信息管理:2.2.2 位置信息管理:2.2.3 配送人员分配:2.2.4 路线规划:2.2.5 个人中心:2.2.6 退换快递处理:…

Redis快速上手篇(四)(Spring Cache,缓存配置)(注解方式)

Spring Cache 从3.1开始,Spring引入了对Cache的支持。其使用方法和原理都类似于Spring对事务管理的支持。Spring Cache是作用在方法上的 使用Spring Cache的时候我们要保证我们缓存的方法对于相同的方法参数要有相同的返回结果。 使用Spring Cache需要我们做两方面…

电子学会C/C++编程等级考试2023年05月(三级)真题解析

C/C等级考试&#xff08;1~8级&#xff09;全部真题・点这里 第1题&#xff1a;找和为K的两个元素 在一个长度为n(n < 1000)的整数序列中&#xff0c;判断是否存在某两个元素之和为k。 输入 第一行输入序列的长度n和k&#xff0c;用空格分开。 第二行输入序列中的n个整数&am…

MYSQL8-sql语句使用集合。MYCAT-sql语法使用集合

MYSQL 1.MYSQL事务与锁问题处理 SELECT * FROM information_schema.INNODB_LOCKs; -- 查询锁select * from information_schema.INNODB_LOCK_WAITS; -- 查询等待锁SELECT * FROM information_schema.INNODB_TRX; -- 查询事务select * from information_schema.processlist wh…

绿米Aqara S1【妙控开关 S1E】的破解方法---续篇

概述 上接第一篇《绿米Aqara S1【妙控开关 S1E】的破解方法》。 链接地址如下: 绿米Aqara S1【妙控开关 S1E】的破解方法-CSDN博客 上篇主要讲述了,绿米S1E这款硬件的基本组成及TTL线的线序,并获取到了对应的串口打印信息。 此篇重点讲解,如何进入其系统,并开启访问权…

spring-boot-configuration-processor介绍

Spring Boot Configuration Processor 是一个用于处理 Spring Boot 配置文件的注解处理器。它是 Spring Boot 提供的一个工具&#xff0c;用于生成配置元数据&#xff0c;并将其提供给 IDE 和其他工具&#xff0c;以便在开发过程中提供更好的配置文件支持。 在 Spring Boot 中…

苍穹外卖-01

苍穹外卖-01 课程内容 软件开发整体介绍苍穹外卖项目介绍开发环境搭建导入接口文档Swagger 项目整体效果展示&#xff1a; ​ 管理端-外卖商家使用 ​ 用户端-点餐用户使用 当我们完成该项目的学习&#xff0c;可以培养以下能力&#xff1a; 1. 软件开发整体介绍 作为一名…

Jenkins入门级安装部署

前言 Jenkins是一个开源软件项目&#xff0c;是基于Java开发的一种持续集成工具&#xff0c;用于监控持续重复的工作&#xff0c;旨在提供一个开放易用的软件平台&#xff0c;使软件项目可以进行持续集成。通常&#xff0c;项目中常用Jenkins作为编译打包项目的工具&#xff0…

【Proteus仿真】【STM32单片机】智能语音家居陪护机器人

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真STM32单片机控制器&#xff0c;使用OLED显示模块、红外传感器、蜂鸣器、DS18B20温度传感器&#xff0c;风扇LED、语音识别模块等。 主要功能&#xff1a; 系统运行后&#xff0c;…

Adversarial attacks and defenses on AI in medical imaging informatics: A survey

Adversarial attacks and defenses on AI in medical imaging informatics: A survey----《AI在医学影像信息学中的对抗性攻击与防御&#xff1a;综述》 背景&#xff1a; 之前的研究表明&#xff0c;人们对医疗DNN及其易受对抗性攻击的脆弱性一直存在疑虑。 摘要&#xff1a;…