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

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注入容器
@Beanpublic RestTemplate restTemplate(){return new RestTemplate();}
  1. 在对应服务功能下注入容器并发送http请求
@Autowiredprivate 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.mzph.cn/news/683706.shtml

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

相关文章

BUGKU-WEB 你必须让他停下

题目描述 题目截图如下&#xff1a; 进入场景看看&#xff1a; 解题思路 图片会消失,那应该是使用了js来控制根据提示,那就是要停止js才会看到flag (也就是要抓包,不要陷入停止js的思维) 相关工具 F12大法Burp Suit抓包工具 解题步骤 出现图片的时候,源码中确实出现…

NULL和nullptr到底是什么?它们的区别又是什么?

目录 1.前言 2.剖析NULL 3. 剖析nullptr 4.nullptr与NULL的区别 1.前言 为了保持良好的编程习惯&#xff0c;我们在声明某个变量时都应该给这个变量合适的初始值&#xff0c;不然容易出现不可预知的错误。对于指针来说更是如此&#xff0c;在c语言中我们就通常将暂时没有指向…

【Spring MVC篇】返回响应

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【Spring MVC】 本专栏旨在分享学习Spring MVC的一点学习心得&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录 一、返回静态页面…

(13)Hive调优——动态分区导致的小文件问题

前言 动态分区指的是&#xff1a;分区的字段值是基于查询结果自动推断出来的&#xff0c;核心语法就是insertselect。 具体内容指路文章&#xff1a; https://blog.csdn.net/SHWAITME/article/details/136111924?spm1001.2014.3001.5501文章浏览阅读483次&#xff0c;点赞15次…

如何买卖基金

一、从哪买卖&#xff1f; &#xff08;一&#xff09;购买渠道 有两种购买渠道&#xff1a;直销平台和代销平台。 1.直销平台 就是基金公司。 每个基金公司只能卖自家基金产品。比如招商基金只能卖招商基金管理的基金&#xff0c;而不能卖广发基金的产品。 如何去基金公司购…

2024年最新onlyfans虚拟信用卡订阅教程

一、Onlyfans是什么&#xff1f; OnlyFans是一个允许创作者分享自己的独家内容的平台&#xff0c;简称o站。这个平台允许创作者创建一个订阅服务&#xff0c;粉丝需要支付费用才能访问其独家内容。 本文将教你如何使用虚拟卡在OnlyFans上进行充值。 二、如何使用虚拟卡支付 O…

变形金刚:第 2 部分:变形金刚的架构

目录 一、说明 二、实现Transformer的过程 第 1 步&#xff1a;代币化&#xff08;Tokenization&#xff09; 第 2 步&#xff1a;对每个单词进行标记嵌入 第 3 步&#xff1a;对每个单词进行位置嵌入 第 4 步&#xff1a;输入嵌入 第 5 步&#xff1a;编码器层 2.5.1 多头自注…

【MySQL】高度为2和3时B+树能够存储的记录数量的计算过程

文章目录 题目答案高度为2时的B树高度为3时的B树总结 GPT4 对话过程 题目 InnoDB主键索引的Btree在高度分别为 2 和 3 时&#xff0c;可以存储多少条记录&#xff1f; 答案 高度为2时的B树 计算过程&#xff1a; 使用公式 ( n 8 ( n 1 ) 6 16 1024 ) (n \times 8 …

二维数组及函数的非函数实现

2024年2月14日 1.请编程实现二维数组的杨慧三角 #include<stdio.h> #include<stdlib.h> #include<string.h> void Yanghui(int n,int (*p)[n]) {for(int i0;i<n;i){for(int j0;j<i;j){if(j0||ij){*(*(pi)j)1;}else{*(*(pi)j)*(*(pi-1)j-1)*(*(pi-1)j)…

相机图像质量研究(15)常见问题总结:光学结构对成像的影响--暗角

系列文章目录 相机图像质量研究(1)Camera成像流程介绍 相机图像质量研究(2)ISP专用平台调优介绍 相机图像质量研究(3)图像质量测试介绍 相机图像质量研究(4)常见问题总结&#xff1a;光学结构对成像的影响--焦距 相机图像质量研究(5)常见问题总结&#xff1a;光学结构对成…

456. 车站分级(拓扑排序,虚拟点建图)

活动 - AcWing 一条单向的铁路线上&#xff0c;依次有编号为 1, 2, …, n1,  的 n 个火车站。 每个火车站都有一个级别&#xff0c;最低为 1 级。 现有若干趟车次在这条线路上行驶&#xff0c;每一趟都满足如下要求&#xff1a;如果这趟车次停靠了火车站 x&#xff0c;…

Elasticsearch:特定领域的生成式 AI - 预训练、微调和 RAG

作者&#xff1a;来自 Elastic Steve Dodson 有多种策略可以将特定领域的知识添加到大型语言模型 (LLM) 中&#xff0c;并且作为积极研究领域的一部分&#xff0c;正在研究更多方法。 对特定领域数据集进行预训练和微调等方法使 LLMs 能够推理并生成特定领域语言。 然而&#…

【深入理解DETR】DETR的原理与算法实现

1 DETR算法概述 ①端到端 ②Transformer-model 之前的方法都需要进行NMS操作去掉冗余的bounding box或者手工设计anchor&#xff0c; 这就需要了解先验知识&#xff0c;增加从超参数anchor的数量&#xff0c; 1.1 训练测试框架 一次从图像中预测n个object的类别 训练阶段我们…

Attention Is All Your Need论文翻译

0.摘要 这个统治序列转换模型是基于复杂循环或者卷积神经网络&#xff0c;它包含编码器和解码器。表现最好的模型也通过注意力机制来连接编码器和解码器。我们提出了一个新的简单网络架构——Transformer,它仅仅是是基于注意力机制&#xff0c;完全免去递推和卷积。在两个机器…

C语言——函数(第五讲)(上)

C语言——函数&#xff08;第五讲&#xff09; 前言函数的概念库函数标准库和库函数库函数的使用方法 ⾃定义函数形式形参和实参形参和实参的关系 前言 Hello,各位C语言的小伙伴们&#xff0c;大家过年好&#xff0c;我是莹莹。停更差不多一个月了&#xff0c;都是懒惰作怪&am…

9 个管理 Windows 硬盘的最佳免费磁盘分区软件 [2024 排名]

管理分区可能是一项具有挑战性的任务。当您想到删除、缩小、移动、磁盘分区或合并分区等方面时&#xff0c;您会认为它们是很难做到的事情。然而&#xff0c;虽然 Windows 自己的磁盘管理可以处理大部分问题&#xff0c;但它无法处理管理分区的所有方面。 这时候优质的磁盘管理…

python-游戏篇-初级-超级画板

文章目录 开发环境要求运行方法PyCharmVScode 代码main.pytools.py 效果 开发环境要求 本系统的软件开发及运行环境具体如下。 操作系统&#xff1a;Windows 7、Windows 10。Python版本&#xff1a;Python 3.7.1。开发工具&#xff1a;PyCharm 2018。Python内置模块&#xff…

秒懂百科,C++如此简单丨第十九天:动态规划

目录 动态规划的初步理解 求最短路径数 洛谷 P1002 过河卒 题目描述 输入样例 输出样例 思路 AC Code 动态规划的初步理解 什么是动态规划&#xff1f;最直白的理解就是动态的规划。 那高级一点的理解呢&#xff1f;就是每时每刻都拿着一个小本本&#xff0c;也就是…

「优选算法刷题」:和可被K整除的子数组

一、题目 给定一个整数数组 nums 和一个整数 k &#xff0c;返回其中元素之和可被 k 整除的&#xff08;连续、非空&#xff09; 子数组 的数目。 子数组 是数组的 连续 部分。 示例 1&#xff1a; 输入&#xff1a;nums [4,5,0,-2,-3,1], k 5 输出&#xff1a;7 解释&…