微服务-Ribbon负载均衡
文章目录
- 负载均衡原理
- 流程
- 原理
- 源码分析
- 负载均衡流程
- 负载均衡策略
- 饥饿加载
- 总结
负载均衡原理
流程
原理
@LoadBalanced
标记RestTemplate发起的http请求要被Ribbon进行拦截和处理
源码分析
- ctrl+shift+N搜索LoadBalancerInterceptor,进入。发现实现了ClientHttpRequestInterceptor(客户端Http请求拦截器)的intercept方法
拦截方法
- 打一个断点,启动order-application,浏览器发送请求http://localhost:8080/order/104
- 在该方法中对http请求进行拦截,获取到了服务名serviceName = “userservice”,然后进入到了RibbonLoadBalancerClient的excute方法中。
- 进入到excute方法,发现调用了该类的一个重载方法excute
- step into到这个excute方法
发现serviceId = “userservice”,通过serviceId获取到ILoadBalancer,点开ILoadBalancer,发现里面存储了两个userservice,即成功拉取了2个userservice。获取的loadBalancer对象的名称为DynamicServerListLoadBalancer,动态服务列表负载均衡器。
- 进入到getServer方法,下一步从loadBalancer的2个userservice中选择1个
再进入到chooseServer方法里,最终调用了父类的chooseServer方法
进入,最终调用了rule.choose方法
查看这个rule,发现是一个IRule类型,这是一个接口,ctrl+h查看实现该接口的类有哪些
发现有好几种规则,RoundRobin,Random等,正是通过这几种规则从多个userservice中选择出一个合适的userservice。
负载均衡流程
负载均衡策略
通过定义IRule的实现可以修改负载均衡的策略
- 方式一,直接在配置类中定义。针对所有微服务而言。
@Bean
public IRule randomRule(){ return new RandomRule();
}
- 方式二,在application.yml中定义。针对某个微服务。
userservice: ribbon: NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 负载均衡规则
饥饿加载
Ribbon默认采用的是懒加载,即第一次访问Ribbon服务的时候才会加载LoadBalanceClient,请求时间会很长;
而饥饿加载在项目启动时加载
ribbon: eager-load: enabled: true # 开启饥饿加载 clients: userservice # 指定对userservice这个服务饥饿加载
- 懒加载,第一次访问是409ms,后续10ms
- 饥饿加载,第一次访问是236ms,后续10ms
总结
相关文章:

微服务-Ribbon负载均衡
文章目录 负载均衡原理流程原理源码分析负载均衡流程 负载均衡策略饥饿加载总结 负载均衡原理 流程 原理 LoadBalanced 标记RestTemplate发起的http请求要被Ribbon进行拦截和处理 源码分析 ctrlshiftN搜索LoadBalancerInterceptor,进入。发现实现了ClientHttpRequ…...

UC3845BD1R2G一款专门针对离线和 DC-DC 转换器应用 高性能电流模式PWM控制器
UC3845BD1R2G为高性能固定频率电流模式控制器。专门针对离线和 DC-DC 转换器应用而设计,提供了外部部件极少的成本高效方案。这些集成电路具有振荡器、温度补偿参考、高增益误差放大器、电流传感比较器和高电流图腾柱输出,适用于驱动功率 MOSFET。还包括…...

vivo自研AI大模型即将问世,智能手机行业加速迈向AI时代
当前,以大模型为代表的人工智能技术已发展为新一轮科技革命和产业变革的重要驱动力量,被视作推动经济社会发展的关键增长极。 AI大模型潮起,千行百业走向百舸争流的AI创新应用期,前沿信息技术向手机、PC、车机等消费级终端加速渗…...

探索JavaScript事件流:DOM中的神奇旅程
🎬 江城开朗的豌豆:个人主页 🔥 个人专栏 :《 VUE 》 《 javaScript 》 ⛺️ 生活的理想,就是为了理想的生活 ! 目录 引言 1. 事件流的发展流程 1.1 传统的DOM0级事件 1.2 DOM2级事件和addEventListener方法 1.3 W3C DOM3级…...

听GPT 讲Rust源代码--library/std(8)
题图来自Why is Rust programming language so popular?[1] File: rust/library/std/src/sys/sgx/abi/reloc.rs 在Rust源代码中,sgx/abi/reloc.rs文件的作用是定义了针对Intel Software Guard Extensions (SGX)的重定位相关结构和函数。 该文件中的Rela 结构定义了…...

Hbase基本使用,读写原理,性能优化学习
文章目录 HBase简介HBase定义HBase数据模型**HBase** **逻辑结构****HBase** **物理存储结构****HBase** **基本架构** HBase 入门**HBase** **安装部署****HBase** 配置文件**HBase** 启动停止**HBase** **访问页面****HBase** **高可用****HBase Shell****HBase API**HBaseCo…...
添加主仓库后报错error: remote upstream already exists.
可能的原因 远程名 upstream 已经被使用: 这通常意味着你在之前已经添加了一个名为 upstream 的远程仓库。 解决方案 检查现有的远程仓库: 运行 git remote -v 来查看所有配置的远程仓库。这个命令会列出所有远程仓库的URL,你可以检查是否已…...

香港服务器如何做负载均衡?
在现代互联网时代,随着网站访问量的不断增加,服务器的负载也越来越重。为了提高网站的性能和可用性,负载均衡成为了一种常见的解决方案。 什么是负载均衡? 负载均衡是一种技术解决方案,用于在多个服务器之间分配负载&#…...

前端 :用HTML , CSS ,JS 做一个秒表
1.HTML: <body><div id "content"><div id "top"><div id"time">00:00:000</div></div><div id "bottom"><div id "btn_start">开始</div><div …...

BIOS MBR UEFI GPT详解
先来看下名词 启动方式: BIOS:Basic Input Output System,中文名称"基本输入输出系统"。 UEFI:Unified Extensible Firmware Interface,中文名称"统一的可扩展固件接口"。 Legacy:…...
2023NOIP A层联测20-点餐
一家新的餐馆开业了,为了吸引更多的顾客,每样餐品都有打折的活动。特别的,餐馆内一共有𝑛样菜品,编号从 1 1 1 到 n n n,每样菜品每人最多只能点一次。对于第 i i i 种菜品,其包含两种价格&a…...

3D LUT 滤镜 shader 源码分析
最近在做滤镜相关的渲染学习,目前大部分 LUT 滤镜代码实现都是参考由 GPUImage 提供的 LookupFilter 的逻辑,整个代码实现不多。参考网上的博文也有各种解释,参考了大量博文之后终于理解了,所以自己重新整理了一份,方便…...

五分钟理解Java跨平台原理(适合小白)
JVM通俗的理解 Java语言的一个非常重要的特点就是与平台的无关性。而使用Java虚拟机,即JVM(Java Virtual Machine)是实现这一特点的关键。JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机…...

从初级测试工程师到测试专家,你的晋升路线是什么?
最近,我们讨论了软件测试工程的的分级,大家都贡献了自己的想法。 对于大家来说,软件测试人的分级其实也代表了我们的进阶方向,职业发展。总体来说,测试工程师未来发展有三个方向: 技术精英 行业专家 管理…...

合肥中科深谷嵌入式项目实战——人工智能与机械臂(四)
订阅:新手可以订阅我的其他专栏。免费阶段订阅量1000 python项目实战 Python编程基础教程系列(零基础小白搬砖逆袭) 作者:爱吃饼干的小白鼠。Python领域优质创作者,2022年度博客新星top100入围,荣获多家平台专家称号。…...

Zynq-Linux移植学习笔记之64- 国产ZYNQ在linux下配置国产5396芯片
1、背景介绍 复旦微ZYNQ通过SPI配置国产JEM5396,框图如下: 现在需要在linux下的应用程序内配置JEM5396的寄存器。其中FMQL和进口的XILINX ZYNQ类似,JEM5396和进口的BCM5396兼容。因此可以参考进口ZYNQ在linux下配置BCM5396过程。Zynq-Linux移…...
系统架构设计师-第19章-大数据架构设计理论与实践-软考学习笔记
传统数据处理系统存在的问题 传统数据处理系统存在以下问题: 1. 数据孤岛问题:不同部门或系统之间的数据隔离,数据无法共享和整合。 2. 数据不一致性问题:由于数据维护分散,同一数据在不同系统或部门中可能存在不同…...

论坛搭建.
目录 一.配置软件仓库 二.安装http php miriadb 三.配置数据库 四.源码拖拽并解压 五.防火墙通过 六.浏览器安装测试 七.界面参数设置 一.配置软件仓库 1.进入仓库目录 cd /etc/yum.repos.d 2.创建仓库文件 vim local.repo 3.在 local.repo中写入:(粘贴的时候注意位…...
三种前端埋点方式
什么是埋点 埋点是数据采集领域(尤其是用户行为数据采集领域)的术语,指的是针对特定用户行为或事件进行捕获、处理和发送的相关技术及其实施过程。比如用户某个icon点击次数、观看某个视频的时长等等。 我们可以知道埋点实际上是对特定事件或…...

html获取网络数据,列表展示 第二种
html获取网络数据,列表展示 第二种 js遍历json数组中的json对象 image.png || - 判断数据是否为空,为空就显示 - <!DOCTYPE html> <html><head><meta charset"utf-8"><title>网页列表</title><script …...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...

跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...

人机融合智能 | “人智交互”跨学科新领域
本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...

数据分析六部曲?
引言 上一章我们说到了数据分析六部曲,何谓六部曲呢? 其实啊,数据分析没那么难,只要掌握了下面这六个步骤,也就是数据分析六部曲,就算你是个啥都不懂的小白,也能慢慢上手做数据分析啦。 第一…...
用鸿蒙HarmonyOS5实现国际象棋小游戏的过程
下面是一个基于鸿蒙OS (HarmonyOS) 的国际象棋小游戏的完整实现代码,使用Java语言和鸿蒙的Ability框架。 1. 项目结构 /src/main/java/com/example/chess/├── MainAbilitySlice.java // 主界面逻辑├── ChessView.java // 游戏视图和逻辑├── …...

mq安装新版-3.13.7的安装
一、下载包,上传到服务器 https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.13.7/rabbitmq-server-generic-unix-3.13.7.tar.xz 二、 erlang直接安装 rpm -ivh erlang-26.2.4-1.el8.x86_64.rpm不需要配置环境变量,直接就安装了。 erl…...

uniapp+<script setup lang=“ts“>解决有数据与暂无数据切换显示,有数据加载时暂无数据闪现(先加载空数据)问题
声明showEmpty 为false,在接口返回处判断有数据时设置showEmpty 为false,接口返回数据为空则判断showEmpty 为true (这样就解决有数据的时候会闪现暂无数据的问题啦) <!--* Date: 2024-02-26 03:38:52* LastEditTime: 2025-06…...