3. Spring Cloud LoadBalancer 入门与使用
一、什么是 LoadBalancer?
LoadBalancer(负载均衡器)是一种网络设备或软件机制,用于分发传入的网络流量负载(请求)到多个后端目标服务器上,从而实现系统资源的均衡利用和提高系统的可用性和性能。
1.1 负载均衡分类
服务器负载均衡是在服务端通过硬件设备(如 F5)或软件(如 Nginx)接收客户端请求并依据算法将其分发至后端多个服务器以平衡负载
客户端负载均衡是客户端自身维护可用服务列表并按特定算法自主选择服务实例来发送请求。
1.2 常见负载均衡策略
静态负载均衡策略
这类策略不考虑服务器的实时负载情况,根据预设的规则进行请求分配。
-
轮询(Round Robin)
-
负载均衡器按照顺序依次将客户端请求分配给后端服务器列表中的每一台服务器,当分配到列表末尾时,再从头开始。
-
例如,有三台服务器 A、B、C,请求 1 分配给 A,请求 2 分配给 B,请求 3 分配给 C,请求 4 又分配给 A,以此类推。该策略简单易实现,适用于各服务器性能相近的场景。
-
-
加权轮询(Weighted Round Robin)
-
考虑到后端服务器的性能差异,为每台服务器分配一个权重值,负载均衡器根据权重比例来分配请求。
-
比如,服务器 A、B、C 的权重分别为 2、3、1,那么在分配请求时,每 6 个请求中,服务器 A 会收到 2 个,服务器 B 会收到 3 个,服务器 C 会收到 1 个。这种策略能更合理地利用不同性能的服务器资源。
-
-
IP 哈希(IP Hash)
-
根据客户端的 IP 地址进行哈希计算,将计算结果与后端服务器数量取模,得到的结果对应服务器列表中的索引,从而将请求分配到该服务器上。
-
这意味着同一客户端的请求总是会被分配到同一台服务器上,适合需要保持会话状态的应用场景,如购物车、用户登录等。
-
动态负载均衡策略
这类策略会实时监测服务器的负载情况,根据服务器的当前状态来分配请求。
-
最少连接(Least Connections)
-
负载均衡器会将新的请求分配给当前连接数最少的服务器,以确保各服务器的负载相对均衡。
-
例如,服务器 A 当前有 10 个连接,服务器 B 有 5 个连接,服务器 C 有 8 个连接,那么新的请求会被分配给服务器 B。该策略能动态地适应服务器的负载变化,充分利用服务器资源。
-
-
加权最少连接(Weighted Least Connections)
-
结合了服务器的权重和当前连接数来分配请求。在考虑服务器连接数的同时,也考虑服务器的性能差异。
-
给性能高的服务器分配更高的权重,在分配请求时,会综合计算服务器的连接数和权重,选择相对负载最轻的服务器。比如,服务器 A 权重为 2,当前连接数为 10;服务器 B 权重为 1,当前连接数为 5,可能会根据特定的计算公式来判断将请求分配给哪台服务器更合适。
-
-
响应时间(Response Time)
-
负载均衡器会实时监测后端服务器的响应时间,将请求分配给响应时间最短的服务器。
-
这样可以保证客户端能够更快地得到响应,提高用户体验。例如,在电商网站的促销活动期间,不同服务器的处理能力和负载可能会有较大差异,通过响应时间策略可以将请求导向处理速度快的服务器。
-
二、LoadBalancer在微服务中的作用
流量分发与负载均衡
-
均匀分配请求:微服务通常会部署多个实例以应对高并发和提高可用性。LoadBalancer 能将客户端的请求均匀地分发到这些实例上,避免部分实例过载而部分闲置的情况。例如,一个电商系统的商品服务部署了多个实例,LoadBalancer 可根据各实例的负载状态,将商品查询请求合理分配,确保每个实例的工作负载相对均衡。
-
应对流量高峰:在业务流量高峰期,如电商的促销活动期间,LoadBalancer 能够动态调整请求的分配,将更多的流量导向负载较轻的实例,保障系统的整体性能和稳定性,防止因某个实例不堪重负而崩溃。
高可用性与容错
-
实例健康检查:LoadBalancer 会定期对后端的微服务实例进行健康检查,判断实例是否正常运行。若发现某个实例出现故障或响应异常,会自动将其从可用实例列表中移除,不再向其分配请求。比如,当一个用户服务实例因代码异常无法正常响应时,LoadBalancer 能及时发现并停止向该实例分发新的用户登录、注册等请求。
-
故障转移:当某个微服务实例出现故障时,LoadBalancer 会迅速将后续请求转发到其他正常的实例上,实现故障转移,确保服务的连续性。例如,支付服务的一个实例突然崩溃,LoadBalancer 会立即把支付请求路由到其他健康的支付服务实例,让用户的支付操作不受太大影响。
服务发现与路由
-
服务发现集成:在微服务环境中,服务的实例数量和位置可能会动态变化。LoadBalancer 可以与服务发现组件(如 Consul、Eureka)集成,实时获取微服务实例的注册信息和状态。这样,当有新的实例加入或旧的实例下线时,LoadBalancer 能及时更新可用实例列表,保证请求的正确分发。
-
智能路由:根据不同的业务规则和请求特征,LoadBalancer 可以实现智能路由。例如,根据请求的来源地、用户身份、请求的内容等信息,将请求路由到特定的微服务实例或服务版本。比如,对于来自特定地区的用户请求,将其路由到距离该地区最近的数据中心的服务实例,以提高响应速度。
安全与隔离
-
访问控制:LoadBalancer 可以作为一道安全屏障,对进入微服务系统的请求进行访问控制。可以设置访问规则,如限制特定 IP 地址的访问、对请求进行身份验证和授权等,防止非法请求进入系统,保护微服务的安全。
-
服务隔离:通过将不同类型的微服务请求分配到不同的实例组或集群,实现服务之间的隔离。这样,当某个微服务出现问题时,不会影响到其他微服务的正常运行,提高了系统的整体稳定性和安全性。例如,将核心业务服务和非核心业务服务的请求分别路由到不同的实例组,避免非核心业务的故障影响核心业务。
三、如何使用?
在项目中添加 Spring Cloud OpenFeign 和注册中心如 Nacos 之后,再添加 Spring Cloud LoadBalancer 则会在进行接口调用时直接使用 Spring Cloud LoadBalancer。
四、默认负载均衡策略
轮询
五、随机负载均策略
5.1 创建随机负载均衡器
public class RandomLoadBalancerConfig {@Beanpublic ReactorLoadBalancer<ServiceInstance> randomLoadBalancer(Environment environment, LoadBalancerClientFactory loadBalancerClientFactory) {String name = environment.getProperty("loadbalancer.client.name");return new RandomLoadBalancer(loadBalancerClientFactory.getLazyProvider(name,ServiceInstanceListSupplier.class), name);}
}
5.2 设置随机负载均衡器 (局部设置)
@Service
@FeignClient("loadbalancer-service")
设置局部负载均衡策略
//@LoadBalancerClient(name = "loadbalancer-service",
// configuration = CustomLoadBalancerConfig.class)
public interface UserService {@RequestMapping("/user/getname")String getName(@RequestParam("id") Integer id);
}
5.3 设置全局负载均衡器
@SpringBootApplication
@EnableFeignClients // 开启 Openfeign
设置全局的负载均衡策略
//@LoadBalancerClients(defaultConfiguration =
// CustomLoadBalancerConfig.class)
public class ConsumerApplication {public static void main(String[] args) {SpringApplication.run(ConsumerApplication.class, args);}}
相关文章:
3. Spring Cloud LoadBalancer 入门与使用
一、什么是 LoadBalancer? LoadBalancer(负载均衡器)是一种网络设备或软件机制,用于分发传入的网络流量负载(请求)到多个后端目标服务器上,从而实现系统资源的均衡利用和提高系统的可用性和性能。 1.1 负载均衡分类 服务器负载均衡是在服务端通过硬件…...
基于TensorFlow.js与Web Worker的智能证件照生成方案
功能简介 本文基于TensorFlow.js与Web Worker实现了常用的“证件照”功能,可以对照片实现抠图并替换背景。值得一提的是,正常抠图的操作应该由后端进行,这里只是主要演示该功能实现步骤,并不建议该功能由前端全权处理。 限于个人技…...
jupyterhub on k8s 配置用户名密码 简单版
如果只是小组内使用 不想共用密码 也不想搞复杂认证方案 那么就直接通过map(用户名,密码md5值)来制定密码 config.yaml部分内容 hub:config:JupyterHub:shutdown_on_logout: true # 用户logout 自动stop jupyter pod,家目录下所有文件会被保存到pvc 即启动后之前家目录下…...
Logic-RL:Unleashing LLM Reasoning with Rule-Based Reinforcement learning
1.Introduction deepseek-r1,kimi-k1.5和openai-o1效果都很好。deepseek-r1引入了一种简单而有效的基于规则的强化学习,无需依赖传统的支撑技术,如蒙特卡洛书树搜索MCTS或者过程奖励模型PRM,便能出现新兴的推理模式。deepseek-r1开源了权重,但是并未发布训练或数据集,这…...
算法-数据结构-图的构建(邻接矩阵表示)
数据定义 //邻接矩阵表示图 //1.无向图是对称的 //2.有权的把a,到b 对应的位置换成权的值/*** 无向图* A B* A 0 1* B 1 0*/ /*** 有向图* A B* A 0 1* B 0 0*/import java.util.ArrayList; import java.util.List;/*** 带权图* A B* A 0 1* B 0 0*/ p…...
使用 Grafana 监控 Spring Boot 应用
随着软件开发领域的不断发展,监控和可观测性已成为确保系统可靠性和性能的关键实践。Grafana 是一个功能强大的开源工具,能够为来自各种来源的监控数据提供丰富的可视化功能。在本篇博客中,我们将探讨如何将 Grafana 与 Spring Boot 应用程序…...
使用S32DS部署Tensorflow lite到S32K3
一、概述 1、本文主要介绍如何用S32DS在NXP S32K344 中部署Tensorflow; 2、示例使用了Tensorflow入门代码,主要功能是识别28 * 28 的手写图片的数字; 3、在MCU上开启DSP功能后,最终运行时间在 7ms(64神经元…...
AWS S3深度解析:十大核心应用场景与高可用架构设计实践
摘要:作为全球领先的对象存储服务,Amazon S3凭借其高扩展性、持久性和安全性,已成为企业云原生架构的核心组件。本文将深入探讨S3的典型技术场景,并揭秘其背后的架构设计逻辑。 一、AWS S3核心技术特性解析 Amazon Simple Storag…...
系统学习算法:专题十二 记忆化搜索
什么是记忆化搜索,我们先用一道经典例题来引入,斐波那契数 题目一: 相信一开始学编程语言的时候,就一定碰到过这道题,在学循环的时候,我们就用for循环来解决,然后学到了递归,我们又…...
Redis基操
redis 存储在内存中 key-value存储 主要存储热点数据(短时间大量的访客去访问) 启动命令 redis-server.exe redis.windows.conf 客户端链接redis服务器 redis-cli.exe redis-cli.exe -h localhost -p 6379 redis-cli.exe -h localhost -p 6379 -a 123456 退出 exit keys * 命…...
基于 GEE 计算并下载研究区年均叶面积指数 LAI 和光合有效辐射分量 FPAR
目录 1 完整代码 2 运行结果 1 完整代码 var table table; var collection ee.ImageCollection(MODIS/061/MOD15A2H).filterDate(2023-01-01, 2023-12-30).filterBounds(table); // LAI配色 var colorLai {min: 0,max: 100,palette: [ffffff, fde0d4, fcc4ac, faa784, f…...
软考——WWW与HTTP
1.万维网(world wide web) 是一个规模巨大的、可以资源互联的资料空间。由URL进行定位,通过HTTP协议传送给使用者,又由HTML来进行文件的展现。 它的主要组成部分是:URL、HTTP、HTML。 (1)URL…...
sqli-labs-master第46关
目录 报错注入 直接注入 数据库名 数据库中的表名 users表结构: users表数据: python脚本注入 直接注入 获取数据库名 获取表名 获取表结构 获取数据 布尔盲注 获取数据库名 获取表名 获取表结构 获取数据 报错注入 直接注入 数据库名…...
opencv交叉编译报错:undefined reference to `png_riffle_palette_neon
序偶NEON 概述 NEON(Nested Enhanced Vector Instruction Set)是 ARM 架构中的一种高级 SIMD(Single Instruction, Multiple Data,单指令多数据)扩展技术。它专为加速多媒体和信号处理任务而设计,允许在单…...
代码随想录算法训练day63---图论系列7《prim算法kruskal算法》
代码随想录算法训练 —day63 文章目录 代码随想录算法训练前言一、53. 寻宝—prim算法打印出来最小生成树的每条边 二、53. 寻宝—kruskal算法打印出来最小生成树的每条边 总结 前言 今天是算法营的第63天,希望自己能够坚持下来! 今天继续图论part&…...
算法日常刷题笔记(2)
为保持刷题的习惯 计划一天刷3-5题 然后一周总计汇总一下 这是第二篇笔记 笔记时间为2月17日到2月23日 第一天 找到初始输入字符串 找到初始输入字符串 Ihttps://leetcode.cn/problems/find-the-original-typed-string-i/ Alice 正在她的电脑上输入一个字符串。但是她打字技…...
C# httpclient 和 Flurl.Http 的测试
关于C#调用接口或Post,Flurl封装了httpclient, CSDN有哥们提供了一个公网的测试网站,可以测试Post调用,我写了2个函数,测试httpclient和Flurl使用Post: async 和 await 是成对使用的,为了接受web异步返回的数据,winfor…...
关于ES中text类型时间字段范围查询的结构化解决方案
前言 有关es中text类型的时间字段范围查询的问题,比如: {"query": {"range": {"insertTime": {"gte": "2025-02-01T00:00:00","lte": "2025-11-30T23:59:59","format&quo…...
四元数 欧拉角
orientation 是表示物体在三维空间中的 旋转姿态 的数据结构。它通常使用 四元数(Quaternion) 来表示旋转。四元数是一种数学工具,用于描述三维空间中的旋转,相比欧拉角(Euler Angles)和旋转矩阵࿰…...
Linux项目自动化构建工具-make/Makefile (linux第六课)
目录 背景 介绍 依赖关系的格式 依赖方法的格式 原理 背景 会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定…...
Java 登录框架
Java框架中常用的几种成熟的token生成框架对比 - 白露~ - 博客园 SpringBoot整合sa-token,jwt登录及拦截器鉴权Demo_只有在集成 sa-token-jwt 插件后才可以使用 extra 扩展参数-CSDN博客 推荐一款轻量级权限认证框架Sa-Token,集成JWT和Redis轻松实现认…...
人工智能、机器学习、深度学习和大语言模型之间的关系
人工智能(AI)、机器学习(ML)、深度学习(DL)和大语言模型(LLM)之间是逐层包含且技术递进的关系,具体如下: 1. 层级关系 人工智能(AI)…...
项目组合管理:优化项目选择与资源分配——从战略到实战的全流程指南
在复杂的商业环境中,企业往往需要同时推进多个项目以支撑战略目标。然而,资源有限、目标冲突、优先级模糊等问题常导致项目失败或资源浪费。项目组合管理(Project Portfolio Management, PPM) 正是解决这一痛点的系统性方法。它通…...
zabbix排障-zabbix监控的主机出现可用性灰色或者红色问题
目录 解决zabbix-agent可用性灰色的办法: 解决zabbix可用性红色的方法: 在zabbix日常的使用中 我们会遇到很多的问题 就比如今天我做好zabbix-server和zabbix-agent两台机器的配置 然后在wen页面上发现两台主机都有可用性的问题 如下图 解决zabbix-agent可用性灰色的办法: …...
C语言(13)------------>do-while循环
1.do-while循环的语法 我们知道C语言有三大结构,顺序、选择、循环。我们可以使用while循环、for循环、do-while循环实现循环结构。之前的博客中提及到了前两者的技术实现。可以参考: C语言(11)------------->while循…...
2025-spring boot 之多数据源管理
1、是使用Spring提供的AbstractRoutingDataSource抽象类 注入多个数据源。 创建 DataSourceConfig 配置类 通过spring jdbc 提供的带路由的抽象数据源 AbstractRoutingDataSource import org.springframework.beans.factory.annotation.Autowired; import org.springframew…...
自动驾驶两个传感器之间的坐标系转换
有两种方式可以实现两个坐标系的转换。 车身坐标系下一个点p_car,需要转换到相机坐标系下,旋转矩阵R_car2Cam,平移矩阵T_car2Cam。点p_car在相机坐标系下记p_cam. 方法1:先旋转再平移 p_cam T_car2Cam * p_car T_car2Cam 需要注…...
DeepSeek 细节之 MoE
DeepSeek 细节之 MoE DeepSeek 团队通过引入 MoE(Mixture of Experts,混合专家) 机制,以“分而治之”的思想,在模型容量与推理成本之间找到了精妙的平衡点,其中的技术实现和细节值得剖思 Transformer 演变…...
SeaCMS V9海洋影视管理系统报错注入
漏洞背景 SQL 注入攻击是当前网络安全中最常见的一种攻击方式,攻击者可以利用该漏洞访问或操作数据库,造成数据泄露或破坏。通常发生在开发人员未能正确处理用户输入时。 在 SeaCMS V9 中,用户输入(如登录、评论、分页、ID 等&a…...
Cannot deserialize instance of java.lang.String out of START_ARRAY token
这个错误 Cannot deserialize instance of java.lang.String out of START_ARRAY token 表示 Jackson 正在尝试将一个 JSON 数组反序列化成一个 String 类型的字段,但是 JSON 中传递的是一个数组而不是单一的字符串。 具体来说,这段堆栈信息:…...
LeetCode 解题思路 1(Hot 100)
解题思路: 使用哈希表优化查找:利用哈希表存储已遍历元素的值及其索引,将查找时间从O(n)降至O(1)。一次遍历:遍历数组,对每个元素计算其补数(target - nums[i]),若补数存在于哈希表…...
js中的await与async的使用
以下两个方法,区别只在有没有catch,使用的时候却要注意 // 封装请求方法,同步loading状态出去 export const fetchWithLoading async (fn: Function, params: any, loading: Ref) > {loading.value true;try {return await fn(params);…...
蓝耘科技上线 DeepSeek 满血版,500万tokens免费送
🌟 嗨,我是Lethehong!🌟 🌍 立志在坚不欲说,成功在久不在速🌍 🚀 欢迎关注:👍点赞⬆️留言收藏🚀 🍀欢迎使用:小智初学…...
【入门音视频】音视频基础知识
🌈前言🌈 这个系列在我学习过程中,对音视频知识归纳总结的笔记。因为音视频相关讲解非常稀少,所以我希望通过这个音视频系列,跟大家一起学习音视频,希望减少初学者在学习上的压力。同时希望也欢迎指出文章的…...
w~视觉~合集13
我自己的原文哦~ https://blog.51cto.com/whaosoft/13384038 #xxx w视觉合集13~17没了.... #ViTAR 作者提出了一种新颖的架构:任意分辨率的视觉 Transformer (ViTAR)。ViTAR中的自适应标记合并功能使模型能够自适应地处理可变分辨率图像…...
DeepSeek+Kimi 一键生成100种PPT
一 简介 PPT在工作中经常用到,无论是给老板汇报,还是同事、朋友之间的分享,或是去见投资人:) ,都离不开它,然而写PPT经常让人感觉不胜其烦,无论是逻辑的展开、还是页面的布局、字体、配图,都像个…...
【Qt之QQuickWidget】QML嵌入QWidget中
由于我项目开始使用Widgets,换公司后直接使用QML开发,没有了解过如何实现widget到qml过渡,恰逢面试时遇到一家公司希望从widget迁移到qml开发,询问相关实现,一时语塞,很尴尬,粗略研究并总结下。 对qwidget嵌…...
Apache Flink CDC (Change Data Capture) mysql Kafka
比如使用 Flink CDC , 监听mysql bin-log日志实现数据的实时同步, 发送到kafka springboot整合flink cdc监听数据库数据 阿里开源的神仙工具,完美实现数据同步!#程序员阿里开源的这个神器很好很强大。阿里开源的这个神器全面超越Canal,果然在…...
Week1_250217~250223_OI日志(待完善)
W1_250217~250223_OI日志 250217大致安排题目 250218大致安排题目 250219大致安排 250217 大致安排 上午讲了树上启发式合并,中午和下午补了上午的题,额外做了一道。 题目 U41492 树上数颜色 (老师自己出的,实在是太典中点了&…...
线性模型 - 学习总结
本文对前面博文中所学的机器学习的知识进行总结,以便整体上加深对机器学习的理解。 一、机器学习三要素:模型、学习准则、优化算法 机器学习是从有限的观测数据中学习(或“猜测”)出具有一般性的规律,并 可以将总结出来的规律推广应用到未观…...
IP----访问服务器流程
1.访问服务器流程 1.分层 1.更利于标准化 2.降低层次之间的关联性---每一层都只完成自身层次所执行的功能--每一层都在下层的基础上提供增值服务 1.应用层 抽象语言---编码---提供人机交互的接口 2.表示层 编码--二进制,压缩解压缩、格式转换 3.会话层 建立…...
Visual Studio 中 C/C++ 函数不安全警告(C4996)终极解决方案:分场景实战指南
问题描述 在 Visual Studio 中编写 C/C 代码时,使用 scanf、strcpy、fopen 等传统函数会触发以下警告: C4996: xxx: This function or variable may be unsafe. Consider using xxx_s instead. 根本原因: 这些函数缺乏缓冲区溢出检查&#…...
DeepSeek写俄罗斯方块手机小游戏
DeepSeek写俄罗斯方块手机小游戏 提问 根据提的要求,让DeepSeek整理的需求,进行提问,内容如下: 请生成一个包含以下功能的可运行移动端俄罗斯方块H5文件: 核心功能要求 原生JavaScript实现,适配手机屏幕 …...
小程序高度问题背景scss
不同的机型,他的比例啥的都会不一样,同样的rpx也会有不同的效果。所以这里选择了取消高度。 <view class"box-border" :style"{padding-top: ${navHeight}px,}"><!-- 已登录 --><view v-if"userStore.userInfo&…...
浅析 DeepSeek 开源的 FlashMLA 项目
浅析 DeepSeek 开源的 FlashMLA 项目 DeepSeek 开源周 Day 1(2025 年 2 月 24 日)放出的开源项目——FlashMLA,是一款针对 Hopper 架构 GPU 高效多层级注意力 (Multi-Level Attention, MLA) 解码内核,专门为处理变长序列问题而设…...
【Blender】二、建模篇--08,小狐狸角色建模
这堂课呢 我们来完成本套课程建模片的最后一个模型 小狐狸 这堂课呢 主要想让大家一起走一遍角色建模的一个基本流程 让你以后遇到类似的模型时候有一个基本的建模思路 那我们现在就开始吧 2 00:00:16,830 --> 00:00:24,390 我们还是在我们之前建模马拉松的那个文件里面继…...
【Gin-Web】Bluebell社区项目梳理6:限流策略-漏桶与令牌桶
本文目录 一、限流二、漏桶三、令牌桶算法四、Gin框架中实现令牌桶限流 一、限流 限流又称为流量控制,也就是流控,通常是指限制到达系统的并发请求数。 限流虽然会影响部分用户的使用体验,但是能一定程度上保证系统的稳定性,不至…...
MySQL 数据库基础
1. MySQL 数据库基础 在这一部分,我们将学习 MySQL 的基本概念和常见的数据库操作,帮助你掌握如何创建数据库、表,并进行数据的增、删、改操作。同时,我们还会探讨一些常见的错误示例及其原因,帮助你避免常见的陷阱。…...
如何查看java的字节码文件?javap?能用IDEA吗?
编译指令: javac YourProject.java 查看字节码文件的指令: javap -c -l YourProject.class 不添加-c指令就不会显示字节码文件: 不添加 -l 就不会显示源代码和字节码文件的对应关系: 添加-l之后多出来这些: IDEA不太…...
实战技巧:如何快速提高网站收录的权威性?
快速提高网站收录的权威性是一个系统性的工作,涉及内容质量、网站结构、外部链接、用户体验等多个方面。以下是一些实战技巧,可以帮助你快速提升网站收录的权威性: 一、提升内容质量 原创性: 确保网站内容具备高质量与原创性&a…...