Spring Cloud LoadBalancer (负载均衡)

目录

什么是负载均衡

服务端负载均衡

客户端负载均衡

Spring Cloud LoadBalancer快速上手

启动多个product-service实例

测试负载均衡

负载均衡策略

自定义负载均衡策略


什么是负载均衡


负载均衡(Load Balance,简称 LB) , 是高并发, 高可用系统必不可少的关键组件。

当服务流量增大时,通常会采用增加机器的方式进行扩容,负载均衡就是用来在多个机器或者其他资源中,,按照⼀定的规则合理分配负载。

负载均衡分为服务端负载均衡和客户端负载均衡。


服务端负载均衡


在服务端进行负载均衡的算法分配。

比较有名的服务端负载均衡器是Nginx。请求先到达Nginx负载均衡器,,然后通过负载均衡算法,在多个服务器之间选择⼀个进行访问。

如图:


客户端负载均衡


把负载均衡的功能以库的方式集成到客户端,而不再是由一台指定的负载均衡设备集中提供。

比如Spring Cloud的Ribbon,请求发送到客户端,客户端从注册中心(比如Eureka)获取服务列表在发送请求前通过负载均衡算法选择⼀个服务器,然后进行访问。

Ribbon是Spring Cloud早期的默认实现,由于不维护了,所以最新版本的Spring Cloud负载均衡集成的是Spring Cloud LoadBalancer(Spring Cloud官方维护)。

如图:

客户端负载均衡和服务端负载均衡最大的区别在于服务清单所存储的位置。


Spring Cloud LoadBalancer快速上手


(1)给 RestTemplate 这个Bean添加 @LoadBalanced 注解就可以。

如代码:

@Configurationpublic class BeanConfig {@Bean@LoadBalancedpublic RestTemplate restTemplate(){return new RestTemplate();}
}

(2)修改IP端口号为服务名称。 

public OrderInfo selectOrderById(Integer orderId) {OrderInfo orderInfo = orderMapper.selectOrderById(orderId);
//String url = "http://127.0.0.1:9090/product/"+ orderInfo.getProductId();String url = "http://product-service/product/" + orderInfo.getProductId();ProductInfo productInfo = restTemplate.getForObject(url,ProductInfo.class);orderInfo.setProductInfo(productInfo);return orderInfo;}

上述的代码,是基于nacos实现的,order是一个点单的服务,还有一个产品的服务(product)

产品服务测试启动多个服务,来测试负载均衡。


启动多个product-service实例


启动多个product-service实例

如图:


测试负载均衡


连续多次发起请求: http://127.0.0.1:8080/order/1

观察product-service的日志, 会发现请求被分配到这3个实例上了

如图:


负载均衡策略


  负载均衡策略是⼀种思想,无论是哪种负载均衡器,它们的负载均衡策略都是相似的SpringCloud LoadBalancer 仅支持两种负载均衡策略:轮询策略 和 随机策略

1. 轮询(Round Robin):轮询策略是指服务器轮流处理用户的请求,这是⼀种实现最简单,也最常用的策略,生活中也有类似的场景,比如学校轮流值日,或者轮流打扫卫生。

2. 随机选择(Random):随机选择策略是指随机选择⼀个后端服务器来处理新的请求。


自定义负载均衡策略


Spring Cloud LoadBalancer 默认负载均衡策略是轮询策略,实现是 RoundRobinLoadBalancer,如果服务的消费者如果想采用随机的负载均衡策略,也非常简单。


(1)定义随机算法对象, 通过 @Bean 将其加载到 Spring 容器中

如代码:

public class LoadBalancerConfig {@BeanReactorLoadBalancer<ServiceInstance> randomLoadBalancer(Environmentenvironment,LoadBalancerClientFactory loadBalancerClientFactory) {String name =environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);System.out.println("=============="+name);return newRandomLoadBalancer(loadBalancerClientFactory.getLazyProvider(name,ServiceInstanceListSupplier.class), name);}}

注意:该类需要满足:

1. 不用 @Configuration 注释

2. 在组件扫描范围内


(2) 使用 @LoadBalancerClient 或者 @LoadBalancerClients 注解

在 RestTemplate 配置类上方,使用 @LoadBalancerClient 或 @LoadBalancerClients 注解,可以对不同的服务提供方配置不同的客户端负载均衡算法策略。

如代码:

@LoadBalancerClient(name = "product-service", configuration =LoadBalancerConfig.class)@Configurationpublic class BeanConfig {@Bean@LoadBalancedpublic RestTemplate restTemplate(){return new RestTemplate();}}

@LoadBalancerClient 注解说明

(1) name:该负载均衡策略对哪个服务生效(服务提供方)。

(2)configuration:该负载均衡策略用哪个负载均衡策略实现。


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

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

相关文章

OpenCloudOS简介

OpenCloudOS是一款开源的云操作系统&#xff0c;具有诸多特性和优势&#xff0c;广泛应用于多个领域。 一、项目背景 开源社区发起&#xff1a;由操作系统、云平台、软硬件厂商与个人共同倡议发起的操作系统社区项目&#xff0c;旨在打造全面中立、开放、安全、稳定易用、高…

NLP 中文拼写检测纠正论文 Automatic-Corpus-Generation

拼写纠正系列 NLP 中文拼写检测实现思路 NLP 中文拼写检测纠正算法整理 NLP 英文拼写算法&#xff0c;如果提升 100W 倍的性能&#xff1f; NLP 中文拼写检测纠正 Paper java 实现中英文拼写检查和错误纠正&#xff1f;可我只会写 CRUD 啊&#xff01; 一个提升英文单词拼…

区块链安全常见的攻击合约和简单复现,附带详细分析——不安全调用漏洞 (Unsafe Call Vulnerability)【6】

区块链安全常见的攻击分析——不安全调用漏洞 Unsafe Call Vulnerability 区块链安全常见的攻击合约和简单复现&#xff0c;附带详细分析——不安全调用漏洞 (Unsafe Call Vulnerability)【6】1.1 漏洞合约1.2 漏洞分析1.3 攻击步骤分析1.4 攻击合约 区块链安全常见的攻击合约和…

生成excel文件(有备注和表头的情况)

要使用 Java 导出 Excel 文件&#xff0c;并且通过 ExcelProperty 注解进行列的映射&#xff0c;可以利用 EasyExcel 库。EasyExcel 是阿里巴巴开源的一款高性能 Excel 读写工具&#xff0c;它支持通过注解将类与 Excel 的列进行映射&#xff0c;简化了 Excel 操作的复杂性。 …

Excel 面试 01 “Highlight in red the 10 lowest orders”

要在 Excel 中完成“Highlight in red the 10 lowest orders”的任务&#xff0c;可以使用条件格式&#xff08;Conditional Formatting&#xff09;。以下是详细步骤&#xff1a; 步骤 1&#xff1a;选择数据范围 打开包含订单数据的工作表。选中包含订单金额或数量的单元格范…

留学生交流互动系统|Java|SSM|VUE| 前后端分离

【技术栈】 1⃣️&#xff1a;架构: B/S、MVC 2⃣️&#xff1a;系统环境&#xff1a;Windowsh/Mac 3⃣️&#xff1a;开发环境&#xff1a;IDEA、JDK1.8、Maven、Mysql5.7 4⃣️&#xff1a;技术栈&#xff1a;Java、Mysql、SSM、Mybatis-Plus、VUE、jquery,html 5⃣️数据库可…

Junit如何禁用指定测试类,及使用场景

在JUnit中禁用指定测试类可以通过多种方式实现&#xff0c;具体取决于使用的JUnit版本&#xff08;JUnit 4 或 JUnit 5&#xff09;。以下是针对两个版本的详细说明以及它们可能的使用场景&#xff1a; JUnit 4 禁用整个测试类 可以使用Ignore注解来忽略整个测试类。这将导致…

算法基础一:冒泡排序

一、冒泡排序 1、定义 冒泡排序&#xff08;英语&#xff1a;Bubble Sort&#xff09;是一种简单的排序算法。它重复地走访过要排序的数列&#xff0c;一次比较两个元素&#xff0c;如果他们的顺序&#xff08;如从大到小、首字母从A到Z&#xff09;错误就把他们交换过来。 …

Spark大数据开发与应用案例(视频教学版)(一)

作者&#xff1a;余辉 简介&#xff1a;余辉&#xff0c;硕士毕业于中科院&#xff0c;从事IT行业12年。专注于大数据和机器学习。在数据团队担任过的角色&#xff1a;研发、架构师、负责人、讲师。数据知识产权&#xff1a;出版大数据书籍【1】本&#xff0c;论文【2】篇&…

跨域请求问题

跨域请求简介 跨域请求&#xff1a;通过一个域的JavaScript脚本和另外一个域的内容进行交互 域的信息&#xff1a;协议、域名、端口号 同域&#xff1a;当两个域的协议、域名、端口号均相同 如下所示&#xff1a; 同源【域】策略&#xff1a;在浏览器中存在一种安全策略就是…

探索开源项目 kernel:技术的基石与无限可能

在开源的广袤世界中&#xff0c;有一颗璀璨的明星——kernel&#xff08;https://gitee.com/openeuler/kernel&#xff09;&#xff0c;它宛如一座技术的宝藏&#xff0c;蕴含着无数的智慧与创新&#xff0c;为众多开发者所瞩目和敬仰。 一、初窥 kernel 项目 当我第一次接触…

Spring Boot Actuator、Spring Boot Actuator使用、Spring Boot Actuator 监控、Spring程序监控

SpringBoot四大核心之actuator——程序监控器 1. 添加 Spring Boot Actuator 依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> 2. 配置 …

C++“STL之String”

​ &#x1f339;个人主页&#x1f339;&#xff1a;喜欢草莓熊的bear &#x1f339;专栏&#x1f339;&#xff1a;C入门 目录 ​编辑 前言 一、STL简介 1.1 STL是什么&#xff1f; 1.2 STL的版本&#xff08;这个不是很重要了解即可&#xff09; 1.3 STL的六大组件 二…

语言模型评价指标

1. BLEU&#xff08;Bilingual Evaluation Understudy&#xff09; 目标&#xff1a;衡量生成文本和参考文本之间的词汇相似性。 计算步骤&#xff1a; N-gram 匹配&#xff1a; 将生成文本和参考文本分解成 1-gram、2-gram、…、N-gram&#xff08;通常取到 4-gram&#xff…

2-199基于Matlab-GUI的混合粒子群算法求解TSP问题

基于Matlab-GUI的混合粒子群算法求解TSP问题&#xff0c;多种路径可选&#xff0c;可设置微粒数目、迭代次数&#xff0c;动态展示路径规划过程及迭代曲线&#xff0c;得到叫佳的路径&#xff0c;输出最优路径序列及最终距离。程序已调通&#xff0c;可直接运行。 2-199基于Ma…

【ArcGIS Pro】完整的nc文件整理表格模型构建流程及工具练习数据分享

学术科研啥的要用到很多数据&#xff0c;nc文件融合了时间空间数据是科研重要文件。之前分享过怎样将nc文件处理成栅格后整理成表格。小编的读者还是有跑不通整个流程的&#xff0c;再来做一篇总结篇&#xff0c;也分享下练习数据跟工具&#xff0c;如果还是弄不了的&#xff0…

2412d,d语言中写汇编

原文 嗨,我只是想共享该要点,它展示了如何在ASM中用D编写你好. D中写汇编非常方便!这是我写的: extern(C) int main() {auto hip "hello D\n".ptr;size_t len 8;//write(1,消息,长度)asm {mov RDX, len;//缓冲长度mov RSI, hip;//消息缓冲mov EDI, 1;//Stdout文描…

VM虚拟机配置ubuntu网络

目录 桥接模式 NAT模式 桥接模式 特点&#xff1a;ubuntu的IP地址与主机IP的ip地址不同 第一部分&#xff1a;VM虚拟机给ubuntu的网络适配器&#xff0c;调为桥接模式 第二部分&#xff1a;保证所桥接的网络可以上网 第三部分&#xff1a;ubuntu使用DHCP&#xff08;默认&…

C++软件设计模式之观察者模式

观察者模式的动机意图 观察者模式&#xff08;Observer Pattern&#xff09;是一种行为型设计模式&#xff0c;它定义了对象之间的一种一对多的依赖关系&#xff0c;使得当一个对象的状态发生改变时&#xff0c;所有依赖于它的对象都能够自动收到通知并进行相应的更新。 动机…