SpringCloud之Eureka注册中心和负载均衡

news2024/11/27 10:28:04

SpringCloud之Eureka注册中心和负载均衡

    • 微服务技术栈
    • 认识微服务
      • 单体架构
      • 分布式架构
      • 微服务
    • 微服务拆分及远程调用
      • 微服务拆分注意事项
    • Eureka注册中心
      • 提供者与消费者
      • 原理分析
        • 服务调用出现的问题
        • Eureka的作用
      • 使用流程
        • 1、搭建EurekaServer
        • 2、注册user-service
        • 3、在order-service完成服务拉取
    • Ribbon负载均衡
      • 负载均衡流程
      • 负载均衡策略
      • 饥饿加载

微服务技术栈

image-20240204192821766

认识微服务

单体架构

简介:将业务内的所有功能集中在一个项目中开发,打成一个包部署。

  1. 优点

    • 架构简单

    • 部署成本低

  2. 缺点

    • 耦合度高

分布式架构

简介:根据业务功能对系统进行拆分,每个业务模块作为独立项目开发,称为一个服务。

  1. 优点
    • 降低服务耦合
    • 有利于服务升级拓展
  2. 缺点
    • 服务治理麻烦

微服务

简介:是一种经过良好架构设计的分布式架构方案。

特征:

  • 单一职责:微服务拆分粒度更小,每个服务都对应唯一的业务能力,做到单一职责,避免重复业务开发
  • 面向服务:微服务对外暴露业务接口
  • 自治:团队独立,技术独立,数据独立,部署独立
  • 隔离性强:服务调用做好隔离、若错、降级、避免出现级联失败

微服务拆分及远程调用

微服务拆分注意事项

  1. 不同微服务,不要重复开发相同业务
  2. 微服务数据独立,不要访问其它微服务的数据库
  3. 微服务可以将自己的业务暴露为接口,供其它微服务调用

当我们某一个服务需要获取到其他服务的数据库信息时,我们就需要从当前服务向目标服务发送http请求,调用对应的接口获取数据。

  1. 在配置类中将RestTemplate注入容器
@Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
  1. 在对应服务功能下注入容器并发送http请求
@Autowired
    private RestTemplate restTemplate;

    public Order queryOrderById(Long orderId) {
        // 1.查询订单
        Order order = orderMapper.findById(orderId);
        // 2.利用restTemplate发送http请求,查询用户
        String url = "http://localhost:8081/user/" + order.getUserId();
        User user= restTemplate.getForObject(url, User.class);
        // 3.封装成Order对象
        order.setUser(user);
        // 4.返回
        return order;
    }

在这里插入图片描述

从结果可以看到成功拿到用户信息。

Eureka注册中心

提供者与消费者

  • 服务提供者:一次业务中,被其它微服务调用的服务。(提供接口给其它微服务)
  • 服务消费者:一次业务中,调用其它微服务的服务。(调用其它微服务提供的接口)

原理分析

在这里插入图片描述
在服务调用的时候,地址固定,当项目环境发生变化时,对项目很不友好。

服务调用出现的问题
  • 服务消费者该如何获取服务提供者的地址信息?
  • 如果有多个服务提供者,消费者该如何选择?
  • 消费者如何得知服务提供者的健康状态?
Eureka的作用

在这里插入图片描述

  1. 消费者该如何获取服务提供者具体信息?

    ◆服务提供者启动时向eureka注册自己的信息

    ◆eureka保存这些信息

    ◆消费者根据服务名称向eureka拉取提供者信息

  2. 如果有多个服务提供者,消费者该如何选择?

    ◆服务消费者利用负载均衡算法,从服务列表中挑选一个

  3. 消费者如何感知服务提供者健康状态?

    ◆服务提供者会每隔30秒向EurekaServer发送心跳请求,报告健康状态

    ◆eureka会更新记录服务列表信息,心跳不正常会被剔除

    ◆消费者就可以拉取到最新的信息

使用流程

1、搭建EurekaServer

搭建EurekaServer服务步骤如下:
1.创建项目,引入spring-cloud-starter-netflix-eureka-server的依赖

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

2.编写启动类,添加@EnableEurekaServer注解
3.添加application.yml文件,编写下面的配置:

server:
  	port: 8082
spring:
	application:
		name: eureka-server
#eureka自己也会被注册
eureka:
	client:
		service-url:
			defaultZone:http://localhost:8082/eureka/

在这里插入图片描述

2、注册user-service

将user-service服务注册到EurekaServer:步骤如下:
l.在user-service:项目引入spring-cloud-starter–netflix-eureka-client的依赖

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

2.在application.yml文件,编写下面的配置:

spring:
	application:
		name: userservice
eureka:
	client:
		service-url:
			#指的是注册中心服务的地址
			defaultZone: http://localhost:8082/eureka/

拓展:在idea启动单个项目的多个实例:

  1. 在服务界面右键服务,复制配置

在这里插入图片描述

  1. 2023版本的idea需要添加虚拟机选项以及打开允许多个实例

在这里插入图片描述

image-20240210133301341
  1. 在虚拟机配置**-Dserver.port=8083**(端口选择一个未用的),同时修改服务名称

在这里插入图片描述

  1. 在服务页面中启动项目

在这里插入图片描述

3、在order-service完成服务拉取

服务拉取是基于服务名称获取服务列表,然后在对服务列表做负载均衡
1.修改OrderService的代码,修改访问的url路径,用服务名代替ip、端口:

String url "http://userservice/user/"+order.getUserId();

2.在order-service.项目的启动类OrderApplication中的RestTemplate添加负载均衡注解:

@Bean
@LoadBalanced
public RestTemplate restTemplate(){
	return new RestTemplate();
}

负载均衡(Load Balance),意思是将负载(工作任务,访问请求)进行平衡、分摊到多个操作单元(服务器,组件)上进行执行。是解决高性能,单点故障(高可用),扩展性(水平伸缩)的终极解决方案。

这种环境下,当我们的order-server向user-server发送http请求时,会平衡地向不同实例的user-server发送请求。

Ribbon负载均衡

负载均衡流程

image-20240208161941436

在这里插入图片描述

负载均衡策略

Ribbon的负载均衡规则是一个叫做IRule的接口来定义的,每一个子接口都是一种规则:

在这里插入图片描述

内置负载均衡规则类规则描述
RoundRobinRule简单轮询服务列表来选择服务器。它是Ribbon默认的负载均衡规则。
AvailabilityFilteringRule对以下两种服务器进行忽略:(1)在默认情况下,这台服务器如果3次连接失败,这台服务器就会被设置为“短路”状态。短路状态将持续30秒,如果再次连接失败,短路的持续时间就会几何级地增加。(2)并发数过高的服务器。如果一个服务器的并发连接数过高,配置了AvailabilityFilteringRule规则的客户端也会将其忽略。并发连接数的上限,可以由客户端的:.:.ActiveConnectionsLimit属性进行配置。
WeightedResponseTimeRule为每一个服务器赋予一个权重值。服务器响应时间越长,这个服务器的权重就越小。这个规则会随机选择
ZoneAvoidanceRule服务器,这个权重值会影响服务器的选择。
以区域可用的服务器为基础进行服务器的选择。使用Zone对服务器进行分类,这个Zone可以理解为一个机房、一个机架等。而后再对Zone内的多个服务做轮询。
BestAvailableRule忽略哪些短路的服务器,并选择并发数较低的服务器。
RandomRule随机选择一个可用的服务器。
RetryRule重试机制的选择逻辑

IRule默认为轮询规则,通过定义Rule实现可以修改负载均衡规则,有两种方式:

  1. 代码方式:在order-service中的OrderApplication类中,定义一个新的IRule:

    @Bean
    public IRule randomRule(){
    return new RandomRule();
    }
    
  2. 配置文件方式:在order-.servicef的application,ym段件中,
    添加新的配置也,可以修改规侧:

    user-service:
    	ribbon:
    		NFLoadBalancerRuleClassName:com.netflix.loadbalancer.RandomRule #负载均规则
    

饥饿加载

Ribbon默认是采用懒加载,即第一次访问时才会去创建LoadBalanceClient,请求时间会很长。
而饥饿加载则会在项目启动时创建,降低第一次访问的耗时,通过下面配置开启饥饿加载:

ribbon:
	eager-load:
		enabled: true #开启饥饿加载
			clients: user-server #指定劢user-server这个服务饥饿加载

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

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

相关文章

代码随想录算法训练营第三十一天 |基础知识,455.分发饼干,376.摆动序列,53.最大子序和(已补充)

基础知识&#xff1a; 题目分类大纲如下&#xff1a; #算法公开课 《代码随想录》算法视频公开课(opens new window)&#xff1a;贪心算法理论基础&#xff01;(opens new window),相信结合视频再看本篇题解&#xff0c;更有助于大家对本题的理解。 #什么是贪心 贪心的本质…

《区块链公链数据分析简易速速上手小册》第4章:交易数据分析(2024 最新版)

文章目录 4.1 解析交易输入和输出4.1.1 基础知识4.1.2 重点案例&#xff1a;追踪比特币交易4.1.3 拓展案例 1&#xff1a;以太坊交易的输入输出解析拓展案例1&#xff1a;以太坊交易的输入输出解析步骤1: 连接到以太坊网络步骤2: 获取交易数据步骤3: 解析交易输入结论 4.1.4 拓…

PyQt Python 使用 VTK ITK 进行分割 三维重建 医学图像可视化系统 流程

效果&#xff1a; 重建流程&#xff1a; 1. 输入 可以读取DICOM &#xff0c;nii nrrd 等数据 设置读取器以加载 DICOM 图像系列。 使用 itk::GDCMImageIO 作为 DICOM 图像的输入输出接口。 使用 itk::GDCMSeriesFileNames 获取指定路径下的所有 DICOM 文件名。 使…

Zabbix图形中文乱码问题(显示口口)解决办法

一 切换到zabbix安装目录assets/fonts下&#xff0c;下载字体 这里使用是nginxphp作为zabbix-web展示&#xff0c;使用find 命令查找 进入目录下&#xff0c;将原有字体备份&#xff0c;下载msyh字体 wget https://www.xxshell.com/download/sh/zabbix/ttf/msyh.ttf 二 修改配…

AI换脸(视频换脸)讲解-1

AI换脸是一种人工智能技术&#xff0c;它可以将一个人的面部表情和特征应用到另一个人的脸部上&#xff0c;以创建逼真的视频和图像。 首先&#xff0c;AI换脸技术需要大量的训练数据。这些数据通常是由多个人以不同的表情、姿态、光照条件下的照片或视频组成。通过使用人工智…

DolphinScheduler安装与配置

DolphinScheduler概述 Apache DolphinScheduler是一个分布式、易扩展的可视化DAG工作流任务调度平台。致力于解决数据处理流程中错综复杂的依赖关系&#xff0c;使调度系统在数据处理流程中开箱即用。 DolphinScheduler的主要角色如下&#xff1a; MasterServer采用分布式无…

Linux第46步_通过“添加自定义菜单”来学习menuconfig图形化配置原理

通过“添加自定义菜单”来学习menuconfig图形化配置原理&#xff0c;将来移植linux要用到。 自定义菜单要求如下: ①、在主界面中添加一个名为“My test menu”&#xff0c;此菜单内部有一个配置项。 ②、配置项为“MY TESTCONFIG”&#xff0c;此配置项处于菜单“My test m…

C# winfrom实例:四路激光测距雷达数据采集和波形图绘制

1.所述产品 产品型号&#xff1a;TFmini Plus 相关资料下载地址&#xff1a;http://www.benewake.com/download 产品名称&#xff1a;TFmini Plus激光雷达模组制造商公司&#xff1a;北醒&#xff08;北京&#xff09;光子科技有限公司 2.产品功能&#xff1a;TFmini Plus是基…

编辑器的新选择(基本不用配置)

Cline 不用看网上那些教程Cline几乎不用配置。 点击设置直接选择Chinese, C直接在选择就行了。 Cline是一个很好的编辑器&#xff0c;有很多懒人必备的功能。 Lightly 这是一个根本不用配置的C编辑器。 旁边有目录&#xff0c;而且配色也很好&#xff0c;语言标准可以自己…

vue 获取 form表格 的值 的方法

vue 获取 form表格 的值 代码 let discountLastMoney this.form.getFieldValue(discountLastMoney)-0

tee漏洞学习-翻译-3:TrustZone exploit for MSM8974

原文&#xff1a;http://bits-please.blogspot.com/2015/08/full-trustzone-exploit-for-msm8974.html 在这篇博文中&#xff0c;我们将介绍利用上一篇文章中描述的 TrustZone 漏洞的完整过程。 在开发此漏洞时&#xff0c;我只使用了我值得信赖的&#xff08;个人&#xff0…

Linux环境中的git

目录 1.要使用git&#xff0c;首先要安装git 2.首次使用git需要做的操作 3.git操作 1.要使用git&#xff0c;首先要安装git 指令&#xff1a;sudo yum install -y git 2.首次使用git需要做的操作 在gitee网页&#xff0c;在你的仓库中找到&#xff1a; 先将下面两行代码分别…

第12讲创建图文投票实现

创建图文投票实现 图文投票和文字投票基本一样&#xff0c;就是在投票选项里面&#xff0c;多了一个选项图片&#xff1b; <view class"option_item" v-for"(item,index) in options" :key"item.id"><view class"option_input&qu…

如何用 ChatGPT 做项目管理?

ChatGPT 可以通过创建和维护跨团队项目协作计划&#xff0c;让员工更容易理解他们的角色和职责。 这个协作计划里面会包括每个团队或个人要执行的具体任务&#xff0c;每个任务最后期限和任何事情之 间的依赖关系。 该场景对应的关键词库:(24 个) 项目管理、项目协作计划、跨…

蓝桥杯电子类单片机提升一——超声波测距

前言 单片机资源数据包_2023 一、超声波测距原理 二、超声波测距的应用 1.超声波的发射 2.单片机知识补充&#xff1a;定时器 3.超声波的接收与计时 4.距离的计算 1&#xff09;定时器1为16位自动重载&#xff0b;1T11.0592MHz 2&#xff09;定时器1为16位自动重载&am…

express 定时删除 oss 垃圾图片

一&#xff1a; 删除垃圾图片 思路&#xff1a; 获取 oss 中存储的所有图片文件&#xff1b;获取数据库中存储的图片文件数据&#xff1b;对比差异&#xff0c;不在数据库中的 oss 图片文件即为要删除的垃圾图片。 实现&#xff1a; 1、获取所有 oss 文件 import OSS from…

Stable Diffusion之最全详解图解

Stable Diffusion之最全详解图解 1. Stable Diffusion介绍1.1 研究背景1.2 学术名词 2.Stable Diffusion原理解析2.1 技术架构2.2 原理介绍扩散过程 3.1 Diffusion前向过程3.2 Diffusion逆向&#xff08;推断&#xff09;过程 1. Stable Diffusion介绍 Stable Diffusion是2022…

蓝桥杯第七届电子类单片机组程序设计

目录 前言 蓝桥杯大赛历届真题 一、第七届比赛题&#xff1a; 二、功能实现&#xff1a; 1.基础/模板部分 2.菜单模式的切换 3.数码管闪烁功能 4.led灯闪烁部分 5.对按键的处理 5.对ds1302的处理 三、代码实现 main.c onewire.c onewire.h ds1302.c ds1302.h 前言 …

使用 Chainlit, Langchain 及 Elasticsearch 轻松实现对 PDF 文件的查询

在我之前的文章 “Elasticsearch&#xff1a;与多个 PDF 聊天 | LangChain Python 应用教程&#xff08;免费 LLMs 和嵌入&#xff09;” 里&#xff0c;我详述如何使用 Streamlit&#xff0c;Langchain, Elasticsearch 及 OpenAI 来针对 PDF 进行聊天。在今天的文章中&#xf…

PWR电源控制

PWR电源 PWR简介 PWR&#xff08;Power Control&#xff09;电源控制 PWR负责管理STM32内部的电源供电部分&#xff0c;可以实现可编程电压监测器和低功耗模式的功能 可编程电压监测器&#xff08;PVD&#xff09;可以监控VDD电源电压&#xff0c;当VDD下降到PVD阀值以下或上…