配置管理,雪崩问题分析,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.mzph.cn/pingmian/59463.shtml

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

相关文章

算法练习:904. 水果成篮

题目链接&#xff1a;904. 水果成篮。 题目意思就是可以选取两个种类的水果不能超过两个种类&#xff0c;该种类个数没有限制&#xff0c; 但是一旦超过两个种类的水果就要停止计数。 示例中数组编号就是就是种类&#xff0c;就是不能出现三个不同编号的数。 1.暴力解法&…

邮件营销模板定制服务:满足个性营销需求!

邮件营销模板创建步骤&#xff1f;外贸营销邮件范文模板有哪些&#xff1f; 为了在众多邮件中脱颖而出&#xff0c;企业需要定制化的邮件营销模板&#xff0c;以更好地传达品牌信息&#xff0c;提升客户参与度。MailBing将探讨邮件营销模板定制服务的重要性&#xff0c;并介绍…

unity 镜面 反射

URP 镜面 资源绑定 下载 namespace UnityEngine.Rendering.Universal { [ExecuteInEditMode]public class PlanarURP : MonoBehaviour{public bool VR false;public int ReflectionTexResolution 512;public float Offset 0.0f;[Range(0, 1)]public float Reflecti…

细说STM32单片机USART中断收发RTC实时时间并改善其鲁棒性的另一种方法

目录 一、工程目的 1、目标 2、通讯协议及应对错误指令的处理目标 二、工程设置 三、程序改进 四、下载与调试 1、合规的指令 2、不以#开头&#xff0c;但以&#xff1b;结束&#xff0c;长度不限 3、以#开头&#xff0c;不以;结束&#xff0c;也不包含;&#xff0c;长…

leetcode 2043.简易银行系统

1.题目要求: 示例: 输入&#xff1a; ["Bank", "withdraw", "transfer", "deposit", "transfer", "withdraw"] [[[10, 100, 20, 50, 30]], [3, 10], [5, 1, 20], [5, 20], [3, 4, 15], [10, 50]] 输出&#xff…

软件技术求职简历「优选篇」

【#软件技术简历#】一份精心撰写的简历是增加获得心仪职位的机会。那么&#xff0c;如何才能写出一份既全面又吸引人的软件技术简历呢&#xff1f;以下是幻主简历整理的软件技术简历「优选篇」&#xff0c;欢迎大家阅读收藏&#xff01; 软件技术简历范文&#xff1a; 求职意向…

GESP4级考试语法知识(算法概论(三))

爱因斯坦的阶梯代码&#xff1a; //算法1-12 #include<iostream> using namespace std; int main() {int n1; //n为所设的阶梯数while(!((n%21)&&(n%32)&&(n%54)&&(n%65)&&(n%70)))n; //判别是否满足一组同余式cout<<n<…

Perforce《2024游戏技术现状报告》Part2:游戏引擎、版本控制、IDE及项目管理等多种开发工具的应用分析

游戏开发者一直处于创新前沿。他们的实践、工具和技术受到各行各业的广泛关注&#xff0c;正在改变着组织进行数字创作的方式。 近期&#xff0c;Perforce发布了《2024游戏技术现状报告》&#xff0c;通过收集来自游戏、媒体与娱乐、汽车和制造业等高增长行业的从业者、管理人…

美国历任总统特征数据-多个字段(1789-2024年)

数据简介&#xff1a;美国历任总统数据集是一个涵盖了从美国建国以来所有总统的详细信息的综合性数据集。该数据集不仅包含了每位总统的基本信息&#xff08;如姓名、任期、党派等&#xff09;&#xff0c;还涵盖了他们在任期间的重要政策、经济指标、国内外事件等关键数据。通…

视频QoE测量学习笔记(二)

A Survey on Bitrate Adaptation Schemes for Streaming Media Over HTTP论文学习笔记 自适应比特率&#xff08;ABH或ABS&#xff09; 是一种旨在通过 HTTP 网络有效地流式传输文件的技术。向用户的视频播放器提供多个相同内容、不同大小文件的文件&#xff0c;然后客户端选…

HTML 基础标签——文本内容标签 <ul>、<ol>、<blockquote> 、<code> 等标签的用法详解

文章目录 1. 标题标签2. 段落标签3. 文本格式化标签4. 列表标签4.1 无序列表 `<ul>`4.2 有序列表 `<ol>`5. 引用标签5.1 块引用 `<blockquote>`5.2 行内引用 `<q>`5.3 作品引用 `<cite>`6. 代码和预格式文本标签6.1 代码标签 `<code>`6.2 …

论文阅读笔记-Get To The Point: Summarization with Pointer-Generator Networks

前言 最近看2021ACL的文章&#xff0c;碰到了Copying Mechanism和Coverage mechanism两种技巧&#xff0c;甚是感兴趣的翻阅了原文进行阅读&#xff0c;Copying Mechanism的模型CopyNet已经进行阅读并写了阅读笔记&#xff0c;如下&#xff1a; 论文阅读笔记&#xff1a;Copyi…

PDF多功能工具箱 PDF Shaper v14.6

如今对PDF处理的软件很多都是只是单一的功能。PDF Shaper给你完全不同的体验&#xff0c;因为PDF Shaper是一款免费的PDF工具集合的软件。有了PDF Shaper&#xff0c;你以后再也不用下载其他处理PDF的软件了。PDF Shaper的功能有&#xff1a;合并&#xff0c;分割&#xff0c;加…

【算法】(Python)贪心算法

贪心算法&#xff1a; 又称贪婪算法&#xff0c;greedy algorithm。贪心地追求局部最优解&#xff0c;即每一步当前状态下最优选择。试图通过各局部最优解达到最终全局最优解。但不从整体最优上考虑&#xff0c;不一定全局最优解。步骤&#xff1a;从初始状态拆分成一步一步的…

vue常见题型(1-10)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 2.2双向绑定的原理是什么vue框架采用的是数据双向绑定的方式&#xff0c;由三个重要部分构成2.2.1.ViewModel2.2.2 双向绑定2.2.3.1.编译Compile2.2.3.2.依赖收集 3…

论文阅读:人工智能赋能源网荷储协同互动的应用及展望

论文阅读&#xff1a;人工智能赋能源网荷储协同互动的应用及展望 [1]王继业.人工智能赋能源网荷储协同互动的应用及展望[J].中国电机工程学报,2022,42(21):7667-7682.DOI:10.13334/j.0258-8013.pcsee.220538. 文章目录 论文阅读&#xff1a;人工智能赋能源网荷储协同互动的应用…

虚幻引擎5(UE5)学习教程

虚幻引擎5&#xff08;UE5&#xff09;学习教程 引言 虚幻引擎5&#xff08;Unreal Engine 5&#xff0c;简称UE5&#xff09;是Epic Games开发的一款强大的游戏引擎&#xff0c;广泛应用于游戏开发、影视制作、建筑可视化等多个领域。UE5引入了许多先进的技术&#xff0c;如…

Golang | Leetcode Golang题解之第543题二叉树的直径

题目&#xff1a; 题解&#xff1a; func diameterOfBinaryTree(root *TreeNode) int {var (dfs func(node *TreeNode) int // node节点深度ans int)dfs func(node *TreeNode) int {//边界if node nil {return -1}//求左右子树深度leftDepth : dfs(node.Left)rightDepth : d…

【TS】九天学会TS语法——3.TypeScript 函数

今天学习 TypeScript 的函数&#xff0c;包括函数类型、可选参数、默认参数、剩余参数。 函数声明和表达式函数类型可选参数和默认参数剩余参数 在 TypeScript 中&#xff0c;函数是编程的核心概念之一。它们允许我们将代码组织成可重用的块&#xff0c;并提供了强大的抽象能力…

解决程序因缺少xinput1_3.dll无法运行的有效方法,有效修复丢失xinput1_3.dll

如果你的电脑在运行某些应用程序或游戏时提示“xinput1_3.dll丢失”或“找不到xinput1_3.dll”的错误消息&#xff0c;那么很可能是因为你的系统中缺少这个重要的DLL文件而导致的问题。那么电脑出现xinput1_3.dll丢失的问题时有哪些方法进行修复呢&#xff1f; 如何确定电脑是否…