三十七、微服务保护

news2024/11/28 6:36:42

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 "读操作~~~~";
    }

对谁限流,给谁加流控 

 

(2)流控模式-链路

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

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

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

 

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

 

 

 

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

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

相关文章

DEJA_VU3D - Cesium功能集 之 109-三角形(标绘+编辑)

前言 编写这个专栏主要目的是对工作之中基于Cesium实现过的功能进行整合,有自己琢磨实现的,也有参考其他大神后整理实现的,初步算了算现在有差不多实现小140个左右的功能,后续也会不断的追加,所以暂时打算一周2-3更的样子来更新本专栏(每篇博文都会奉上完整demo的源代码…

HTTP第15讲——HTTP的连接管理

短连接 HTTP 协议最初&#xff08;0.9/1.0&#xff09;是个非常简单的协议&#xff0c;通信过程也采用了简单的“请求 - 应答”方式。 它底层的数据传输基于 TCP/IP&#xff0c;每次发送请求前需要先与服务器建立连接&#xff0c;收到响应报文后会立即关闭连接。 因为客户端与…

chatgpt赋能Python-numpy_数据归一化

Numpy 数据归一化&#xff1a;介绍和原理 随着大数据和机器学习的发展&#xff0c;数据预处理变得越来越重要。对于数据进行标准化和归一化是其中的一项常见操作。本文将介绍numpy中的数据归一化&#xff0c;包括其原理和实现方法。 什么是数据归一化&#xff1f; 在数据处理…

Spring AOP的概念和使用

什么是AOP AOP是一种思想&#xff0c;它叫做面向切面编程&#xff0c;简单的来说就是对某一类事请做集中处理。比如说&#xff1a;登录效验功能&#xff0c;在使用AOP之前&#xff0c;我们进行登录效验需要在每个方法中写一遍登录效验的代码&#xff1b;使用AOP后&#xff0c;…

chatgpt赋能Python-numpy提取数据

Numpy提取数据&#xff1a;一种高效处理数据的方法 Numpy是Python中一个用于科学计算的库&#xff0c;它提供了一些高效的数值计算工具和数据结构。其中一个重要的功能是对大量数据进行高效的处理与分析。本文将介绍Numpy提取数据的用法&#xff0c;帮助您更高效地处理数据。 …

Java参数绑定(包括按值传递和按引用传递)

在Java中&#xff0c;参数绑定是一种将实际参数值传递给方法或函数的过程。在方法调用中&#xff0c;参数绑定决定了方法的形式参数&#xff08;在方法声明中定义的参数&#xff09;和实际参数&#xff08;传递给方法的参数&#xff09;之间的关系。 Java中的参数绑定有两种形…

chatgpt赋能Python-numpy数据归一化

Numpy数据归一化&#xff1a;什么是归一化以及为什么要归一化&#xff1f; 当我们处理数据时&#xff0c;我们常常要将它们归一化。归一化是将数值范围缩放到标准范围内的过程。这可以确保不同的特征或变量在计算机算法中具有相同的权重。这对于一些机器学习算法、人工神经网络…

chatgpt赋能Python-mac_python怎么用

如何在Mac上使用Python进行编程&#xff1f; 如果你是一位Python开发者&#xff0c;想在Mac上进行编程&#xff0c;本篇文章将会告诉你如何使用Python在Mac上进行编程。首先&#xff0c;你需要确认你的Mac上是否安装了Python&#xff0c;如果你是新手&#xff0c;可以去Python…

nginx(七十六)nginx与HTTP请求行的深入探讨

一 nginx与请求行相关 nginx处理来自客户端的HTTP请求行和请求头 ① 关于请求行的变量 $request $request_method SP $request_uri SP $server_protocol "案例讲解" ② nginx作为服务端接收关于method控制 1) 请求方法和支持的协议版本包含如下: -->协议…

离线安装apisix

公司部分机器因为某些原因无法联网&#xff0c;只能离线安装apisix&#xff0c;折腾了很久&#xff0c;走了很多弯路&#xff0c;记录一下安装过程。 下载所有的包 安装epel源 sudo yum install epel-release在home下创建文件夹/apisix-dependence 下载apache-apisix-repo以…

chatgpt赋能Python-mac上的python

在Mac上使用Python编程的好处 作为一名有10年Python编程经验的工程师&#xff0c;我必须说Mac是一个出色的编程工作台。Mac操作系统本质上就是一个整合了各种开发工具的平台&#xff0c;为Python编程提供了很好的支持。这篇文章将介绍在Mac上使用Python编程的好处。 简单易用…

VOSviewer安装、环境配置及中英文文献的分析

VOSviewer介绍&#xff1a; VOSviewer是一个用于构建和可视化文献计量网络的软件工具。例如&#xff0c;这些网络可能包括期刊、研究人员或单个出版物&#xff0c;它们可以基于引文、书目耦合、共同引用或共同作者关系构建。VOSviewer 还提供文本挖掘功能&#xff0c;可用于构…

总线(计组)

概概述 基本概念 1、总线&#xff1a;是构成计算机互联的机构&#xff0c;是多个系统功能部之间进行数据传输的公共通路 2、总线的分类&#xff1a; 内部总线、系统总线、IO总线 内部总线&#xff1a;cpu连接寄存器及各运算部件的总线 系统总线&#xff1a;cpu连接其他高速功…

Typora的自定义主题

Typora的自定义主题 修改我们的Typora主题1. 在文件夹C:\Users\Peter\AppData\Roaming\Typora\themes中&#xff0c;加入下面的css文件即可&#xff0c;命名为my.css。my.css内容 2. 选择你的主题为my3. 效果如图 注意&#xff1a;如果你的字体没有完全像我一样&#xff0c;是因…

学习RHCSA的day.03

目录 2.6 Linux系统的目录结构 2.7 目录操作命令 2.8 文件操作命令 2.6 Linux系统的目录结构 1、Linux目录结构的特点 分区加载于目录结构&#xff1a; 使用树形目录结构来组织和管理文件。整个系统只有一个位于根分区的一个根目录&#xff08;树根&#xff09;、一棵树。…

chatgpt赋能Python-mac版python教程

了解Mac版Python教程 Python编程语言越来越受欢迎&#xff0c;是由其简单易学、使用广泛的特点所得。Mac用户也喜欢使用Python进行编程&#xff0c;因为Python在macOS中得到良好的支持。在本篇文章中&#xff0c;我们将介绍一些最受欢迎的Mac版Python教程&#xff0c;并提供一…

chatgpt赋能Python-a____python

理解Python的a[:]语法 Python是一门高级编程语言&#xff0c;它被广泛应用于数据分析、机器学习、人工智能等领域。在Python编程中&#xff0c;有一个很重要的语法就是a[:]。 在本文中&#xff0c;我们将介绍这个语法的含义、作用和用法&#xff0c;并帮助读者更好地理解这个语…

动态规划算法:解决复杂问题的利器

文章目录 摘要引言动态规划的基本原理动态规划的应用场景动态规划的实际代码示例总结与展望 动态规划算法的优缺点优点&#xff1a;缺点&#xff1a; 总结&#xff1a; 摘要 动态规划&#xff08;Dynamic Programming&#xff09;是一种高效解决复杂问题的算法方法&#xff0c…

如何学习网络安全?

近半年我一直在整理网络安全相关资料&#xff0c;对于网络安全该怎么入门我谈谈我的看法&#xff0c;网络安全一直处于法律的边缘&#xff0c;学的不好或者剑走偏锋一下子人就进去了&#xff0c;所以我建议入门前先熟读《网络安全法》&#xff0c;除此之外还有《互联网安全产品…

AVL树(平衡二叉搜索树)

如果BST树插入的顺序是有序的&#xff0c;那么BST树就会退化成一个双链表结构&#xff0c;查询的速率就会很慢&#xff0c; 所以有了AVL树的意义。 AVL树的定义&#xff1a; 是具有下列性质的二叉搜索树 1、它的左子树和右子树都是AVL树 2、左子树和右子树的高度之差的绝对值…