Sentinel微服务保护
目录
雪崩问题
解决雪崩问题的方法:
我们使用sentinel组件实现微服务的保护
一:下载sentinel
二.启动sentinel
三.访问:localhost:8080 默认的账号和密码都是sentinel
微服务整合sentinel
一.导入sentinel依赖
二.在application.yml配置文件中编写配置sentinel控制台的地址
第三步:启动微服务项目,并访问微服务的某一个接口
Sentinel设置流控
使用jmeter工具测试接口
jmeter介绍
jmeter安装
启动
编辑 使用
测试计划添加线程组
添加http请求行为编辑
编辑 添加响应结果监听器
启动线程组
查看结果树,有一个成功,因为设置了sentinel流控设置了一秒只能访问一次这个接口
查看聚合报告
编辑 流控模式
直接模式
关联模式
雪崩问题
微服务调用链路中的某一个服务故障,引起整个链路中所有微服务都不可用,就会造成雪崩
举个例子:一个微服务就是一个tomcat服务器,而一个tomcat服务器只有几百个线程可用,这个A服务在访问另一个B微服务时,需要60秒才能响应,那么这个A服务的所有线程都会因为B服务的长时间不响应而阻塞,最后导致A服务不可用,进而导致调用A微服务的所有微服务都不可用,这就是雪崩问题
解决雪崩问题的方法:
1.超时处理:设置超时时间,请求超过一定时间没有响应就直接返回错误信息,这样一来就不会无休止等待
2.舱壁模式:限定每一个微服务能使S用的线程数,从而避免耗尽整个tomcat的资源,因此也叫做线程隔离
3.熔断降级:由断路器统计业务执行的异常比例,如果超出阈值则会熔断该服务,拦截访问该业务的一切请求。就是一个微服务出现内部异常,一旦超过一定比例,就会有一段时间其他服务都不能访问整个出现问题的微服务,过了一段时间后才尝试进行访问,如果还是不行就继续熔断
4.流量控制:限制业务访问的QPS(每秒的访问数量),避免服务因为流量激增而故障。就是如果有几万个请求同时访问一个服务,需要把这些请求分批次少量的发送服务
我们使用sentinel组件实现微服务的保护
一:下载sentinel
下载地址
Release v1.8.1 · alibaba/Sentinel
下载sentinel的jar包
二.启动sentinel
java -jar sentinel-dashboard-1.8.1.jar
三.访问:localhost:8080 默认的账号和密码都是sentinel

如果想改端口号
java -Dserver.port=9090 -Dcsp.sentinel.dashboard.server=localhost:9090 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.8.1.jar
微服务整合sentinel
一.导入sentinel依赖
<!-- 导入sentinel依赖--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId></dependency>
这里我没有指定版本号,因为我在父工程已经导入了spring-cloud-alibaba的父工程来管理spring-cloud-alibaba的所有组件的版本号
<!-- SpringCloudAlibaba的父工程,管理依赖--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${spring-cloud-alibaba}</version><type>pom</type><scope>import</scope></dependency>
二.在application.yml配置文件中编写配置sentinel控制台的地址
spring:cloud:sentinel:transport:dashboard: localhost:9090 #控制台地址
第三步:启动微服务项目,并访问微服务的某一个接口
可以发现sentinel已经监控到了这个order-service微服务

簇点链路:就是项目内的调用链路,链路中被监控的每一个接口就是一个资源。默认情况下sentinel会监控SpringMVC的每一个端点(Endpoint),一个端点就是一个接口,因此SpringMVC的每一个端点就是调用链路中的每一个资源。流控,熔断等都是针对簇点链路中的资源来设置的,因此我们可以点击后面的按钮来设置规则

Sentinel设置流控
流控设置:点击接口后面的流控按钮
选择阈值类型未QPS(每秒中的访问次数),然后阈值设置为1
这样一来这个接口的流控为:每秒中只能访问一次
效果
一秒内访问多次就会显示被sentinel阻塞,直接报错

使用jmeter工具测试接口
jmeter介绍
JMeter是由Apache组织开发的一款基于Java的压力测试工具。它最初设计用于Web应用测试,但随着时间的推移,JMeter的功能已经扩展到了其他的测试领域。JMeter能够模拟大量用户对服务器、网络或对象进行负载测试,从而测试它们在不同压力下的性能,并进行整体性能分析。
jmeter安装
官网下载链接Apache JMeter - Download Apache JMeter

启动
解压以后进入bin目录,打开jmeter.properties文件,修改语言为中文

点击jmeter.bat文件启动jemter工具
使用
测试计划添加线程组

在线程组中设置线程数为200,ramp-up为在多长时间内创建这200个线程,时间越短越高并发
循环次数为每个线程的执行次数

添加http请求行为
设置请求路径和编码格式 (utf8)
添加响应结果监听器


启动线程组

查看结果树,有一个成功,因为设置了sentinel流控设置了一秒只能访问一次这个接口

查看聚合报告
流控模式
- 直接模式:统计当前资源的请求,触发阈值对当前资源直接限流,也就是默认的模式
- 关联模式:统计与当前资源相关的另一个资源,触发阈值时,对当前资源限流
- 链路模式:统计从指定链路访问到本资源的请求,触发阈值时,对指定的链路限流
直接模式
对这个接口每秒钟只能访问五次

设置在2秒内创建20个线程,即一秒10个线程,期望的结果就是每秒钟有五个线程访问这个接口成功

关联模式
统计与当前资源相关的另一个资源,触发阈值时,对当前资源限流
使用场景:比如用户支付时需要修改订单状态,同时用户要查询订单。查询和修改会争抢数据库锁,就会产生竞争。业务需求是优先支付和更新订单的业务,因此当修改订单业务触发阈值时,需要对查询订单业务进行限流
写资源优先,一旦写资源达到阈值,就会对读资源的操作进行限流,因为写资源优先
例子:
写两个接口,一个查询,一个更新
@GetMapping("query")public String query() {return "查询订单";}@GetMapping("update")public String update(){return "更新订单";}
配置流控规则:当/order/update 资源被访问的QPS超过5时,对/order/query资源进行限流
在/order/query的流控按钮中编写
在jmeter中测试,一秒创建10个线程去访问/order/update,这样一来已经超过了QPS阈值(一秒只能访问5次),最后sentinel对/order/query进行限流


链路模式
链路模式:只针对从指定链路访问到本资源的请求做统计,判断是否超过阈值。
配置示例:
例如有两条请求链路:
-
/test1 --> /common
-
/test2 --> /common
如果只希望限制从/test2进入到/common的请求,而限制从/test1开始的,则可以这样配置:
实战案例
需求:有查询订单和创建订单业务,两者都需要查询商品。针对从查询订单进入到查询商品的请求统计,并设置限流。
步骤:
-
在OrderService中添加一个queryGoods方法,不用实现业务
-
在OrderController中,改造/order/query端点,调用OrderService中的queryGoods方法
-
在OrderController中添加一个/order/save的端点,调用OrderService的queryGoods方法
-
给queryGoods设置限流规则,从/order/query进入queryGoods的方法限制QPS必须小于2
注意:需要给queryGoods方法使用SentinelResourse注解,让sentinel知道这个方法也是一个资源,sentinel默认只会把使用SpringMVC注解的方法当作资源
//让sentinel知道这个方法也是一个资源,因为sentinel默认只会把使用SpringMVC注解的方法当作资源@SentinelResource("goods")public void queryGoods(){System.out.println("查询商品");}
在链路模式中,是对不同来源的两个链路做监控。但是sentinel默认会给进入SpringMVC的所有请求设置同一个root资源,会导致链路模式失效。
我们需要关闭这种对SpringMVC的资源聚合,修改order-service服务的application.yml文件:
spring:cloud:sentinel:web-context-unify: false # 关闭context整合
给/order/query的goods资源做链路限制
结果:
通过/order/save访问的goods资源不受限制

通过/order/query访问的goods资源每一秒只能访问2次
总结:
直接:直接当前资源进行限流
关联:如果高优先级资源 触发阈值,就对低优先级资源进行限制
链路:阈值统计时,只统计从指定资源进入当前资源的请求,是对请求来源的限流
流控效果
流控效果是指请求达到流控阈值时应该采取的措施,包括三种:
-
快速失败:达到阈值后,新的请求会被立即拒绝并抛出FlowException异常。是默认的处理方式。
-
warm up:预热模式,对超出阈值的请求同样是拒绝并抛出异常。但这种模式阈值会动态变化,从一个较小值逐渐增加到最大阈值(自己规定的)。
-
排队等待:让所有的请求按照先后次序排队执行,两个请求的间隔不能小于指定时长
相关文章:
Sentinel微服务保护
目录 雪崩问题 解决雪崩问题的方法: 我们使用sentinel组件实现微服务的保护 一:下载sentinel 二.启动sentinel 三.访问:localhost:8080 默认的账号和密码都是sentinel 微服务整合sentinel 一.导入sentinel依赖 二.在application.yml配置…...
喜讯!实在Agent智能体入选《2024年度最佳企业服务AI产品榜》
10 月 30 日,硅星人主办的首届 AI 创造者大会(ACC)于北京中关村盛大举行。此次大会旨在为 AI 产业生态的共建者构筑一个多元化的交流平台。大会邀请了硅星人创始人兼 CEO 骆轶航、国家地方共建具身智能机器人创新中心 CTO 唐剑、百度智能云应…...
Aop+自定义注解实现数据字典映射
数据字典 Web项目开发中,字典表的一般都会存在,主要用来给整个系统提供基础服务。 比如男女性别的类型可以使用0和1来进行表示,在存储数据和查询数据的时候,就可以使用字典表中的数据进行翻译处理。 再比如之前做的一个项目中宠物…...
大语言模型(LLM)入门级选手初学教程 III
指令微调 一、指令数据的构建 包括任务描述(也称为指令)、任务输入-任务输出以及可选的示例。 Self-Instruct 指令数据生成:从任务池中随机选取少量指令数据作为示例,并针对Chat-GPT 设计精细指令来提示模型生成新的微调数据…...
STM32G0xx使用LL库将Flash页分块方式存储数据实现一次擦除可多次写入
STM32G0xx使用LL库将Flash页分块方式存储数据实现一次擦除可多次写入 参考例程例程说明一、存储到Flash中的数据二、Flash最底层操作(解锁,加锁,擦除,读写)三、从Flash块中读取数据五、测试验证 参考例程 STM32G0xx HAL和LL库Flash读写擦除操…...
SAP B1 认证考试习题 - 解析版(三)
前一篇:《SAP B1 认证考试习题 - 解析版(二)》 题目纯享版合集:《SAP B1 认证考试习题 - 纯享版》 五、运费(附加费用) 57. 以下哪个选项能够影响库存商品的价格 A. 仅为总量级别的附加费用 B. 只为行级…...
数据库开发规范
一、概述 本规范规定了,软件项目团队开发数据库的全流程规范。规范覆盖了数据库设计、管理及配套文件等。 二、项目阶段 项目阶段包括需求评审(需求分析阶段)、技术评审(方案阶段)、数据库开发…...
使用python向钉钉群聊发送消息
使用python向钉钉群聊发送消息 一、在钉钉群中新建机器人二、使用代码发送消息 一、在钉钉群中新建机器人 在群设置中添加机器人 选择自定义 勾选对应的安全设置 完成后会展示webhook,将地址复制出来,并记录,后面会用到 二、使用代码发送消…...
YOLOv11改进:SE注意力机制【注意力系列篇】(附详细的修改步骤,以及代码,与其他一些注意力机制相比,不仅准确度更高,而且模型更加轻量化。)
如果实验环境尚未搭建成功,可以参考这篇文章 ->【YOLOv11超详细环境搭建以及模型训练(GPU版本)】 文章链接为:YOLOv11超详细环境搭建以及模型训练(GPU版本)-CSDN博客 -------------------------------…...
STM32 基于HAL库和STM32cubeIDE的应用教程 (二)--GPIO的使用
如果有什么不懂的地方欢迎私聊博主,欢迎小白,博主必一一解答。 在 STM32 中,GPIO(通用输入输出)是与外部硬件接口进行交互的主要方式之一。STM32 HAL 库提供了简洁的接口来配置和控制 GPIO 引脚。下面是使用 STM32 HA…...
【毫米波雷达(七)】自动驾驶汽车中的精准定位——RTK定位技术
一、什么是RTK? RTK,英文全名叫做Real-time kinematic,也就是实时动态。这是一个简称,全称其实应该是RTK(Real-time kinematic,实时动态)载波相位差分技术。 二、RTK的组装 如上图所示&#x…...
Transformer和BERT的区别
Transformer和BERT的区别比较表: 两者的位置编码: 为什么要对位置进行编码? Attention提取特征的时候,可以获取全局每个词对之间的关系,但是并没有显式保留时序信息,或者说位置信息。就算打乱序列中token…...
linux 加载uPD720201固件
硬件 jetson orin nano jetpack 35.5.0 uPD720201是瑞萨推出的怕pcie扩展usb3.0芯片,支持flash主动加载与在系统被动加载 本文介绍如何做到没接flash情况下由系统加载固件 在uPD720201没接spi flash时候nano启动会报XhciDxe错误而自动重启,首先需要在ue…...
C语言中的信号量semaphore详解
在C语言中,**信号量(Semaphore)**是一种常用的同步机制,用于控制多个线程或进程对共享资源的访问。信号量可以实现类似于锁的效果,但更为灵活,适用于并发编程场景。 1. 什么是信号量 信号量可以看作是一个…...
0087__DirectX11 With Windows SDK--02 顶点/像素着色器的创建、顶点缓冲区
DirectX11 With Windows SDK--02 顶点/像素着色器的创建、顶点缓冲区-CSDN博客...
Windows换机华为擎云(银河麒麟V10+麒麟9000C CPU)后,使用selenium的程序怎么办(20241030)
原本的 seleniumChrome 已无法正常工作。chromedriver 报错:不支持 Linux/aarch64。 1、尝试Firefox、edge驱动。Firefox有一个geckodriver版本与Firefox版本的对照表,我看了一下,感觉他们是始终跟进新技术的。银河麒麟的很多库都是几年前的…...
linux 下 signal() 函数的用法,信号类型在哪里定义的?
--------------------------------------------------- author: hjjdebug date: 2024年 11月 07日 星期四 14:47:33 CST description: linux 下 signal() 函数的用法 --------------------------------------------------- signal 是linux 下最基础的进程通讯机制…...
享元模式及其运用场景:结合工厂模式和单例模式优化内存使用
介绍 享元模式(Flyweight Pattern)是一种结构型设计模式,它通过共享对象来减少内存使用,尤其是对于大量相似对象的场景。享元模式通常与工厂模式和单例模式结合使用,从而有效地控制和复用对象的创建。在享元模式中&am…...
【物联网技术】ESP8266 WIFI模块在STA模式下实现UDP与电脑/手机网络助手通信——UDP数据透传
前言:完成ESP8266 WIFI模块在STA模式下实现UDP与电脑/手机网络助手通信——实现UDP数据透传 STA模式,通俗来说就是模块/单片机去连接路由器/热点来通信。 UDP协议,是传输层协议,UDP没有服务器和客户端的说法。 本实验需要注意,wifi模块/单片机与电脑/手机需要连接在同一个…...
【SQL Server】华中农业大学空间数据库实验报告 实验一 数据库
实验目的 熟悉了解掌握SQL Server软件的基本操作与使用方法,认识界面,了解其两个基本操作系统文件,并能熟练区分与应用交互式与T-SQL式两种方法在SQL Server中如何进行操作;学习有关数据库的基本操作,包括:…...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...
工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...
测试markdown--肇兴
day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...
mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...
华为OD机考-机房布局
import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...
什么是VR全景技术
VR全景技术,全称为虚拟现实全景技术,是通过计算机图像模拟生成三维空间中的虚拟世界,使用户能够在该虚拟世界中进行全方位、无死角的观察和交互的技术。VR全景技术模拟人在真实空间中的视觉体验,结合图文、3D、音视频等多媒体元素…...
在树莓派上添加音频输入设备的几种方法
在树莓派上添加音频输入设备可以通过以下步骤完成,具体方法取决于设备类型(如USB麦克风、3.5mm接口麦克风或HDMI音频输入)。以下是详细指南: 1. 连接音频输入设备 USB麦克风/声卡:直接插入树莓派的USB接口。3.5mm麦克…...
数学建模-滑翔伞伞翼面积的设计,运动状态计算和优化 !
我们考虑滑翔伞的伞翼面积设计问题以及运动状态描述。滑翔伞的性能主要取决于伞翼面积、气动特性以及飞行员的重量。我们的目标是建立数学模型来描述滑翔伞的运动状态,并优化伞翼面积的设计。 一、问题分析 滑翔伞在飞行过程中受到重力、升力和阻力的作用。升力和阻力与伞翼面…...
