三十七、雪崩问题、Sentinel、簇点链路、流控模式

news2024/12/24 11:10:14

1、初识Sentinel

1.1雪崩问题

微服务调用链路中的某个服务故障,引起整个链路中的所有微服务都不可用,这就是雪崩。

解决雪崩问题的常见方式有四种:

超时处理:设定超时时间,请求超过一定时间没有响应就返回错误信息,不会无休止等待

舱壁模式:限定每个业务能使用的线程数,避免耗尽整个tomcat的资源,因此也叫线程隔离。

熔断降级:由断路器统计业务执行的异常比例,如果超出阈值则会熔断该业务,拦截访问该业务的一切请求。

流量控制:限制业务访问的QPS,避免服务因流量的突增而故障。

什么是雪崩问题?

微服务之间相互调用,因为调用链中的一个服务故障,引起整个链路都无法访问的情况。

如何避免因瞬间高并发流量而导致服务故障?

流量控制

如何避免因服务故障引起的雪崩问题?

超时处理
线程隔离
降级熔断
服务保护技术对比

 认识Sentinel

Sentinel是阿里巴巴开源的一款微服务流量控制组件。官网地址:home | Sentinel

Sentinel 具有以下特征:

丰富的应用场景 Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。
完备的实时监控 Sentinel 同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数据,甚至 500 台以下规模的集群的汇总运行情况。
广泛的开源生态 Sentinel 提供开箱即用的与其它开源框架 / 库的整合模块,例如与 Spring Cloud Dubbo gRPC 的整合。您只需要引入相应的依赖并进行简单的配置即可快速地接入 Sentinel
完善的 SPI 扩展点 Sentinel 提供简单易用、完善的 SPI 扩展接口。您可以通过实现扩展接口来快速地定制逻辑。例如定制规则管理、适配动态数据源等。

1.2安装Sentinel控制台

E:\software\sentinel

 java -jar -Dserver.port=8070 sentinel-dashboard-1.8.1.jar

用户名 密码:sentinel 

 如果要修改Sentinel的默认端口、账户、密码,可以通过下列配置:

尽量不修改用户名密码  

1.3微服务整合Sentinel

(1)先引入sentinel依赖

    <!--sentinel依赖-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.aaa</groupId>
        <artifactId>parent</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <artifactId>product</artifactId>

    <dependencies>
        <dependency>
            <groupId>com.aaa</groupId>
            <artifactId>common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!--nacos注册中心依赖-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

        <!--eureka依赖-->
        <!--<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>-->
        <!--nacos-config配置中心依赖-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

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

    </dependencies>
    <build>
        <finalName>product</finalName>
    </build>
</project>

(2)配置控制台地址:

浏览器访问

1.4簇点链路

簇点链路:就是项目内的调用链路,链路中被监控的每个接口就是一个资源。默认情况下sentinel会监控SpringMVC的每一个端点(Endpoint),因此SpringMVC的每一个端点(Endpoint)就是调用链路中的一个资源。

流控、熔断等都是针对簇点链路中的资源来设置的,因此我们可以点击对应资源后面的按钮来设置规则:

快速入门

点击资源/order/getInfo后面的流控按钮,就可以弹出表单。表单中可以添加流控规则,如下图所示:

其含义是限制 /order/getInfo这个资源的单机QPS1,即每秒只允许1次请求,超出的请求会被拦截并报错 

1.5流控模式

在添加限流规则时,点击高级选项,可以选择三种流控模式:

直接:统计当前资源的请求,触发阈值时对当前资源直接限流,也是默认的模式
关联:统计与当前资源相关的另一个资源,触发阈值时,对当前资源限流
链路:统计从指定链路访问到本资源的请求,触发阈值时,对指定链路限流

(1)流控模式-关联

配置流控规则,当/order/write资源被访问的QPS超过5时,对/order/read请求限流。

写操作被访问次数超过5时,对读操作限流

@GetMapping("write")
    public String write(){
        return "写操作~~~~";
    }
    @GetMapping("read")
    public String read(){
        return "读操作~~~~";
    }

对谁限流,给谁加流控 

使用压测工具 

当/order/write资源被访问的QPS超过5时,对/order/read请求限流

(2)流控模式-链路

链路模式:只针对从指定链路访问到本资源的请求做统计,判断是否超过阈值。

需求:有查询订单和创建订单业务,两者都需要查询商品。针对从查询订单进入到查询商品的请求统计,并设置限流

步骤:

1.  OrderService 中添加一个 queryGoods 方法,不用实现业务
2.  OrderController 中,改造 /order/query 端点,调用 OrderService 中的 queryGoods 方法
3.  OrderController 中添加一个 /order/save 的端点,调用 OrderService queryGoods 方法
4.  queryGoods 设置限流规则,从 /order/query 进入 queryGoods 的方法限制 QPS 必须小于 2

1、service层

public String queryGood();

 2、service 实现类

    @Override
    @SentinelResource("queryGood")//在其他层为其他方法标记为sentinel链路资源
    public String queryGood() {
        return "查询订单";
    }

 3、controller

    @GetMapping("write")
    public String write(){
        orderService.queryGood();
        return "写操作~~~~";
    }
    @GetMapping("read")
    public String read(){
        orderService.queryGood();
        return "读操作~~~~";
    }

1、Sentinel默认只标记Controller中的方法为资源,如果要标记其它方法,需要利用@SentinelResource注解,示例:

@SentinelResource("queryGood")//在其他层为其他方法标记为sentinel链路资源

2、Sentinel默认会将Controller方法做context整合,导致链路模式的流控失效,需要修改application.properties,添加配置: 

#关闭上下文
spring.cloud.sentinel.web-context-unify=false

http://localhost:8090/order/write

http://localhost:8090/order/read

访问一下

 

流控模式有哪些?

直接:对当前资源限流

关联:高优先级资源触发阈值,对低优先级资源限流。

链路:阈值统计时,只统计从指定资源进入当前资源的请求,是对请求来源的限流

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

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

相关文章

Rust每日一练(Leetday0006) 三数之和、字母组合、四数之和

目录 16. 最接近的三数之和 3Sum Closest &#x1f31f;&#x1f31f; 17. 电话号码的字母组合 Letter-combinations-of-a-phone-number &#x1f31f;&#x1f31f; 18. 四数之和 4Sum &#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Rust…

肝一肝设计模式【九】-- 享元模式

系列文章目录 肝一肝设计模式【一】-- 单例模式 传送门 肝一肝设计模式【二】-- 工厂模式 传送门 肝一肝设计模式【三】-- 原型模式 传送门 肝一肝设计模式【四】-- 建造者模式 传送门 肝一肝设计模式【五】-- 适配器模式 传送门 肝一肝设计模式【六】-- 装饰器模式 传送门 肝…

java枚举类解读

目录 为什么需要枚举类 枚举类的使用 枚举类的实现 枚举类的属性 自定义枚举类 使用enum定义枚举类 常见enum的使用场景 switch 向枚举中添加新方法 覆盖枚举的方法 Enum类的主要方法 实现接口的枚举类 为什么需要枚举类 类的对象只有有限个&#xff0c;确定的。…

如何将map与对象进行转换

Spring Boot内置了一个强大的JSON转换器Jackson&#xff0c;可以实现将JSON字符串或Map类型的数据转换成Java对象。以下是将Map类型的数据转换成Java对象的示例代码&#xff1a; import com.fasterxml.jackson.databind.ObjectMapper;//定义Java对象 public class User {priva…

oracle客户端的安装教程

文章目录 一、安装前的准备工作 1.1、百度网盘安装包的连接 1.2、百度网盘oracle11g软件包 二、oracle数据库客户端的安装与数据的准备 安装步骤 前言 本文主要讲解oracle客户端的安装与简单使用过程 一、安装前的准备工作 1.1、百度网盘安装包的连接 客户端的软件包 …

STM32 FMC篇-SDRAM(IS42S16400J)

IS42S16400J 这个东西太常见啦&#xff0c;长方形的。不会过多解释&#xff0c;详细请阅读它的数据手册。 IS42S16400J是一种高速同步动态随机存储器(SDRAM)&#xff0c;64Mb的存储容量&#xff0c;采用4个bank&#xff0c;每个bank大小为16Mb&#xff0c;总线宽度为16位&…

【CW32开发】00 开发环境搭建和示例代码运行

1.下载MDK 2.下载芯片相关的固件库 我用的是芯片是CW32F030系列&#xff0c;所以下载相应的固件库 下载地址&#xff1a;https://www.whxy.com/support/filelist/13 3.安装固件库 解压下载的文件&#xff0c;并在cw32f030-stdperiph-lib\IdeSupport\MDK路径下安装固件库 …

064:cesium设置点划线材质(material-8)

第064个 点击查看专栏目录 本示例的目的是介绍如何在vue+cesium中设置点划线材质,请参考源代码,了解PolylineDashMaterialProperty的应用。 直接复制下面的 vue+cesium源代码,操作2分钟即可运行实现效果. 文章目录 示例效果配置方式示例源代码(共89行)相关API参考:专栏…

CBFS Vault 2022 for .NET Crack

将多个文件打包到一个 Vault - 一个“文件中的文件系统”&#xff0c;完成每个文件的压缩、透明加密和随机读/写访问。 亮点包括新的日记选项、用于更好地控制和跟踪的新事件&#xff0c;以及一系列核心性能和可用性改进 [了解更多]。 CBFS保险库 在任何地方存储一个完整的文件…

chatgpt赋能Python-pythone怎么下载

Python下载&#xff1a;在SEO中的作用 介绍 Python是一种广泛应用于编程、自动化任务和数据处理的强大语言。在SEO中&#xff0c;Python也扮演了越来越重要的角色。Python有许多库和工具可供下载&#xff0c;这使得它成为了SEO领域中必不可少的一部分。在本文中&#xff0c;我…

人工智能之读懂CNN卷积神经网络

通过往期文章的分享,我们了解了神经网络的结构,一般分为输入层,隐藏层,输出层 TensorFlow神经网络 那什么是卷积神经网络那,这就要我们追溯一下人类识别图像的原理 人类的视觉原理如下:从原始信号摄入开始(瞳孔摄入像素 Pixels),接着做初步处理(大脑皮层某些细胞发现…

chatgpt赋能Python-pythondna匹配

Python DNA匹配&#xff1a;从概念到应用 概述 DNA匹配是生物学中的一个重要领域&#xff0c;它意味着找到两个DNA序列之间的相似性并确定它们之间的关系。Python是一种被广泛用于生物信息学中的编程语言&#xff0c;它提供了一系列强大的库和工具来处理DNA序列数据&#xff…

【C++从0到王者】第七站:内存管理(520没有对象?那就new一个)

文章目录 一、C/C内存分区二、C语言中动态内存管理方式三、C内存管理方式1.new/delete操作内置类型2.C为什么要搞new和delete3.C中new和delete操作自定义类型4.非要乱用delete和free会造成什么后果&#xff1f; 四、 operator new与operator delete函数五、operator new和opera…

在安卓中压缩GIF的几种方法(附实例代码)

前言 最近在划水摸鱼的时候&#xff0c;看到有位大佬发了一篇 GIF 压缩思路的文章。 让我突然想起来&#xff0c;很久以前我在我的项目 隐云图解制作 中就实现了一个动图工具箱&#xff0c;其中一个功能就是压缩GIF。 不过这位大佬只介绍了其中几种使用方法&#xff0c;还有…

Java动态类型语言支持

JDK7发布字节码首位新成员——invokedynamic指令。以实现动态类型语言支持。也是为JDK8里可以顺利实现Lambda表达式而做的技术储备。我们将在本文详细了解动态语言支持这项特性出现的背景和它的意义与价值。 1 动态类型语言 动态类型语言的关键特征是它的类型检查的主体过程是…

MJ discord 添加应用配置

discord 添加机器人 https://discord.com/developers/applications 刷新token后显示&#xff0c;即机器人Token&#xff0c;后续配置到 mj.discord.bot-token 如图勾选后&#xff0c;打开url进行授权 选择Midjourney Bot所在的服务器 勾上这两个选项&#xff0c;点击 Save Cha…

图片转Excel表格,识别准确率的重要性

摘要&#xff1a;随着科技的不断发展&#xff0c;图片转Excel表格的应用越来越广泛。通过OCR技术实现图片转Excel表格&#xff0c;OCR识别准确率的提高对于信息录入的精度以及后续数据分析的可靠性具有非常重要的作用。本文探讨了影响OCR识别准确率的因素&#xff0c;并提出了提…

2.MATLAB篇——基本操作与矩阵输入

>> cos(((12345)^5)^0.5)ans -0.3623>> help sinsin - 参数的正弦&#xff0c;以弧度为单位此 MATLAB 函数 返回 X 的元素的正弦。sin 函数按元素处理数组。该函数同时接受实数和复数输入。 对于 X 的实数值&#xff0c;sin(X) 返回区间 [-1, 1] 内的实数值。 对于…

数据结构-单调栈2

这里是解了一个新的题目&#xff0c;然后对于有重复值的单调栈做了一些改进&#xff08;只适用于特殊题目&#xff09;&#xff1a;有重复值的单调栈不再使用ArrayList或者LinkedList&#xff0c;而是像无重复值的那样直接使用下标&#xff0c;这种方法能保证最终的正确性&…

Python图片转字符画,太好玩啦(46)

小朋友们好&#xff0c;大朋友们好&#xff01; 我是猫妹&#xff0c;一名爱上Python编程的小学生。 和猫妹学Python&#xff0c;一起趣味学编程。 今日主题 什么是字符画呢&#xff1f; 如何用Python将图片转为字符画&#xff1f; 我们先找一幅原画&#xff0c;比如它吧&…