sentinel新手入门安装和限流,热点的使用
1 sentinel入门
1.1下载sentinel控制台
🔗sentinel管理后台官方下载地址

下载完毕以后就会得到一个jar包
1.2启动sentinel
- 将jar包放到任意非中文目录,执行命令:
java -jar 名字.jar
- 如果要修改Sentinel的默认端口、账户、密码,可以通过下列配置:
| 配置项 | 默认值 | 说明 |
|---|---|---|
| server.port | 8080 | 服务端口 |
| sentinel.dashboard.auth.username | sentinel | 默认用户名 |
| sentinel.dashboard.auth.password | sentinel | 默认密码 |
- 例如,修改端口,用户名和密码
java -Dserver.port=8000 \-Dsentinel.dashboard.auth.username=sentinel \-Dsentinel.dashboard.auth.password=cgj1223. \-jar 名字.jar
-D 参数的理解,你可以理解为它在做“Define”的事 —— 定义一个系统级属性。
📌 举个例子:
-Dserver.port=8000
➡️ 在 Java 程序里可以这样获取:
String port = System.getProperty("server.port");
在我的mac上本地运行,参数全部默认


在远程linux运行也一样,需要保证有java的环境, 然后通过ip+端口访问即可
在linux加上 nohup 即使退出终端也可以正常访问
nohup java -Dserver.port=8000 -Dsentinel.dashboard.auth.username=sentinel -Dsentinel.dashboard.auth.password= 你的密码. -jar sentinel-dashboard-1.8.8.jar
1.2 访问sentinel
访问http://localhost:8080页面,就可以看到sentinel的控制台了:
需要输入账号和密码,默认都是:sentinel
登录后,发现一片空白,什么都没有:因为还没有监控任何服务。另外,sentinel是懒加载的,如果服务没有访问,看不到该服务信息。

1.4 idea整合sentinel
快速入门(直接模式)
1、引入sentinel依赖(在想要被流控的模块)
<!--sentinel-->
<dependency><groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
2、配置控制台
修改application.yaml文件,添加下面内容
spring:cloud:sentinel:transport:dashboard: ip:端口 # 配置sentinel控制台地址
3、访问引入依赖的微服务的任意接口后,sentinel 才会显示. 我点刷新点了5次


2 流量控制
限流是避免服务因突发的流量而发生故障,是对微服务雪崩问题的预防
2.1 相关概念
簇点链路:当请求进入微服务时,首先会访问DispatcherServlet(Spring MVC 架构的核心控制器,负责处理 HTTP 请求并将其转发到相应的处理器Controller),然后进入Controller、Service、Mapper,这样的一个调用链就叫做簇点链路。
资源:簇点链路中被监控的每一个接口就是一个资源,流控、熔断等都是针对簇点链路中的资源来设置的。
默认情况下sentinel会监控spring mvc的每一个端点(Endpoint,也就是controller中的方法),因此spring mvc的每一个端点就是调用链路中的一个资源。
例如,我们刚才访问的spzx-cloud-user中的UserController中的端点:/api/user/selectByUserId/{userId}
我们可以点击对应资源后面的按钮来设置规则:
1、流控:流量控制
2、降级:降级熔断
3、热点:热点参数限流,是限流的一种
4、授权:请求的权限控制
2.2 快速入门
需求:给 /api/user/selectByUserId/{userId}这个资源设置流控规则,QPS不能超过 2( 这里直接人工手点,不使用工具测试, 可以设置的低一点),然后测试。
步骤:
1、首先在sentinel控制台添加限流规则


浏览器手动进行测试 多刷几次

2、利用jmeter测试(如果你设置的比较大,那么就需要用工具在进行测试,模拟并发请求) 我更改为QPS为5
Apache JMeter 是 Apache 组织基于 Java 开发的压力测试工具,用于对软件做压力测试。
🔗官网下载地址
🔗csdn我上传的文件
通过如下命令打开jmeter
java -jar ApacheJMeter.jar

🔗要导入测试文件的地址


选择流控入门


10个线程,1秒内运行完,QPS是10,超过了5。
选中流控入门,QPS<5右键运行

可以看到,成功的请求每次只有5个。

注意:如果测试结果不是上述情况,那是因为sentinel在统计请求的时候,把一部分的请求统计到了下一秒中导致的。
流控模式简介
在添加限流规则时,点击高级选项,可以选择三种流控模式:
1、直接:统计当前资源的请求,触发阈值时对当前资源直接限流,也是默认的模式
2、关联:统计与当前资源相关的另一个资源,触发阈值时,对当前资源限流
3、链路:统计从指定链路访问到本资源的请求,触发阈值时,对指定链路限流
如下所示:

2.3 关联模式
关联模式:统计与当前资源相关的另一个资源,触发阈值时,对当前资源限流.
语法说明:对/api/user/updateUserById资源的请求进行统计,当访问流量超过阈值时,就对/api/user/selectByUserId/{userId}进行限流,避免影响/api/user/updateUserById资源。
使用场景:比如用户支付时需要修改订单状态,同时用户要查询订单。查询和修改操作会争抢数据库锁,产生竞争。业务需求是优先支付和更新订单的业务,因此当修改订单业务触发阈值时,需要对查询订单业务限流。
案例实现:
1、在UserController新建一个端点:/api/user/updateUserById,无需实现业务
// 修改用户数据端点
@GetMapping(value = "/updateUserById")
public String updateUserById() {return "修改用户数据成功";
}
2、重启服务,访问对应的端点,让其产生簇点链路

3、配置流控规则,当/api/user/updateUserById资源被访问的QPS超过5时,对/api/user/selectByUserId/{UserId}请求限流。**对哪个端点限流,就点击哪个端点后面的按钮。**我们是对用户查询/api/user/selectByUserId/{userId}限流,因此点击它后面的按钮:


4、在Jmeter中进行测试

但是访问查询接口,直接就被限流了,可以看到1000个线程,100秒,因此QPS为10,超过了我们设定的阈值5:
请求的目标是/api/user/updateUserById,这样这个端点就会触发阈值。但限流的目标是/api/user/selectByUserId/{userId},我们在浏览器访问,可以发现:

关联流控模式的使用场景:
1、两个有竞争关系的资源
2、一个优先级较高,一个优先级较低
对高优先级的资源的流量进行统计,当超过阈值对低优先级的资源进行限流。
2.4链路模式
链路模式:只针对从指定链路访问到本资源的请求做统计,判断是否超过阈值,如果超过阈值对从该链路请求进行限流。
案例实现:
/api/user/save --> users
/api/user/query --> users
都访问的是users资源, 目标 只对从/api/user/query这个接口来的进行限流
1、在UserService中添加一个queryUsers方法(共用的资源),不用实现业务
// 用来当被不同链路访问的资源
@SentinelResource("users")
public void queryUsers(){System.out.println("查询用户");
}
2、在UserController中,添加两个端点,在这两个端点中分别调用UserService中的queryUsers方法
//链路一
@GetMapping(value = "/save")
public String save() {userService.queryUsers();System.out.println("保存用户");return "订单保存成功" ;
}
//链路二
@GetMapping(value = "/query")
public String query() {userService.queryUsers();System.out.println("查询用户");return "查询用户成功" ;
}
4、通过**@SentinelResource**标记UserService中的queryUsers方法为一个sentinel监控的资源(默认情况下,sentinel只监控controller方法)
5、更改application.yml文件中的sentinel配置
链路模式中,是对不同来源的两个链路做监控。但是sentinel默认会给进入spring mvc的所有请求设置同一个root资源,会导致链路模式失效。因此需要关闭这种资源整合。
spring:cloud:sentinel:web-context-unify: false # 关闭context整合
6、重启服务,访问/api/user/save和/api/user/query,可以查看到sentinel的簇点链路规则中,出现了新的资源

7、添加流控规则
点击users资源后面的流控按钮(那个都行,因为是同一个资源)
只统计从/api/user/query进入/users的资源,QPS阈值为2,超出则被限流。

8、jmeter测试

- /api/user/save 没有被限流

- /api/user/query 被限流了

3 流控效果

流控效果是指请求达到流控阈值时应该采取的措施,包括三种:
1、快速失败:达到阈值后,新的请求会被立即拒绝并抛出FlowException异常,是默认的处理方式 (第一个入门案例就是)
2、warm up:预热模式,对超出阈值的请求同样是拒绝并抛出异常,但这种模式阈值会动态变化,从一个较小值逐渐增加到最大阈值
3、排队等待:让所有的请求按照先后次序进入到一个队列中进行排队,当某一个请求最大的预期等待时间超过了所设定的超时时间时同样是拒绝并抛出异常
3.1 warm up
阈值一般是一个微服务能承担的最大QPS,但是一个服务刚刚启动时,一切资源尚未初始化(冷启动),如果直接将QPS跑到最大值,可能导致服务瞬间宕机。
warm up也叫预热模式,是应对服务冷启动的一种方案。阈值会动态变化,从一个较小值逐渐增加到最大阈值。
工作特点:请求阈值初始值是 maxThreshold / coldFactor, 持续指定时长(预热时间)后,逐渐提高到maxThreshold值,而coldFactor的默认值是3。
例如,我设置QPS的maxThreshold为10,预热时间为5秒,那么初始阈值就是 10 / 3 ,也就是3,然后在5秒后逐渐增长到10。)
案例需求:给api/user/query这个资源设置限流,最大QPS为10,利用warm up效果,预热时长为5秒
1、配置流控规则

2、jmeter测试
选择《流控效果,warm up》



到sentinel控制台查看实时监控

3.2排队等待
排队等待: 让所有的请求按照先后次序进入到一个队列中进行排队,当某一个请求最大的预期等待时间超过了所设定的超时时间时同样是拒绝并抛出异常
例如:QPS = 5,意味着每200ms处理一个队列中的请求;timeout = 2000,意味着预期等待时长超过2000ms的请求会被拒绝并抛出异常。
那什么叫做预期等待时长呢?
比如现在一下子来了12 个请求,因为每200ms执行一个请求,那么:
1、第6个请求的预期等待时长 = 200 * (6 - 1) = 1000ms
2、第12个请求的预期等待时长 = 200 * (12-1) = 2200ms

4热点参数限流
配置介绍
之前的限流是统计访问某个资源的所有请求,判断是否超过QPS阈值。而热点参数限流是分别统计参数值相同的请求,判断是否超过QPS阈值。
案例演示
案例需求:给/api/user/selectByUserId/{userId}这个资源添加热点参数限流,规则如下:
1、默认的热点参数规则是每1秒请求量不超过2
2、给2这个参数设置例外:每1秒请求量不超过4
3、给3这个参数设置例外:每1秒请求量不超过10
注意事项:热点参数限流对默认的spring mvc资源无效,需要利用@SentinelResource注解标记资源
实现步骤:
1、标记资源
给UserController中的/api/user/selectByUserId/{userId}资源添加注解:

2、热点参数限流规则
访问该接口,可以看到我们标记的hot资源出现了



3、jmeter测试



相关文章:
sentinel新手入门安装和限流,热点的使用
1 sentinel入门 1.1下载sentinel控制台 🔗sentinel管理后台官方下载地址 下载完毕以后就会得到一个jar包 1.2启动sentinel 将jar包放到任意非中文目录,执行命令: java -jar 名字.jar如果要修改Sentinel的默认端口、账户、密码ÿ…...
Ubuntu 22 Linux上部署DeepSeek R1保姆式操作详解(Xinference方式)
一、安装步骤 1.基础环境安装 安装显卡驱动、cuda,根据自己硬件情况查找相应编号,本篇不介绍这部分内容,只给出参考指令,详情请读者自行查阅互联网其它参考资料。 sudo apt install nvidia-utils-565-server sudo apt install…...
ANTLR 实战_从零开始构建自定义语言解析器
1. 引言 1.1 什么是 ANTLR ANTLR(Another Tool for Language Recognition)是一个强大的解析器生成器,用于构建语言解析器、编译器和解释器。 1.2 ANTLR 的历史与发展 ANTLR 由 Terence Parr 创建,最初发布于 1995 年。经过多次版本更新,ANTLR 已成为构建解析器的首选工…...
CTF类题目复现总结-hashcat 1
一、题目地址 https://buuoj.cn/challenges#hashcat二、复现步骤 1、下载附件,解压得到What kind of document is this_文件; 2、用010 Editor打开What kind of document is this_文件,发现是office文件; 3、将后缀名改为ppt时…...
4月5日作业
需求: 1.按照图示的VLAN及IP地址需求,完成相关配置 2.要求SW 1为VLAN 2/3的主根及主网关 SW2为VLAN 20/30的主根及主网关,SW1和 SW2互为备份 3.可以使用super vlan 4.上层通过静态路由协议完成数据通信过程 5.AR1为企业出口路由器…...
Bert论文解析
文章目录 BERT:用于语言理解的深度双向转换器的预训练一、摘要三、BERT介绍BERT及其详细实现答疑:为什么没有标注的数据可以用来预训练模型?1. 掩码语言模型(Masked Language Model, MLM)2. 下一句预测(Nex…...
无招回归阿里
这两天,无招回归阿里的新闻被刷屏了。无招创业成立的两氢一氧公司无招的股份也被阿里收购,无招以这种姿态回归阿里,并且出任钉钉的 CEO。有人说,这是对 5 年前“云钉一体”战略的纠偏。现在确实从云优先到 AI 优先,但云…...
初探:简道云平台架构及原理
一、系统架构概述 简道云作为一款低代码开发平台,其架构设计以模块化和云端协同为核心,主要分为以下层次: 1. 前端层 可视化界面:基于Web的拖拽式表单设计器,支持动态渲染(React/Vue框架)。多…...
LeetCode 热题 100 堆
215. 数组中的第K个最大元素 给定整数数组 nums 和整数 k,请返回数组中第 **k** 个最大的元素。 请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。 示例 …...
面试常被问道OSPF的问题
面试中经常会涉及到OSPF相关的问题,作为网络工程师,我们对OSPF的了解可不能仅停留在“我知道它是路由协议”这么表面。 想面试官满意,拿到Offer,必须能回答得出细节,深度挖掘它的工作原理、配置技巧、以及应用场景。 …...
Redis(笔记)
简介: 常用数据类型: 常用操作命令: Redis的Java客户端: 操作字符串类型的数据: 操作Hash类型的数据: 操作列表类型的数据: 操作集合类型的数据: 操作有序集合类型数据: 通用命令…...
bootloader+APP中,有些APP引脚无法正常使用?
问:bootloaderAPP程序中,为什么有些APP引脚无法正常使用?无法设置高低电平 主控芯片GD32F415,参考案例bootloader中的引脚使用: 参考案例APP程序的引脚使用: 以及个人使用的无线模组,高电平使能…...
高并发内存池:原理、设计与多线程性能优化实践
高并发内存池是一种专门为多线程环境设计的内存管理机制,其核心目标是通过优化内存分配和释放过程,解决传统内存分配器(如malloc/free)在高并发场景下的性能瓶颈,显著提升多线程程序的内存访问效率。 目录 一、核心设计…...
基于内容的课程推荐网站的设计与实现00(SSM+htmlL)
基于内容的课程推荐网站的设计与实现(SSMhtml) 该系统是一个基于内容的课程推荐网站,旨在为用户提供个性化的课程推荐。系统包含多个模块,如教学视频、教学案例、课程信息、系统公告、个人中心和后台管理。用户可以通过首页访问不同的课程分类ÿ…...
生活电子常识--删除谷歌浏览器搜索记录
前言 谷歌浏览器会记录浏览器历史搜索,如果不希望看到越来越多的搜索记录,可以如下设置 解决 设置-隐私-自动填充表单 这个和浏览器记录的密码没有关系,可以放心删除...
学习threejs,使用Texture纹理贴图,测试repeat重复纹理贴图
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️Texture 纹理贴图1.1.1 ☘️…...
Git常用问题收集
gitignore 忽略文件夹 不生效 有时候我们接手别人的项目时,发现有的忽略不对想要修改,但发现修改忽略.gitignore后无效。原因是如果某些文件已经被纳入版本管理在.gitignore中忽略路径是不起作用的,这时候需要先清除本地缓存,然后…...
蓝桥杯基础算法-字符串与集合
对集合的考察集中在集合的特性和功能。 set-唯一性 list-有序性 集合元素的个数 思路分析:set的唯一性,取出重复的子串 eg: 下标0截取的范围:【0,最大下标】 下标1截取的范围:【1,最大下标…...
animals_classification动物分类
数据获取 深度学习训练中第一个是获取数据集,数据集的质量很重要,我们这里做的是动物分类,大致会选择几个动物,来做一个简单的多分类问题,数据获取的方法,鼠鼠我这里选择使用爬虫的方式来对数据进行爬取&a…...
对解释器模式的理解
对解释器模式的理解 一、场景1、题目【[来源](https://kamacoder.com/problempage.php?pid1096)】1.1 题目描述1.2 输入描述1.3 输出描述1.4 输入示例1.5 输出示例 二、不采用解释器模式1、代码2、“缺点” 三、采用解释器模式1、代码2、“优点” 四、思考1、解释器模式的意义…...
解决Oracle PL/SQL中“表或视图不存在“错误的完整指南
解决Oracle PL/SQL中"表或视图不存在"错误的完整指南 前言问题概述根本原因分析一、 编译时与运行时验证差异二、权限问题三、 Schema命名问题 实际案例演示案例1:动态分表查询案例2:权限不足的场景 实用排查步骤排查流程图最佳实践建议解决方…...
【Kubernetes】StorageClass 的作用是什么?如何实现动态存储供应?
StorageClass 使得用户能够根据不同的存储需求动态地申请和管理存储资源。 StorageClass 定义了如何创建存储资源,并指定了存储供应的配置,例如存储类型、质量、访问模式等。为动态存储供应提供了基础,使得 Kubernetes 可以在用户创建 PVC 时…...
linux如何查看当前系统的资源占用情况
在 Linux 系统中,有多个命令可以查看当前系统的资源占用情况。以下是一些常用的命令及其说明: 1. 查看内存使用情况:free free -h-h 参数表示以人类可读的格式显示(如 MB, GB)。输出示例: to…...
Arduino示例代码讲解:Row-Column Scanning an 8x8 LED matrix with X-Y input LED矩阵
Arduino示例代码讲解:Row-Column Scanning an 8x8 LED matrix with X-Y input LED矩阵 Row-Column Scanning an 8x8 LED matrix with X-Y input LED矩阵功能概述硬件部分:软件部分:代码逐行解释定义常量定义变量`setup()` 函数`loop()` 函数`readSensors()` 函数`refreshScr…...
SSH远程连接服务器(cursor)
安装Remote-SSH插件 Cursor是基于VSCode的,因此支持VSCode的Remote-SSH功能。打开Cursor,进入扩展市场(左侧活动栏的“Extensions”图标)。搜索“Remote - SSH”插件并安装(由Microsoft提供)。 配置SSH 在…...
笔记:docker安装(ubuntu 20.04)
sudo apt update #sudo:以 超级用户权限 运行命令。apt update:更新 APT 软件包管理器 的软件源列表,确保安装的是最新版本的软件。sudo apt install docker.io -y #apt install docker.io:安装 Docker; -y&#x…...
idea gitlab 操作
1.拉取脚本 账号登录 就可以获取git代码 2. 版本回退 hard暴力回退到暂存区 缓存区消失 3.版本合并 切换到目标分区 选择点击开发分区 进行合并...
【MATLAB第113期】基于MATLAB的EFAST扩展傅里叶幅度敏感性分析方法(有目标函数)
【MATLAB第113期】基于MATLAB的EFAST扩展傅里叶幅度敏感性分析方法(有目标函数) 一、方法概述 扩展傅里叶幅度敏感性检验(EFAST)是一种基于频域分析的全局敏感性分析方法,能够同时评估模型参数的一阶敏感性ÿ…...
REST 方法
FUNCTION ZFM_INTERFACE_LOG. *"---------------------------------------------------------------------- *"*"本地接口: *" IMPORTING *" REFERENCE(IV_DSTART) TYPE EDI_UPDDAT *"---------------------------------------…...
labelme json 标签转yolo txt【记录】
01 labelme json 转 txt(w_convert_labelme_to_yolo.py) #WT 将labelme json标签格式转换为YOLO txt格式 # 导入所需模块 import cv2 # OpenCV用于图像处理 import os # 操作系统路径管理 import json # JSON文件解析 import glob # 文件通配符搜索…...
