配置管理,雪崩问题分析,sentinel的使用

目录

  • 配置管理
    • 一:什么是配置管理
    • 二:配置共享
    • 三:配置热更新
  • 雪崩问题
    • 一:原因分析
    • 二:解决方案
  • Sentinel
    • 一:快速入门
    • 二:请求限流
    • 三:线程隔离
    • 四:fallback
    • 五:服务熔断

配置管理

一:什么是配置管理

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

为什么需要配置管理:

1:微服务数量太多,每一个微服务都需要进行配置,而且重复的配置也有很多,万一要变动所有微服务的配置都需要变动

2:我们的业务配置变更后,必须重启服务才能生效;

3:网关配置也是需要重启,重启的这段时间所有的服务都用不了;

所以引入了配置管理服务,配置管理可以统一管理配置,配置变更也会即时的推送配置;

二:配置共享

我们之间可以使用nacos进行配置的管理:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

配置共享解决配置重复的问题

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

添加共享配置

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

原本springboot启动会现加载yml文件然后初始化上下文,现在在springcloud中进行了配置管理我们就要从nacos中拉取共享配置,

但是我们的nacos地址是配置在springboot的yml文件中的,不知道naco是地址怎么取拉取配置文件,所以springcloud启动的时候会先加载bootstrap文件,这里面就有nacos的地址,然后根据地址再去拉取共享配置,将共享配置初始化在上下文中,然后再去加载springboot的yml文件,因为共享文件中有许多占位符,所以要先合并配置再去初始化springboot的上下文

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

读取bootstrap和拉取共享配置都需要引入相关依赖;

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

三:配置热更新

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

实现配置的热更新要进行两部操作,第一步,在nacos中在添加一个配置文件,用来填写需要进行热更新的配置,第二步,读取热更新的配置需要一个配置类专门来读取;

@ConfigurationProperties(prefix = "hm.cart")
@Data
@Component
public class CartProperties {private Integer MaxItems;
}

雪崩问题

一:原因分析

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

雪崩问题:微服务调用链路中一个服务出现故障导致,整个链路的所有微服务都不可用这就是雪崩;

举个例子,有一个服务出现了故障,其他服务去调用这个服务就得不到返回,如果是高并发的请求,无数的请求会将tomcat的资源耗尽,导致当前服务也处于一个不可用的状态,然后又因为这些服务的调用是错综复杂的就会发生连锁反应,多个微服务都会发生故障;

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

总结来说:出现雪崩问题的原因1:服务自身故障;2:服务调用者没有做好异常处理,导致自身故障;

解决思路:1避免故障,通过代码的健壮性;

2:做好调用异常的后备方案;

二:解决方案

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

通过限流器将请求限流,避免因流量激增而出现故障

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

通过线程的隔离:这是解决了因为调用的服务故障导致自身的资源耗尽进而导致自身的服务也故障的问题,我们只要给调用故障的服务的资源又一定的限制,达到限制就不能在访问了,从而避免了将整个服务的资源全部占用的情况;

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在线程隔离的基础上,我们耗尽了限制的资源就不会再请求了,但是我们还是发送很多无用的请求,知道服务异常还是会访问直到资源占用完;我们就可以使用服务熔断:

服务熔断:由断路器统计请求的异常比例或慢调用比例。一旦超出阈值就会熔断业务,拦截请求;然后还要走fallback逻辑

总结一下雪崩的解决方案:1:限流器;2:线程隔离;3:服务熔断;

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

实现服务保护我们可以借助这些组件:比如springcloud alibaba的sentinel;

Sentinel

一:快速入门

1:首先去下载sentinel控制台的jar包:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2:然后在cmd中输入命令:(运行jar包)

java -Dserver.port=8090 -Dcsp.sentinel.dashboard.server=localhost:8090 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar

3:然后就能访问8090:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

4:在项目中引入依赖:

<!--sentinel-->
<dependency><groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

5:在yaml文件中配置sentinel地址,与sentinel建立连接

spring:cloud: sentinel:transport:dashboard: localhost:8090

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

防止簇点的资源名称重复我们要加上配置项http-method-specify

二:请求限流

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

直接在控制台中设置就行了

三:线程隔离

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

为了防止远程调用的服务挂了导致请求堵塞,以至于用完所有的资源造成自身的服务瘫痪

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

配置方法:流控规则中的并发线程数就是线程隔离,表示当前服务一共拥有这么多线程;

这样即使一个服务中的一个接口堵塞,其他接口的访问也不会受影响;

四:fallback

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

将远程调用也作为一个簇点,对远程调用进行fallback处理

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

第一步:定义一个fallback工厂类,工厂类里返回一个client对象,里面实现cilent的方法,是在远程调用异常的时候才会去调用这个方法;

第二步:将fallback注册成一个bean

第三步:在client的feignclient注解中添加属性:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

@Slf4j
public class ItemClientFallbackFactory implements FallbackFactory<ItemClient> {@Overridepublic ItemClient create(Throwable cause) {return new ItemClient() {@Overridepublic List<ItemDTO> queryItemByIds(Collection<Long> ids) {log.error("查询商品失败",cause);return null;}@Overridepublic void deductStock(Collection<OrderDetailDTO> items) {log.error("扣减库存失败",cause);throw new RuntimeException(cause);}};}
}

自定义工厂类,实现抛出异常之后的逻辑

@Bean
public ItemClientFallbackFactory itemClientFallbackFactory(){return new ItemClientFallbackFactory();
}

在配置类中将其注册为一个bean

@FeignClient(value = "item-service",fallbackFactory = ItemClientFallbackFactory.class)

在FeignClient注解上添加注解声明这个工厂类

这样在远程调用失败的时候就不会返回异常了

总结下fallback的使用方法:自定义工厂类,工厂类中返回client对象,client对象中重写自身的方法,是异常之后执行的逻辑,然后在配置类中将fallback工厂类注册成一个bean,然后在client类的注解上加上属性;

五:服务熔断

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

服务熔断:断路器统计服务调用的异常比例和慢调用比例,达到阈值就会熔断该服务拦截一切请求,当服务恢复时会放行请求;

断路器的逻辑:断路器中有三个状态,closed,open,half-open;一般情况下断路器处于closed状态,断路器放行请求,并且统计异常的比例和满请求的比例,当到达一定阈值后会进入open阶段,这个阶段断路器会拦截请求,请求会快速失败,open是临时状态,每隔一段时间都会转入到half-open状态,尝试放行请求,如果还是异常就再次回到open,如果成功就closed;

就会熔断该服务拦截一切请求,当服务恢复时会放行请求;

断路器的逻辑:断路器中有三个状态,closed,open,half-open;一般情况下断路器处于closed状态,断路器放行请求,并且统计异常的比例和满请求的比例,当到达一定阈值后会进入open阶段,这个阶段断路器会拦截请求,请求会快速失败,open是临时状态,每隔一段时间都会转入到half-open状态,尝试放行请求,如果还是异常就再次回到open,如果成功就closed;

1. 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

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

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

相关文章

MATLAB中,clear的使用方法

在MATLAB中,clear 命令是一个非常重要的工具,用于管理工作空间中的变量。其主要功能是清除变量,以帮助用户保持环境的整洁并避免潜在的命名冲突。以下是 clear 命令的详细使用方法和相关信息。 1. 基本用法 清除所有变量:clear此命令会清除当前工作空间中的所有变量。这意味…

前端开发实现自定义勾选/自定义样式,可复选,可取消勾选

基于后端返回数组实现多选、复选 以下代码基于vue2&#xff0c;如果有需要React/Vue3或者其他框架代码的&#xff0c;可以通过国内直连GPT4o进行代码转换&#xff0c;转换正确率99% 前端代码如下(直接拷贝到你的vue代码即可)&#xff1a; <!-- CustomCheckboxList.vue --&g…

面向对象技术简述(含设计模式)

6.9.2 面向对象技术 面向对象 对象 分类 继承 通过消息的通信 面向对象 对象 分类 继承 通过消息的通信 面向对象对象分类继承通过消息的通信其中包括&#xff1a; 对象 运行的实体&#xff1b;既包含属性/数据&#xff0c;又包含方法/行为/操作数据的函数&#xff1b;…

【RabbitMQ】04-发送者可靠性

1. 生产者重试机制 spring:rabbitmq:connection-timeout: 1s # 设置MQ的连接超时时间template:retry:enabled: true # 开启超时重试机制initial-interval: 1000ms # 失败后的初始等待时间multiplier: 1 # 失败后下次的等待时长倍数&#xff0c;下次等待时长 initial-interval…

在终端打印csv文件中的内容(Python)

目的 我想&#xff08;有个性地&#xff09;输出一个csv&#xff08;txt&#xff09;文件中的内容&#xff0c;于是写了一段代码 内容 csv文件中内容 操作,用户,名称,条件,例外 拒绝,Everyone,鲁大师,发布者, 拒绝,Everyone,驱动精灵,发布者, 拒绝,Everyone,2345,发布者, 拒…

【北京迅为】《STM32MP157开发板嵌入式开发指南》-第七十八章 Qt控制硬件

iTOP-STM32MP157开发板采用ST推出的双核cortex-A7单核cortex-M4异构处理器&#xff0c;既可用Linux、又可以用于STM32单片机开发。开发板采用核心板底板结构&#xff0c;主频650M、1G内存、8G存储&#xff0c;核心板采用工业级板对板连接器&#xff0c;高可靠&#xff0c;牢固耐…

C语言-详细讲解-洛谷P1909 [NOIP2016 普及组] 买铅笔

目录 1.题目要求 2.题目解读 3.代码实现 1.题目要求 2.题目解读 这道题主要考察了顺序结构&#xff0c;需要我们分别计算三种包装的花费并进行比较&#xff0c;需要思考的就是如何计算包装花费。 3.代码实现 #include<stdio.h> int main(){int n,a1,a2,b1,b2,c1,c2…

刷题日记1

手机 题目描述 一般的手机的键盘是这样的&#xff1a; 要按出英文字母就必须要按数字键多下。例如要按出 x \tt x x 就得按 9 9 9 两下&#xff0c;第一下会出 w \tt w w&#xff0c;而第二下会把 w \tt w w 变成 x \tt x x。 0 0 0 键按一下会出一个空格。 你的任务是…

程序员的生活周刊 #7:耐克总裁被裁记

0. 庙宇 这张图来自 Tianshu Liu&#xff0c; 被树木环绕的宝塔庙宇 1. 耐克总裁 耐克最近的总裁 John Donahoe 干了 5 年&#xff0c;终于被裁掉了。 这位总裁即不了解球鞋文化&#xff0c;也没有零售经验&#xff0c;但不懂事的董事会还是聘用它&#xff0c;寄托把耐克从运…

C语言定义字符串数组

一、字符串 在C语言中&#xff0c;字符串数组是一种存储多个字符串的数组。每个字符串本身是一个字符数组&#xff0c;以空字符&#xff08;\0&#xff09;结尾。 二、定义字符串数组 2.1 字符数组组成的数组 这种方式可以存储固定长度的字符串。示例&#xff1a; //存储5…

解决Postman一直在转圈加载无法打开问题的方法

在使用Postman这款强大的API测试工具时&#xff0c;有时可能会遇到程序长时间加载而无法正常使用的情况。面对这样的问题&#xff0c;可以尝试以下几种解决办法&#xff1a; 方法一&#xff1a;直接运行Postman可执行文件 定位到Postman的安装目录 如果您不确定Postman的具体安…

谷歌浏览器安装 Vue.js devtools 插件

文章目录 1. 安装2. 使用3. 注意 1. 安装 ① 搜索极简插件&#xff1a;https://chrome.zzzmh.cn/index ② 搜索框输入 Vue&#xff0c;选择 Vue.js devtools ③ 从历史版本里面选择并下载&#xff0c;选择 6.4 版本的就行 ④ 打开浏览器&#xff0c;右上角三个点 → 扩展程序…

计算机毕业设计Python+图神经网络考研院校推荐系统 考研分数线预测 考研推荐系统 考研爬虫 考研大数据 Hadoop 大数据毕设 机器学习 深度学习

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

微服务系列六:分布式事务与seata

目录 实验环境说明 前言 一、分布式事务问题与策略 1.1 分布式事务介绍 1.2 分布式事务解决策略分析 二、分布式事务解决方案 Seata 2.1 认识Seata 2.2 Seata的工作原理 2.3 部署Seata微服务 2.3.1 准备数据库表 2.3.2 准备配置文件 2.3.3 docker部署 2.4 微服务集…

adb:Android调试桥

Android 调试桥 (adb) 是一种功能多样的命令行工具&#xff0c;可以通过命令行与设备进行通信。 查询设备 adb devices adb 会创建一个字符串&#xff0c;用于通过端口号唯一标识设备。 adb devices -l 加入 -l 选项&#xff0c;devices 命令会告知设备是什么。当连接了多个…

【C语言】分支和循环详解(下)猜数字游戏

与诸君共进步&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 文章目录 1. 随机数的生成2. 猜数字小游戏的实现 1. 随机数的生成 掌握了前⾯学习的这些知识&#xff0c;我们就可以写⼀些稍微有趣的代码了&#xff0c;⽐如&#xff1a; 写⼀个猜数字游戏 游戏要求…

Java | Leetcode Java题解之第546题移除盒子

题目&#xff1a; 题解&#xff1a; class Solution {int[][][] dp;public int removeBoxes(int[] boxes) {int length boxes.length;dp new int[length][length][length];return calculatePoints(boxes, 0, length - 1, 0);}public int calculatePoints(int[] boxes, int l…

Pytorch学习--神经网络--现有网络模型的使用及修改

一、VGG16 weights (Optional[VGG16_Weights]): 这个参数是可选的&#xff0c;指的是预训练的权重。用户可以选择使用不同的预训练权重&#xff0c;具体可参见 VGG16_Weights 的详细说明。默认情况下&#xff0c;如果不提供此参数&#xff0c;模型将不会使用任何预训练权重。 p…

内部知识库:优化企业培训流程的关键驱动力

在当今快速变化的商业环境中&#xff0c;企业培训的重要性日益凸显。内部知识库作为整合、管理和分享企业内部学习资源的关键工具&#xff0c;正逐步成为优化企业培训流程的核心。以下将探讨内部知识库如何通过多种功能&#xff0c;助力企业提升培训效率、质量和员工满意度。 …

若依系统前端项目解读——从使用过程解读

登录系统 用户初次登录&#xff0c;浏览器中未存用户信息&#xff08;token&#xff09;&#xff0c;需向后端请求并保存至浏览器中用户再次登录系统&#xff0c;向后端发请求会携带token在请求头中&#xff0c;并与后端Redis缓存的token比较&#xff0c;判断token是否还在有效…