news 2026/4/16 9:25:08

SpringCloud-02-LoadBalance服务调用的负载均衡

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SpringCloud-02-LoadBalance服务调用的负载均衡

一、概述

一般情况下我们所说的负载均衡通常都是指服务端负载均衡,负载均衡器会维护一个可用的后端服务器清单,然后通过心跳机制来删除故障的服务端节点以保证清单中都是可以正常访问的服务端节点,此时当客户端的请求到达负载均衡服务器时,负载均衡器按照某种配置好的规则从可用服务端清单中选出一台服务器去处理客户端的请求。

客户端负载均衡和服务端负载均衡最大的区别在于服务清单所存储的位置。在客户端负载均衡中,所有的客户端节点都有一份自己要访问的服务端清单,这些清单统统都是从Eureka服务注册中心获取的。在Spring Cloud中我们如果想要使用客户端负载均衡,方法很简单,开启@LoadBalanced注解即可,这样客户端在发起请求的时候会先自行选择一个服务端,向该服务端发起请求,从而实现负载均衡。

SpringCloud原有的客户端负载均衡方案Ribbon已经被废弃,取而代之的是SpringCloud LoadBalancer。

相比较于Ribbon,Spring Cloud LoadBalancer不仅能够支持RestTemplate,还支持WebClient。WeClient是Spring Web Flux中提供的功能,可以实现响应式异步请求,因此学习Spring Cloud LoadBalancer之前,建议先了解下Spring Web Flux。

二、解析

LoadBalancer 在工作时分成两步:

  • 第一步,先选择ConsulServer从服务端查询并拉取服务列表,知道了它有多个服务(上图3个服务),这3个实现是完全一样的,默认轮询调用谁都可以正常执行。类似生活中求医挂号,某个科室今日出诊的全部医生,客户端你自己选一个。
  • 第二步,按照指定的负载均衡策略从server取到的服务注册列表中由客户端自己选择一个地址,所以LoadBalancer是一个客户端的负载均衡器。

三、默认算法

1、随机

2、轮询

四、负载均衡基础使用

@LoadBalanced

@Configuration public class RestTemplateConfig{ @Bean @LoadBalanced //使用@LoadBalanced注解赋予RestTemplate负载均衡的能力 public RestTemplate restTemplate(){ return new RestTemplate(); } }

五、算法切换

由默认轮询切换为随机算法:

@Configuration @LoadBalancerClient(value = "cloud-payment-service",configuration = RestTemplateConfig.class) public class RestTemplateConfig{ @Bean @LoadBalanced //使用@LoadBalanced注解赋予RestTemplate负载均衡的能力 public RestTemplate restTemplate(){ return new RestTemplate(); } @Bean ReactorLoadBalancer<ServiceInstance> randomLoadBalancer(Environment environment,LoadBalancerClientFactory loadBalancerClientFactory) { String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME); return new RandomLoadBalancer(loadBalancerClientFactory.getLazyProvider(name, ServiceInstanceListSupplier.class), name); } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 2:44:46

springboot图片视频综合新闻资讯管理系统vue

目录具体实现截图项目介绍论文大纲核心代码部分展示可定制开发之亮点部门介绍结论源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作具体实现截图 本系统&#xff08;程序源码数据库调试部署讲解&#xff09;同时还支持Python(flask,django)、…

作者头像 李华
网站建设 2026/4/13 18:37:49

ssm农产品果蔬销售商城vue 协同过滤算法 echart可视化

目录具体实现截图项目介绍论文大纲核心代码部分展示可定制开发之亮点部门介绍结论源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作具体实现截图 本系统&#xff08;程序源码数据库调试部署讲解&#xff09;同时还支持Python(flask,django)、…

作者头像 李华
网站建设 2026/4/16 2:44:33

电动汽车充电负荷的蒙特卡洛预测方法附matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。 &#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知,完整Matlab代码获取及仿…

作者头像 李华
网站建设 2026/4/15 9:42:56

用Conda还是Docker?PyTorch环境配置对比分析

用Conda还是Docker&#xff1f;PyTorch环境配置的实战抉择 在深度学习项目中&#xff0c;你有没有遇到过这样的场景&#xff1a;本地训练好的模型换一台机器就跑不起来&#xff1f;明明 pip install 全部成功了&#xff0c;却提示 CUDA 版本不兼容&#xff1b;或者同事说“我这…

作者头像 李华
网站建设 2026/4/13 6:17:39

记录一下:电子工业 · 2025 年度优秀作者

记录一下&#xff1a;电子工业 2025 年度优秀作者最近收到一份来自 电子工业出版社博文视点 的认可&#xff1a; 2025 年度优秀作者。这是一次值得记录的肯定&#xff0c;也是一种动力。 它说明这段时间的持续写作&#xff0c;并不是自说自话。但也仅此而已。 这绝不是骄傲的资…

作者头像 李华
网站建设 2026/4/11 16:12:14

Git submodule管理子模块:整合多个PyTorch项目

Git Submodule 与 PyTorch-CUDA 镜像协同&#xff1a;构建可复现的深度学习开发体系 在现代 AI 工程实践中&#xff0c;一个常见的挑战是——如何让多个团队并行开发模型组件的同时&#xff0c;又能快速、稳定地集成到统一训练流程中&#xff1f;更进一步&#xff0c;当新成员加…

作者头像 李华