sentinel详细使用教学
sentinel源码地址: https://github.com/alibaba/Sentinel/wiki/%E4%BB%8B%E7%BB%8D
sentinel官方文档: https://sentinelguard.io/zh-cn/docs/introduction.html
Sprong Cloud alibaba Sentinel文档【小例子】 : https://github.com/alibaba/spring-cloud-alibaba/wiki/Sentinel
1、概念
随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。
流量路由,流量控制,流量整形:流量从另外一个角度,也叫请求。
2、入门例子
0、启动nacos和redis

1、使用openfeign项目

2、引入依赖
给两个项目都添加如下依赖:
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency><dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-web-servlet</artifactId>
</dependency>
3、下载sentinel服务
下载sentinel服务路径: https://github.com/alibaba/Sentinel/releases
注意版本号对应

我们用的是1.8.0版本,下载服务端时下载对应的版本。

4、启动服务
执行java -jar sentinel-dashboard.jar

5、登录sentinel
http://localhost:8080/#/login
用户名和密码都是sentinel。

6、添加sentinel配置信息
给两个项目的application.yml配置文件里添加如下配置:
spring:cloud:sentinel:transport:dashboard: localhost:8080
7、启动并访问两项目 查看结果

【访问sentinel网站,设置限流】

注意:设置的单机阈(yu四声)(一秒钟访问的数量)值改为2,这样可以尽快看见限流。

【限流的效果】
一下一下点击访问的时候,还可以看见正常响应:

【概念了解】
【1、什么是QPS】
每秒请求的数量,要求发送请求并得到响应的整体时间。
【2、什么是RT】
响应时间。
【3、慢调用】
响应时间大于一定值。
【4、慢调用比例】
慢调用 / 总调用 比例值。
【5、比例阈值】
输入0到1之间的浮点型,代表百分比,0是0%,1是100%。
3、自定义流控响应
当被限流的时候,浏览器中展示的效果如下,用户体验度不好,可以进行以下操作。

1、添加过滤器
在user工程里,添加此过滤器。
import com.alibaba.csp.sentinel.adapter.servlet.CommonFilter;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import javax.servlet.Filter;@Configuration
public class SentinelFilterConfig {@Beanpublic FilterRegistrationBean<Filter> filterFilterRegistrationBean(){FilterRegistrationBean<Filter> result = new FilterRegistrationBean<>(new CommonFilter());result.addUrlPatterns("/*");return result;}
}
2、添加配置类
在user工程里,添加此过配置类。
import com.alibaba.csp.sentinel.adapter.servlet.callback.WebCallbackManager;
import com.alibaba.fastjson.JSON;
import org.jsoft.demo.utils.Result;
import org.springframework.context.annotation.Configuration;@Configuration
public class SentinelConfig {public SentinelConfig() {WebCallbackManager.setUrlBlockHandler((request, response, e) -> {Result error = Result.error();error.setMessage("被限流了!");response.setCharacterEncoding("UTF-8");response.setContentType("text/html;charset=utf-8");response.getWriter().write(JSON.toJSONString(error));});}
}
3、运行结果
重启user项目,重新添加流量阈值,查看运行结果。

4、熔断feign
官方地址: https://github.com/alibaba/Sentinel/wiki/%E7%86%94%E6%96%AD%E9%99%8D%E7%BA%A7
1、添加配置
在user工程里 开启feign的sentinel,写properties文件中可以,写在yaml文件也可以
feign.sentinel.enabled=true
2、修改feign接口注解
import org.jsoft.demo.feign.impl.ScoreFeignImpl;
import org.jsoft.demo.utils.Result;
import org.jsoft.demo.vo.User;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;@FeignClient(value = "demo-sentinel-s", fallback = ScoreFeignImpl.class) //fallback 一旦出现熔断,要走哪个类。
public interface ScoreFeign {@GetMapping("/score/info")Result info();@GetMapping("/score/{id}")Result id(@PathVariable String id);@PostMapping("/score/add")Result add(@RequestBody User user);}
3、添加feign接口实现类
import org.jsoft.demo.feign.ScoreFeign;
import org.jsoft.demo.utils.Result;
import org.jsoft.demo.vo.Score;
import org.jsoft.demo.vo.User;
import org.springframework.stereotype.Service;import java.util.ArrayList;
import java.util.List;@Service
public class ScoreFeignImpl implements ScoreFeign {@Overridepublic Result info() {List<Score> list = new ArrayList<>();for (int i = 0; i < 3; i++) {Score score = new Score();score.setName("name" + i);score.setScore(99.99);list.add(score);}return Result.ok().put("data",list);}@Overridepublic Result id(String id) {return null;}@Overridepublic Result add(User user) {return null;}
}
FeignClient注解中的fallback属性配置了如果熔断,应该访问的Feign接口实现类。当发生熔断时,会访问ScoreFeignImpl中对接口的实现方法。
4、查看运行结果
关掉Score工程,模拟宕机效果。在使用user工程去访问Score工程,就可以看见熔断处理了。
当遇到宕机的时候,就访问了自己工程里的feign实现类方法。

5、熔断资源
熔断资源官网地址: https://github.com/alibaba/Sentinel/wiki/%E7%86%94%E6%96%AD%E9%99%8D%E7%BA%A7
资源(是自己写的处理器方法,要对自己写的方法进行限流)是自定义的一个名称,这个名称会在Sentinel中显示,就可以对其进行熔断、降级等管理。
实现对资源管理的常用方式有两种,分别是try和注解。
1、try方式
在user工程的UserController里,添加如下方法:
@GetMapping("/try")public Result trySources(){String sourcesName = "testTry";try(Entry entry = SphU.entry(sourcesName)) { //SphU.entry方法通过传入资源名称和其他参数来获取访问令牌。如果获取到令牌,则可以访问目标资源;如果没有获取到令牌,则无法访问对应资源。return Result.ok();} catch (BlockException e) {return Result.error().setMessage("被限流了!");}}
注意Entry引包
import com.alibaba.csp.sentinel.Entry;
重启两个项目,运行一下看效果,就是自己写的方法,也被限流了。
2、注解方式
在user工程的UserController里,添加如下方法:
@GetMapping("/annotation")@SentinelResource(value = "testAnnotation", blockHandler = "annotationSourcesError")public Result annotationSources() {return Result.ok();}public Result annotationSourcesError(BlockException e) {return Result.error().setMessage("被限流了!");}
重启两个项目,运行一下看效果,就是自己写的方法,也别限流了。
6、其他说明
【1、异常比例】
是发生异常数 / 总请求数。
【2、异常数 】
发生异常次数。
【3、快速失败】
当QPS超过阈值是,直接限流,抛出异常。是默认值,可以用于线程数的限流。

【4、排队等待】
每秒可以处理10个请求,当超出这个值就会等待,等待10000毫秒后,如果还没有被处理会限流。只能用于QPS的限流。

【5、Warm Up】
可以让服务器的QPS“慢慢地”达到阈值,在10秒中之内让QPS到底10。只能用于QPS的限流。

【6、直接拒绝】
只对单一资源,当触发阈值时直接拒绝请求。

【7、关联】
针对两个资源有关联时,当前当前资源会为关联资源让步,保证关联资源有更大的阈值。

【8、链路】
从资源入口开始,整个两路的阈值。
【9、热点限流】
当系统中的某些数据被经常引用,可以对这些数据进行限流,减少服务器压力。
【10、系统规则】
针对硬件层面设置的规则,比如限制CPU的使用率
【11、授权规则】
根据请求的来源设置限流,其实就是黑白名单功能
[外链图片转存中…(img-enY0IDuf-1740809236667)]
【6、直接拒绝】
只对单一资源,当触发阈值时直接拒绝请求。
[外链图片转存中…(img-Q3MDsz2e-1740809236668)]
【7、关联】
针对两个资源有关联时,当前当前资源会为关联资源让步,保证关联资源有更大的阈值。
[外链图片转存中…(img-dSW0LFOy-1740809236668)]
【8、链路】
从资源入口开始,整个两路的阈值。
【9、热点限流】
当系统中的某些数据被经常引用,可以对这些数据进行限流,减少服务器压力。
【10、系统规则】
针对硬件层面设置的规则,比如限制CPU的使用率
【11、授权规则】
根据请求的来源设置限流,其实就是黑白名单功能
相关文章:
sentinel详细使用教学
sentinel源码地址: https://github.com/alibaba/Sentinel/wiki/%E4%BB%8B%E7%BB%8D sentinel官方文档: https://sentinelguard.io/zh-cn/docs/introduction.html Sprong Cloud alibaba Sentinel文档【小例子】 : https://github.com/alibaba/spring-cl…...
python django
官网地址 https://www.djangoproject.com/ 安装 控制台输入命令 pip install django 或者可以指定版本号 pip install django3.2.4 创建项目 在控制台找个目录存放生成好的项目,输入命令 django-admin startproject demo_django 然后用pycharm打开项目可以…...
SuperMap iClient3D for WebGL 影像数据可视范围控制
在共享同一影像底图的服务场景中,如何基于用户权限体系实现差异化的数据可视范围控制?SuperMap iClient3D for WebGL提供了自定义区域影像裁剪的方法。让我们一起看看吧! 一、数据制作 对于上述视频中的地图制作,此处不做讲述&am…...
HTML元素,标签到底指的哪块部分?单双标签何时使用?
1. 标签(Tag) vs 元素(Element) 标签(Tag) 标签是 HTML 中用于定义元素的符号,用尖括号 < > 包裹。例如 <img> 是标签。元素(Element) 元素是由 标签 内容…...
OpenHarmony4.1-轻量与小型系统ubuntu开发环境
因OpenHarmony官网提供包含轻量、小型与标准系统的全量代码非常宠大,解包后大概需要70G以上硬盘空间,如要编译标准系统则需要140G以上空间。 如硬盘空间有限与只使用轻量/小型OpenHarmony系统,则可以下载并直接使用本人裁剪源码过的ubuntu硬盘…...
秒杀系统的常用架构是什么?怎么设计?
架构 秒杀系统需要单独部署,如果说放在订单服务里面,秒杀的系统压力太大了就会影响正常的用户下单。 常用架构: Redis 数据倾斜问题 第一步扣减库存时 假设现在有 10 个商品需要秒杀,正常情况下,这 10 个商品应该均…...
LabVIEW中三种PSD分析VI的区别与应用
在LabVIEW的声音与振动分析工具包中,SVFA Power Spectral Density VI、SVFA Power Spectral Density Subset VI 和 SVFA Zoom Power Spectral Density VI 均用于信号频域分析,但它们在功能、适用场景和操作逻辑上存在显著差异。以下从区别、应用场合、注…...
Python 如何实现 Markdown 记账记录转 Excel 存储
文章精选推荐 1 JetBrains Ai assistant 编程工具让你的工作效率翻倍 2 Extra Icons:JetBrains IDE的图标增强神器 3 IDEA插件推荐-SequenceDiagram,自动生成时序图 4 BashSupport Pro 这个ides插件主要是用来干嘛的 ? 5 IDEA必装的插件&…...
蓝桥杯备考:动态规划入门题目之下楼梯问题
按照动态规划解题顺序,首先,我们要定义状态表示,这里根据题意f[i]就应该表示有i个台阶方案总数 第二步就是 确认状态转移方程,画图分析 所以实际上f[i] 也就是说i个台阶的方案数实际上就是第i-1个格子的方案数第i-2个格子的方案数…...
【树莓派学习】树莓派3B+的安装和环境配置
【树莓派学习】树莓派3B的安装和环境配置 文章目录 【树莓派学习】树莓派3B的安装和环境配置一、搭建Raspberry Pi树莓派运行环境1、下载树莓派镜像下载器2、配置wifi及ssh3、SSH访问树莓派1)命令行登录2)远程桌面登录3)VNC登录(推…...
算法题(83):寄包柜
审题: 需要我们对模拟柜子的数组进行插入数据和打印数据的操作 思路: 首先我们观察题目,发现可以用一个数组表示一个柜子,而数组中每个索引的位置可以看成是一个个格子。但是柜子的数据量是1e5,且格子的数据量是1e5.如…...
深入浅出MySQL:概述与体系结构解析
目录 1. 初识MySQL 1.1. 数据库 1.1.1. OLTP(联机事务处理)1.1.2. OLAP(联机分析处理) 2. SQL 2.1. 定义2.2. DQL(数据查询语言)2.3. DML(数据操纵语言)2.4. DDL(数据定…...
tin这个单词怎么记
英语单词 tin,一般用作名词,意为“罐头;锡”: tin n.锡;罐头;罐;罐头盒;(盛涂料、胶水等的)马口铁罐,白铁桶;罐装物;金属食品盒;烘焙…...
【0005】Python变量详解
如果你觉得我的文章写的不错,请关注我哟,请点赞、评论,收藏此文章,谢谢! 本文内容体系结构如下: 任何一个语言编写的程序或者项目,都需要数据的支持,没有数据的项目不能称之为一个…...
yolov8_pose模型,使用rknn在安卓RK3568上使用
最近在使用rknn的一些功能,看了看文档以及自己做的一些jni,使用上yolov8_pose的模型. 1.我们先下载一下rknn的模型功能代码,rk有自己做的一套demo 地址:GitHub - airockchip/rknn_model_zooContribute to airockchip/rknn_model_zoo development by creating an account on G…...
HTTP 协议的发展历程:从 HTTP/1.0 到 HTTP/2.0
HTTP 协议的发展历程:从 HTTP/1.0 到 HTTP/2.0 HTTP(HyperText Transfer Protocol,超文本传输协议)是 Web 的基础协议,用于客户端和服务器之间的通信。从 HTTP/1.0 到 HTTP/2.0,HTTP 协议经历了多次重大改…...
PartitionFinder2 安装与使用-bioinfomatics tools 051
1. 引言 PartitionFinder2 是目前针对大中型数据集(核苷酸、氨基酸、形态数据)最理想的分区检测和进化模型选择工具。其推演的最优进化模型结果与 jModelTest2(核苷酸)和 ProTest3(氨基酸)的结果较为接近。…...
MCP与RAG:增强大型语言模型的两种路径
引言 近年来,大型语言模型(LLM)在自然语言处理任务中展现了令人印象深刻的能力。然而,这些模型的局限性,如知识过时、生成幻觉(hallucination)等问题,促使研究人员开发了多种增强技…...
ARM 架构下 cache 一致性问题整理
本篇文章主要整理 ARM 架构下,和 Cache 一致性相关的一些知识。 本文假设读者具备一定的计算机体系结构和 Cache 相关基础知识,适合有相关背景的读者阅读 1、引言 简单介绍一下 Cache 和内存之间的关系 在使能 Cache 的情况下,CPU 每次获取数…...
GB28181未来发展趋势,如何借助于EasyGBS国标GB28181平台+EasyGBD国标GB28181设备端抓住大机会
GB28181规范目前已经迎来了2022版,随着规范行业影响力和应用范围越来越大,相信还会有类似2028、2030等迭代版本出来,我们预测的GB28181发展趋势可能会是以下几个方面,感兴趣的也可以跟我单独探讨: 技术标准持续优化&a…...
代数结构—笔记
线性空间 如果满足以下性质,则域 K K K上定义了二元运算(加法)与二元函数(数乘)的非空集合 X X X称为线性空间。 1、加法封闭性:对任意 u , v ∈ X u, v \in X u,v∈X,存在 u v ∈ X uv\in X …...
tcc编译器教程1 配置tcc编译器环境
TinyCC(又名TCC)是一款开源小型但超快速的C编译器。下面介绍在windows下使用 1软件下载 tcc编译器官网为 https://www.bellard.org/tcc/ 下载地址为 http://download.savannah.gnu.org/releases/tinycc/ 选择其中tcc-0.9.27-win64-bin.zip进行下载 htt…...
安全模块设计:token服务、校验注解(开启token校验、开启签名校验、允许处理API日志)、获取当前用户信息的辅助类
文章目录 引言pom.xmlI 校验注解ApiValidationII token服务TokenService获取当前用户信息的辅助类III 域登录接口响应数据登陆用户信息引言 pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/PO…...
机器学习:线性回归,梯度下降,多元线性回归
线性回归模型 (Linear Regression Model) 梯度下降算法 (Gradient Descent Algorithm) 的数学公式 多元线性回归(Multiple Linear Regression)...
报错The default superclass, “jakarta.servlet.http.HttpServlet“(已经配置好tomcat)
报错报错DescriptionResourcePathLocationType The default superclass,“jakarta.servlet.http.HttpServlet”, according to the project’s Dynamic Web Module facet version (5.0), was not found on the Java Build Path. 解决办法: 根据错误信息࿰…...
【人工智能】数据挖掘与应用题库(1-100)
1、涉及变化快慢的问题可以考虑使用导数来分析。 答案:对 2、导数的几何意义是曲线在某点处切线的斜率。 答案:对 3、函数在某点的左导数存在,则导数就存在。 答案:错 4、关于梯度下降算法,下列说法错误的是( ) 错误:梯度下降算法能找到函数精确的最小值。 5、正…...
C#委托(delegate)的常用方式
C# 中委托的常用方式,包括委托的定义、实例化、不同的赋值方式以及匿名委托的使用。 委托的定义 // 委托的核心是跟委托的函数结构一样 public delegate string SayHello(string c);public delegate string SayHello(string c);:定义了一个公共委托类型 …...
【弹性计算】弹性裸金属服务器和神龙虚拟化(一):功能特点
弹性裸金属服务器和神龙虚拟化(一):功能特点 特征一:分钟级交付特征二:兼容 VPC、SLB、RDS 等云平台全业务特征三:兼容虚拟机镜像特征四:云盘启动和数据云盘动态热插拔特征五:虚拟机…...
小结:BGP 的自动聚合与手动聚合
BGP 的自动聚合与手动聚合 BGP 在大规模网络中,通常会进行路由聚合(Route Aggregation),即将多个更具体(更小)的路由前缀合并成一个更大(更粗略)的前缀,以减少 BGP 路由…...
CTF中pwn shellcode题目
CTF中pwn shellcode题目 下面是一些shellcode代码和绕过技巧。 一些只给payload或者exp一把梭 首先给出两个常用shellcode仓库,可以检索需要的shellcode shellcode databaseexploit-db 基础 基础shellcode shellcode asm(shellcraft.sh())生成指定函数 用法…...
