Spring Cloud——LoadBalancer

Spring Cloud——LoadBalancer

  • 一、负载均衡(LoadBalance)
    • 1.LoadBalancer本地负载均衡客户端 VS Nginx服务端负载均衡区别
  • 二、LoadBalancer
    • 1.Spring RestTemplate as a LoadBalancer Client
    • 2.编码使用DiscoveryClient动态获取所有上线的服务列表
    • 3.从默认的轮询,切换为随机算法

一、负载均衡(LoadBalance)

  • 负载均衡(Load Balance),简单的说就是将用户的请求分摊到多个服务上,从而使系统达到高可用性,常见的负载均衡有软件NginxLVS,硬件F5等。
  • Spring Cloud LoadBalancer是由Spring Cloud官网提供的一个开源的、简单易用的客户端负载均衡器,它包含在Spring Cloud Commons中用来替换以前的Ribbon组件。想比较于RibbonSpring Cloud LoadBalancer不仅能够支持RestTemplate,还支持WebClientWebClientSpring Web Flux中提供的功能,可以实现响应式异步请求)

1.LoadBalancer本地负载均衡客户端 VS Nginx服务端负载均衡区别

  • Nginx是服务器负载均衡,客户端所有请求都会交给Nginx,然后由Nginx实现转发请求,即负载均衡是由服务端实现的。
  • LoadBalancer本地负载均衡,在调用微服务接口时候,会在注册中心上获取注册信息服务列表之后缓存到JVM本地,从而在本地实现RPC远程服务调用技术。

二、LoadBalancer

在这里插入图片描述

  • LoadBalancer工作步骤如下:
    • 第一步:先从ConsulServer查询并拉取服务列表,知道了它有多个服务,每个服务实现是完全一样的,默认轮询调用谁都可以正常执行。
    • 第二步:按照指定的负载均衡策略从server取到的服务注册列表中由客户端自己选择一个地址,所以LoadBalancer是一个客户端的负载均衡器。

1.Spring RestTemplate as a LoadBalancer Client

  • 第一步,在服务调用方加入LoadBalancer组件:
    <!--loadbalancer-->
    <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId>
    </dependency>
    
  • 第二步,赋予RestTemplate负载均衡的能力:
    @Configuration
    public class RestTemplateConfig {/*** 使用 @LoadBalanced 注解赋予 RestTemplate 负载均衡的能力*/@Bean@LoadBalancedpublic RestTemplate restTemplate(){return new RestTemplate();}
    }
    

2.编码使用DiscoveryClient动态获取所有上线的服务列表

  • 负载均衡算法:rest接口第几次请求数%服务器集群总数量 = 实际调用服务器位置下标,每次服务器重启后rest接口计数从1开始。
     @Resourceprivate DiscoveryClient discoveryClient;@GetMapping("/discovery")public ResponseResult<List<String>> discovery() {List<String> list = new ArrayList<>();List<String> services = discoveryClient.getServices();for (String element : services) {List<ServiceInstance> instances = discoveryClient.getInstances(element);for (ServiceInstance ele : instances) {list.add(ele.getServiceId() + "     " + ele.getHost() + "       " + ele.getPort() + "       " + ele.getUri());}}return ResponseResult.success(list);}
    

3.从默认的轮询,切换为随机算法

/*** 将负载均衡的默认轮询算法,切换为随机算法*/
@Configuration
@LoadBalancerClient(//下面的value值大小写一定要和consul里面的名字一样,必须一样value = "cloud-payment-service", configuration = RestTemplateConfig.class)
public class RestTemplateConfig {@Bean@LoadBalanced //使用@LoadBalanced注解赋予RestTemplate负载均衡的能力public RestTemplate restTemplate() {return new RestTemplate();}@BeanReactorLoadBalancer<ServiceInstance> randomLoadBalancer(Environment environment,LoadBalancerClientFactory loadBalancerClientFactory) {String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);return new RandomLoadBalancer(loadBalancerClientFactory.getLazyProvider(name, ServiceInstanceListSupplier.class), name);}
}

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

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

相关文章

《自动机理论、语言和计算导论》阅读笔记:p215-p351

《自动机理论、语言和计算导论》学习第 11 天&#xff0c;p215-p351总结&#xff0c;总计 37 页。 一、技术总结 1.constrained problem 2.Fermat’s lats theorem Fermat’s Last Theorem states that no three positive integers a, b and c satisfy the equation a^n b…

SNMP自动遍历所有节点并GET

echo on setlocal EnableDelayedExpansion SnmpWalk.exe -r:10.253.2.38 -v:2 -t:5 -c:“public_default” > 1.txt REM snmp mib节点遍历前记录设备cpu和内存利用率 SnmpGet.exe -q -r:10.253.2.38 -v:2 -t:5 -c:“public_default” -o:1.3.6.1.4.1.31648.3.15.10.0 >&…

unity中 UnityWebRequest.Post和 UnityWebRequest uwr = new UnityWebRequest两种方法有什么区别

在Unity中&#xff0c;UnityWebRequest.Post 和 UnityWebRequest uwr new UnityWebRequest(...) 是两种不同的方式来创建和发送HTTP POST请求&#xff0c;但它们之间有一些关键的区别和用法上的差异。 1. UnityWebRequest.Post (静态方法) UnityWebRequest.Post 是一个静态方…

PostgreSQL数据类型总结

PostgreSQL数据库相比其他数据库&#xff0c;支持更多的数据类型&#xff0c;包括常用的数值类型、字符串类型、日期/时间类型外&#xff0c;还有几何类型、网络地址类型、xml类型和json类型&#xff0c;且还可以使用CREATE TYPE自行添加数据类型&#xff0c;本文主要介绍Postg…

过渡与动画

单元素/组件过渡 Vue在插入、更新或者移除 DOM 时&#xff0c;提供多种不同方式的过渡效果&#xff08;一个淡入淡出的效果&#xff09; 在条件渲染&#xff08;使用v-if&#xff09;、条件展示&#xff08;使用v-show&#xff09;、动态组件、组件根节点等情形中&#xff0c;可…

python算法题

需求 代码 class Solution:def searchInsert(self, nums: List[int], target: int) -> int:if max(nums) >target:for i in range(len(nums)-1):if nums[i1] > target and nums[i] <target:return i1if max(nums) <target:return len(nums)if min(nums) > …

操作系统(2)——进程线程

目录 小程一言专栏链接: [link](http://t.csdnimg.cn/8MJA9)基础概念线程详解进程详解进程间通信调度常用调度算法 重要问题哲学家进餐问题问题的描述策略 读者-写者问题问题的描述两种情况策略 总结进程线程一句话 小程一言 本操作系统专栏&#xff0c;是小程在学操作系统的过…

【tcl脚本实践Demo 1】文本生成、匹配、修改、读写

引言 在芯片设计的流程中,各种EDA工具在设计、综合、布局布线、验证、时序分析等等环节都会产出大量的文件信息。这些信息是海量的,如果单纯靠程序员自己查看信息效率很低并且很容易纰漏。所以脚本语言可以很好的解决这个问题,可以利用脚本语言匹配到敏感的信息,完成对信息…

let 和 const 区别

在JavaScript中&#xff0c;let 和 const 是两种用于声明变量的关键字&#xff0c;它们都是ES6&#xff08;ECMAScript 2015&#xff09;引入的新特性&#xff0c;旨在改进变量声明的方式&#xff0c;与传统的 var 关键字相比&#xff0c;提供了更清晰的变量作用域管理和更好的…

用VHDX的方式安装Windows系统

最近尝试了用VHDX的方式安装Windows系统&#xff0c;以下为测试操作的过程。 1.创建并附加虚拟硬盘 推荐使用图形界面操作&#xff0c;磁盘管理—操作—创建 VHD&#xff0c;选择虚拟硬盘位置&#xff0c;一般放在系统盘之外。虚拟硬盘格式建议选择 VHDX&#xff0c;虚拟硬盘类…

240 基于matlab的飞行轨迹仿真程序

基于matlab的飞行轨迹仿真程序&#xff0c;多种不同的飞行轨迹&#xff0c;输出经度、纬度、高度三维轨迹&#xff0c;三个方向的飞行速度。程序已调通&#xff0c;可直接运行。 240 飞行轨迹仿真 三维轨迹 飞行速度 - 小红书 (xiaohongshu.com)

限流的学习

限流算法&#xff1a; 滑动窗口算法 滑动日志算法 漏桶算法 令牌桶算法 redis分布式限流 1、固定窗口限流 固定窗口算法又叫计数器算法&#xff0c;是一种简单方便的限流算法。主要通过一个支持原子操作的计数器来累计 1 秒内的请求次数&#xff0c;当 1 秒内计数达到限流阈值…

C#知识|面向对象编程中实例方法的封装与应用总结

哈喽,你好,我是雷工! 本节学习面向对象编程中实例方法的封装与应用,以下为学习笔记。 01 方法定义 访问修饰符 返回值类型 方法名(参数1,参数2……) {//此处编写方法的主要内容,功能实现的具体过程 return 返回值;//如果方法有返回值需要此语句,如果没有返回值,那…

Golang图片验证码的使用

一、背景 最近在使用到Golang进行原生开发&#xff0c;注册和登录页面都涉及到图片验证码的功能。找了下第三方库的一些实现&#xff0c;发现了这个库用得还是蛮多的。并且支持很多类型的验证方式&#xff0c;例如支持数字类型、字母类型、音频验证码、中文验证码等等。 项目地…

深入理解MySQL中的Undo日志

在MySQL中&#xff0c;Undo日志是一个核心组件&#xff0c;尤其在使用InnoDB存储引擎时。它对保持数据库一致性、支持事务回滚、以及多版本并发控制&#xff08;MVCC&#xff09;等功能至关重要。本文将详细介绍Undo日志的基本知识、工作原理、作用以及如何管理它。 1. Undo日…

动态规划-回文子串问题

文章目录 1. 回文子串&#xff08;647&#xff09;2. 最长回文子串&#xff08;5&#xff09;3. 分割回文串 IV&#xff08;1745&#xff09;4. 分割回文串 II&#xff08;132&#xff09;5. 最长回文子序列&#xff08;516&#xff09;6. 让字符串成为回文串的最少插入次数&am…

Vue入门篇:样式冲突scoped,data函数,组件通信,prop data单向数据流,打包发布

这里写目录标题 1.组件的样式冲突scoped2.data函数3.组件通信1.两种组件关系分类和对应的组件通信方案2.父子通信方案的核心流程 4.prop & data、单向数据流5.打包发布6.打包优化:路由懒加载 1.组件的样式冲突scoped 默认情况:写在组件中的样式会全局生效→因此很容易造成多…

【Python从入门到进阶】53、Scrapy日志信息及日志级别

接上篇《52、CrawlSpider链接提取器的使用》 上一篇我们学习了基于规则进行跟踪和自动爬取网页数据的“特殊爬虫”CrawlSpider。本篇我们来学习Scrapy的日志信息及日志级别。 一、引言 1、日志在Scrapy中的重要性 在Scrapy框架中&#xff0c;日志扮演着至关重要的角色。日志…

十三、大模型项目部署与交付

1 硬件选型 CUDA 核心和 Tensor 核心 CUDA 核心&#xff1a;是NVIDIA开发的并行计算平台和编程模型&#xff0c;用于GPU上的能用计算&#xff0c;可做很多的工作。应用在游戏、图形渲染、天气预测和电影特效Tensor 核心&#xff1a;张量核心&#xff0c;专门设计用于深度学习…

前端开发框架Vue

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl Vue概述 Vue.js&#xff08;简称Vue&#xff09;是由尤雨溪&#xff08;Evan You&#xff09;创建并维护的一款开源前端开发框架。Vue以其轻量级、易上手和高度灵活的特点&…