SpringCloud 负载均衡

目录

一、负载均衡

1、问题

2、什么是负载均衡

服务端负载均衡

客户端负载均衡

二、Spring Cloud LoadBalance

1、使用 Spring Cloud LoadBalance 

2、负载均衡策略

3、LoadBalancer 原理


一、负载均衡

1、问题

我们来看一下前面写的代码:

List<ServiceInstance> instances = discoveryClient.getInstances("product-service");
String uri = instances.get(0).getUri().toString();

在分布式架构中,一个应用通常是多实例部署的,假设我们当前的 product-service 也是多机部署的话,会出现什么问题呢?

如果⼀个服务对应多个实例呢? 流量是否可以合理的分配到多个实例呢?

点击 service

 

然后直接 run 就行了

此时, 9091 和 9092 都可以在 Eureka 注册中心查看了

我们对程序重新进行访问刷新,观察订单服务的日志

此时我们会发现,我们虽然启动了多个程序,但是始终访问的都只有其中一个服务,会导致 9091和 9092 的浪费

实际上,每次请求访问的时候是随机的,多次访问也有可能会出现 9091 和 9092

假设,我们希望第一请求对应第一台机器,第二次请求对应第二台机器....那么我们该如何实现呢?

我们可以运用取余的方法 请求计数器 % 实例数进行实现


2、什么是负载均衡

负载均衡是高并发高可用系统必不可少的组件

负载可以理解为流量、压力

均衡可以理解为把流量进行合理的分配

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

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

服务端负载均衡

比如订单服务调用商品服务,此时订单服务就是客户端,商品服务就是服务端

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

客户端负载均衡

客户端负载均衡是在客户端进行负载均衡算法的分配

客户端先在注册中心获取服务列表,接下来客户端把负载均衡以代码公共类库的方式放在客户端,然后客户端获取服务列表之后,根据算法进行选择访问

最新版本的 Spring Cloud 负载均衡集成的是 Spring Cloud LoadBalance

二、Spring Cloud LoadBalance

1、使用 Spring Cloud LoadBalance 

1、添加注解

2、修改远程调用代码


2、负载均衡策略

负载均衡策略是⼀种思想, 即按照什么样的策略进行负载的分配

Spring Cloud LoadBalancer 仅支持两种负载均衡策略: 轮询策略随机策略

轮训:服务器轮流处理用户请求

随机选择:随机选择一个后端的服务器处理新的请求

Spring Cloud LoadBalancer 默认的策略是轮训策略

如果想要实现自定义的负载均衡策略或者采用随机选择的策略该如何实现呢?

我们可以先将这个类导入项目中

public class CustomLoadBalancerConfiguration {

    @Bean
    ReactorLoadBalancer<ServiceInstance> randomLoadBalancer(Environment environment,
                                                            LoadBalancerClientFactory loadBalancerClientFactory) {
        String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);
        return new RandomLoadBalancer(loadBalancerClientFactory
                .getLazyProvider(name, ServiceInstanceListSupplier.class),
                name);
    }
}

有以下几点注意事项:

1、我们可以通过 @LoadBalancerClient 或者 @LoadBalancerClients 注解进行配置

2、我们不能使用 @Configuration  注解

3、在组件扫描范围内

我们会发现,这个注解里面有两个参数:name 和 value

name 表示当前这个负载均衡客户端对哪个服务生效


3、LoadBalancer 原理

LoadBalancer 的实现, 主要是 LoadBalancerInterceptor , 这个类会对 RestTemplate 的请求进行拦截, 然后从Eureka根据服务id获取服务列表,随后利用负载均衡算法得到真实的地址信息,替换服务id

LoadBalancerInterceptor 的源码

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

抖音矩阵云剪系统saas源码 短视频矩阵获客管理系统

2024抖音矩阵云混剪系统是一款专业的短视频营销管理工具。该系统支持多平台多账号的集中式管理&#xff0c;并实现一键式作品发布功能。它配备了智能标题生成和关键词优化工具&#xff0c;以及排名查询机制&#xff0c;帮助用户提升内容在平台上更好的矩阵管理. 智能剪辑 托管发…

java中 使用数组实现需求小案例

Date: 2024.04.08 18:32:57 author: lijianzhan 需求实现&#xff1a; 设计一个java类&#xff0c;java方法&#xff0c;根据用户手动输入的绩点&#xff0c;从而获取到绩点最高的成绩。 实现业务逻辑的代码块 import java.util.Scanner;public class PointDemo {/*** 需求&…

Python 如何实现数据驱动的接口自动化测试

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 大家在接口测试的过程中&#xff0c;很多时候会用到对CSV的读取操作&#xff0c;本文主要说明Pyt…

【Java]认识泛型

包装类 在Java中&#xff0c;由于基本类型不是继承自Object&#xff0c;为了在泛型代码中可以支持基本类型&#xff0c;Java给每个基本类型都对应了一个包装类型。 除了 Integer 和 Character&#xff0c; 其余基本类型的包装类都是首字母大写。 泛型 泛型是在JDK1.5引入的…

spring boot 3.x版本中集成spring security 6.x版本进行实现动态权限控制解决方案

一、背景 最近在进行项目从jdk8和spring boot 2.7.x版本技术架构向jdk17和spring boot 3.3.x版本的代码迁移&#xff0c;在迁移过程中&#xff0c;发现spring boot 3.3.x版本依赖的spring security版本已经升级6.x版本了&#xff0c;语法上和spring security 5.x版本有很多地方…

AntV X6 图编辑引擎速通

前言&#xff1a;参考 [AntV X6 官网](https://x6.antv.antgroup.com/) 一、简介 X6 可以快速搭建 DAG 图、ER 图、流程图、血缘图等应用。 二、快速上手 1. 安装 npm install antv/x6 --save# oryarn add antv/x6# orpnpm add antv/x6 2. 使用 2.1 初始画布 在页面中创…

【Linux进阶】文件系统3——目录树,挂载

前言 在Windows 系统重新安装之前&#xff0c;你可能会事先考虑&#xff0c;到底系统盘C盘要有多大容量&#xff1f;而数据盘D盘又要给多大容量等&#xff0c;然后实际安装的时候&#xff0c;你会发现其实C盘之前会有个100MB的分区被独立出来&#xff0c;所以实际上你就会有三个…

Java进阶----继承

继承 一.继承概述 继承是可以通过定义新的类&#xff0c;在已有类的基础上扩展属性和功能的一种技术. 案例&#xff1a;优化 猫、狗JavaBean类的设计 狗类&#xff1a;Dog 属性&#xff1a;名字 name&#xff0c;年龄 age 方法&#xff1a;看家 watchHome()&#xff0c;Gett…

QT5.12.9 通过MinGW64 / MinGW32 cmake编译Opencv4.5.1

一、安装前准备&#xff1a; 1.安装QT,QT5.12.9官方下载链接&#xff1a;https://download.qt.io/archive/qt/5.12/5.12.9/ QT安装教程&#xff1a;https://blog.csdn.net/Mark_md/article/details/108614209 如果电脑是64位就编译器选择MinGW64&#xff0c;32位就选择MinGW…

C#描述-计算机视觉OpenCV(5):直方图算法

C#描述-计算机视觉OpenCV&#xff08;5&#xff09;&#xff1a;直方图算法 前文链接图像直方图灰度直方图的计算灰度直方图的绘制BGR三通道的直方图直方图的均衡化算法相似图像检测 前文链接 文中没提到的东西&#xff0c;很可能都在前文描述过 C#描述-计算机视觉OpenCV&…

【C++深度探索】继承机制详解(二)

hello hello~ &#xff0c;这里是大耳朵土土垚~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#xff1a;大耳朵土土垚的博客 &#x1…

深入解析:抖音视频标题的Python爬虫提取方法

引言 随着短视频的兴起&#xff0c;抖音已经成为全球最受欢迎的社交媒体平台之一。对于数据分析师、市场研究人员以及内容创作者来说&#xff0c;能够从抖音上抓取数据是一项宝贵的技能。本文将深入解析如何使用Python编写爬虫程序来提取抖音视频的标题。 爬虫基础 在开始编…

K8S 上部署大数据相关组件

文章目录 一、前言二、Redis 一、前言 Artifact Hub 是一个专注于云原生应用的集中式搜索和发布平台。它旨在简化开发者在 CNCF&#xff08;Cloud Native Computing Foundation&#xff09;项目中寻找、安装和分享包与配置的过程。用户可以通过这个平台方便地发现、安装各类云原…

为什么需要重写equals和如何重写equals

首先先看Java中的 &#xff0c;比较的两个对象的地址值。 如果是基本数据类型&#xff0c;那么就是比较的是值。 如果是引用数据类型&#xff0c;比较的就是地址. object类中的equals方法也是用的&#xff1b; 所以要比较两个对象的大小&#xff0c;去调用默认的equals方法…

Apache Spark分布式计算框架架构介绍

目录 一、概述 二、Apache Spark架构组件栈 2.1 概述 2.2 架构图 2.3 架构分层组件说明 2.3.1 支持数据源 2.3.2 调度运行模式 2.3.3 Spark Core核心 2.3.3.1 基础设施 2.3.3.2 存储系统 2.3.3.3 调度系统 2.3.3.4 计算引擎 2.3.4 生态组件 2.3.4.1 Spark SQL 2.…

关系型数据库MySQL和时序数据库的区别?

时序数据库和关系型数据库是两种不同类型的数据库系统&#xff0c;它们在设计理念、存储结构、性能优化等方面有显著差异&#xff0c;以适应不同的应用场景和需求。具体对比如下&#xff1a; 数据存储结构 时序数据库&#xff1a;使用列式存储&#xff0c;每条记录通常包含时间…

MySQL资源组的使用方法

MySQL支持创建和管理资源组&#xff0c;并允许将服务器内运行的线程分配给特定的组&#xff0c;以便线程根据组可用的资源执行。组属性允许控制其资源&#xff0c;以启用或限制组中线程的资源消耗。DBA可以针对不同的工作负载适当地修改这些属性。 目前&#xff0c;CPU时间是一…

田地行走-美团2023笔试(codefun2000)

题目链接 田地行走-美团2023笔试(codefun2000) 题目内容 塔子哥是一个农民&#xff0c;他有一片 nm 大小的田地&#xff0c;共 n 行 m 列&#xff0c;其中行和列都用从 1 开始的整数编号&#xff0c;田地中有 k 个格子中埋有土豆。我们记第 a 行第 b 列的格子为 (a,b) 。塔子哥…

LM2596/LM2596S多路降压稳压DC-DC开关电源芯片详解(第二部分:电路设计)(12V转5V、12V转3.3V、任意电压转任意电压)

目录 一、固定电压&#xff08;3.3/5/12V&#xff09;模块设计实例 1.设计条件&#xff1a;VOUT5V&#xff0c;VIN(MAX)12V&#xff0c;ILOAD(MAX)3A 2.设计步骤&#xff1a; &#xff08;1&#xff09;电感的选择&#xff08;L1&#xff09; &#xff08;2&#xff09;输…

C++入门基础

前言 本篇博客讲解一下c得入门基础 &#x1f493; 个人主页&#xff1a;普通young man-CSDN博客 ⏩ 文章专栏&#xff1a;C_普通young man的博客-CSDN博客 ⏩ 本人giee:普通小青年 (pu-tong-young-man) - Gitee.com 若有问题 评论区见&#x1f4dd; &#x1f389;欢迎大家点赞&…