当前位置: 首页 > news >正文

【Sentinel的限流使用】⭐️SpringBoot整合Sentinel实现Api的限流

目录

前言

一、Sentinel下载

 二、SpringBoot 整合 Sentinel

三、流控规则

章末


前言

        小伙伴们大家好,上次使用OpenFeign时用到了 Hystrix实现熔断和限流的功能,但是发现该工具已经停止维护了,于是想到了Spring Cloud Alibaba开发的Sentinel工具,也可以实现流量控制,熔断降级,系统负载保护等

一、Sentinel下载

        项目地址:Releases · alibaba/Sentinel · GitHub

1.直接下载 jar 包,到文件下载目录层级打开命令页面

 2.使用 java -jar sentinel-dashboard-1.8.7.jar 启动sentinel 

注:sentinel默认启动使用的是 8080 端口,如果担心被占用可以指定端口号

java -jar sentinel-dashboard-1.8.7.jar --server.port=8333

3.访问管理页面

         访问 http://localhost:8333/#/login ,进到登陆页面,默认登陆用户密码都是sentinel

 二、SpringBoot 整合 Sentinel

2.1 引入依赖

        我这里制定了版本,因为用的父依赖中没有引用

        <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId><version>2.1.3.RELEASE</version></dependency>

2.2 配置信息 

spring:...cloud:sentinel:transport:#控制台地址配置dashboard: localhost:8333#传输端口port: 8719#暴露所有的端点
management:endpoints:web:exposure:include: "*"

2.3 启动类开启服务发现

        在启动类上加 @EnableDiscoveryClient 注解,打开服务发现功能

2.4 测试接口加注解@SentinelResource

    @SentinelResource@PostMapping(value = "/login")public BaseResult login(String username, String password) {UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));...return BaseResult.success();}

2.5 启动项目

        注:本地启动项目连接控制台后,发现看不到服务,可能是因为 Sentinel 本身懒加载的原因,就是说服务不被调用,sentinel 控制台是无法感知到服务的,需要手动调用一次接口刷新

        检测到服务后的界面如下:

      

三、流控规则

        3.1 基本介绍

资源名:唯一名称,默认的请求路径

针对来源:Sentinel 可以针对调用者进行限流,填写微服务名称,默认是default也就是不区分来源

阈值类型/单机阈值:

        1.QPS 每秒钟的请求数量 : 当调用该api接口的QPS到达阈值时,启动限流

        2.线程数:当调用该api的线程数达到阈值的时候,进行限流

是否集群:不需要集群

流控模式:挑默认的看下

        1.直接: api达到限流条件时,直接限流

流控效果: 

        1.快速失败 : 直接失败,抛出异常

        3.2 添加一个流控规则,限制单机阈值 QPS 为1

         3.3 注意事项

在添加流控规则的时候,可能会遇到添加失败的场景,也就是点击添加后控制台上没有显示

产生原因:可能是客户端是否使用了低版本的 fastjson,低版本的 fastjson 可能会有此问题,建议使用和 Sentinel 相关组件一致版本的 fastjson。

解决方案: 我这里升级了 fastjson 的版本之后就可以正常添加了

        <dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.58</version></dependency>

        3.4 测试接口

        因为设置的是每秒支持一个请求,所以测试的时候简单实现只要快速点击请求即可实现,结果如下,因为QPS 设置为1,所以每次通过的只有一个,拒绝 QPS 指的就是被限流请求失败的,同时到控制台看下日志,也会打出限流导致的异常日志

章末

       后续再补充熔断,负载的使用,以及搭配OpenFeign使用

        好了,文章到这里就结束了~ 

后续虽迟但到

一、sentinel 的熔断降级

        1.1、书接上文,替换 Hystrix 实现熔断降级,将 Hystrix 的配置项改为 false,另外添加 Sentinel 的配置并开启,如下图,测试下发现可以实现触发降级之后的操作,并且使用sentinel 控制台可以设置一系列的熔断操作

【远程调用✈️✈️】通过OpenFeign实现服务的远程调用,熔断降级等-CSDN博客

        1.2、熔断规则,这里的参数配置分别代表如下:

 熔断策略:

  • 慢调用比例:根据一定的时间窗口内请求的响应时间超过设定阈值的比例来触发熔断。
    例如:假设我们有一个服务,处理用户请求并返回结果。我们可以设置一个慢调用比例阈值,比如 0.5(50%)。这意味着如果有一段时间内超过一半的请求的响应时间超过了设定的阈值(比如 1秒),则触发熔断。这可以防止因为服务响应缓慢而影响整体系统性能。
  • 异常比例:根据一定的时间窗口内的请求异常比例来触发熔断。
    例如:如果某个服务的异常比例突然升高,可能会导致整个系统的可用性下降。通过设置异常比例阈值,比如 0.5(50%),当一定时间内的异常请求比例超过这个阈值时,触发熔断,防止异常的服务影响到整个系统。
  • 异常数:根据一定的时间窗口内的异常次数来触发熔断。
    例如:如果我们的服务处理了大量的异常请求,可能表明服务本身出现了问题。我们可以设置一个异常数阈值,比如每分钟超过 100 次异常请求,则触发熔断。这可以避免因为服务异常频繁而导致系统的崩溃。
  1. 最大 RT: 假设我们的服务要求在 500 毫秒内返回结果,但是由于某些原因,有些请求的响应时间超过了这个阈值。我们可以设置最大 RT 为 500 毫秒,当超过这个阈值时触发熔断,防止慢速请求占用系统资源。

  2. 熔断时长: 当熔断发生后,熔断器会进入一个打开状态,在熔断时长内拒绝所有请求。这个时长可以根据业务需求来设置,比如设置为 60 秒,表示熔断器打开后,需要等待 60 秒才能尝试恢复服务。

  3. 最小请求数: 在熔断器进入半开状态之前,需要满足一定数量的请求。比如设置最小请求数为 10,表示在尝试恢复服务之前,至少需要有 10 个请求经过熔断器。

  4. 统计时常: 统计时长用于计算慢调用比例、异常比例和异常数。比如设置统计时长为 1 分钟,则每分钟的请求数据将被用来判断是否触发熔断。

二、 sentinel 的热点规则

        新增热点规则的参数如下:

 

  1. 资源

    • 资源是需要进行限流的具体接口、URL 或方法等标识符。你需要指定哪些资源需要应用热点规则。
  2. 参数索引

    • 参数对应的 controller 中方法参数的下标,就是指对哪个方法参数作为热点参数
  3. QPS 阈值

    • QPS 阈值是指在一秒内允许通过的请求次数。当热点参数的访问频率超过该阈值时,将触发限流措施。
  4. 热点参数阈值

    • 热点参数阈值是针对热点参数的具体限流阈值。当热点参数的访问频率超过该阈值时,将触发限流。
  5. 统计时长

    • 统计时长是指统计数据的时间窗口大小,用于计算热点参数的访问频率。这个时间窗口内的请求数据将被用来判断是否触发限流。

 例如:

  1. 登录接口限流

    • 资源:/api/user/login(登录接口请求地址)
    • 参数索引:用户名(指定登录接口方法中的用户名参数为热点参数)
    • QPS 阈值:50
    • 热点参数阈值:5
    • 统计时长:1分钟
    • 这个规则将限制每个用户名在一分钟内访问 /api/user/login 接口的频率不能超过 50 次,并且对于任何单个用户名,每秒最多只能有 5 次登录请求。 

 三、总结

        不难发现,限流、熔断、热点等共同的特点就是在一个场景中,只要触发了我们提前配置好的限流策略,熔断降级,热点规则等条件,就会执行截断操作,放到代码层面来看就是相当于请求被拦截去执行指定方法,以达到对系统的保护,防止系统因过载崩溃,反过来,突发的流量激增,资源耗尽或者异常...就是请求拦截的各种场景,一旦预先配置的条件达到,就会执行相应的截断操作!

相关文章:

【Sentinel的限流使用】⭐️SpringBoot整合Sentinel实现Api的限流

目录 前言 一、Sentinel下载 二、SpringBoot 整合 Sentinel 三、流控规则 章末 前言 小伙伴们大家好&#xff0c;上次使用OpenFeign时用到了 Hystrix实现熔断和限流的功能&#xff0c;但是发现该工具已经停止维护了&#xff0c;于是想到了Spring Cloud Alibaba开发的Sentin…...

【示例】MySQL-SQL语句优化

前言 本文主要讲述不同SQL语句的优化策略。 SQL | DML语句 insert语句 插入数据的时候&#xff0c;改为批量插入 插入数据的时候&#xff0c;按照主键顺序插入 大批量插入数据的时候&#xff08;百万&#xff09;&#xff0c;用load指令&#xff0c;从本地文件载入&#x…...

QT 线程的使用

1.头文件&#xff1a; #include<QThread> 2.在.h文件中定义全局&#xff1a; QThread* threadTraj; void threadTrajProcess();//回调函数 3.在.cpp文件中&#xff1a; threadTraj new QThread();//初始化 //连接槽函数 QObject::connect(threadTraj, &QThre…...

Python基于flask的豆瓣电影分析可视化系统

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…...

【迅为iTOP-4412-linux 系统制作(4)】ADB 或者 TF 卡烧写测试

准备工作 编译生成的内核镜像uImage 和设备树 dtb 文件“exynos4412-itop-elite.dtb”已经可以使用了。 把编译生成的uimage和dtb文件。拷贝fastboot工具。官方的u-boot-iTOP-4412.bin 也拷贝到 platform-tools 文件夹目录内。system.img 也拷贝到 platform-tools 文件夹目录…...

阿里云对象存储OSS批量上传,单个上传,批量删除,单个删除!

请自行替换秘钥&#xff1a; #阿里云 OSS src/main/resources/application.properties #不同的服务器&#xff0c;地址不同 aliyun.oss.file.endpointhttps://oss-cn-hangzhou.aliyuncs.com aliyun.oss.file.accessKeyIdLTAI5t9wUqCoD42qPGRy8S aliyun.oss.file.accessKeySecre…...

Python的国际化和本地化【第162篇—国际化和本地化】

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 随着全球化的发展&#xff0c;多语言支持在软件开发中变得越来越重要。Python作为一种流行的…...

播放Samba协议下的音视频文件

Samba&#xff08;也被称为SMB/CIFS&#xff09;是一个用于在局域网内共享文件和打印服务的协议&#xff0c;广泛应用于Windows和Linux系统之间的文件共享。 一、展示Samba服务器下的文件 使用如jcifs这样的Java库来在安卓应用中集成SMB/CIFS客户端功能。这个库提供了与SMB/CI…...

Excel全套213集教程

Excel全套213集教程 包含技术入门93集 图表17集 数据透视35集 公式函数68 基础入门 93节 https://www.alipan.com/s/cMxuPstkS1x 提取码: 77dd 点击链接保存&#xff0c;或者复制本段内容&#xff0c;打开「阿里云盘」APP &#xff0c;无需下载极速在线查看&#xff0c;视…...

【七 (1)指标体系建设-构建高效的故障管理指标体系】

目录 文章导航一、故障概述1、故障&#xff1a;2、故障管理&#xff1a; 二、指标体系概述1、指标2、指标体系 三、指标体系构建难点1、管理视角2、业务视角3、技术视角 四、指标体系构建原则1、与战略目标对齐2、综合和平衡3、数据可获得性4、可操作性5、具体和可衡量6、参与和…...

Go gin框架(详细版)

目录 0. 为什么会有Go 1. 环境搭建 2. 单-请求&&返回-样例 3. RESTful API 3.1 首先什么是RESTful API 3.2 Gin框架支持RESTful API的开发 4. 返回前端代码 go.main index.html 5. 添加静态文件 main.go 改动的地方 index.html 改动的地方 style.css 改动…...

Git分布式版本控制系统——Git常用命令(二)

五、Git常用命令————分支操作 同一个仓库可以有多个分支&#xff0c;各个分支相互独立&#xff0c;互不干扰 分支的相关命令&#xff0c;具体如下&#xff1a; git branch 查看分支 git branch [name] 创建分支&#x…...

LeetCode 59.螺旋矩阵II

LeetCode 59.螺旋矩阵II 1、题目 力扣题目链接&#xff1a;59. 螺旋矩阵 II - 力扣&#xff08;LeetCode&#xff09; 给你一个正整数 n &#xff0c;生成一个包含 1 到 n2 所有元素&#xff0c;且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 示例 1&#xff1…...

03-JAVA设计模式-适配器模式

适配器模式 设么是适配器模式 它属于结构型模式&#xff0c;主要用于将一个类的接口转换成客户端所期望的另一种接口&#xff0c;从而使得原本由于接口不兼容而无法协同工作的类能够一起工作。 适配器模式主要解决的是不兼容接口的问题。在软件开发中&#xff0c;经常会有这…...

MVVM架构模式

目录 MVVM 数据绑定方式 实现方式 Model View ViewModel 数据绑定方式 vue&#xff1a;&#xff1a; 数据劫持和发布-订阅模式&#xff1a; Object.defineProperty() 方法来劫持&#xff08;监控&#xff09;各属性的 getter 、setter &#xff0c;并在数据&#xff08;对…...

leetcode2924--找到冠军II

1. 题意 给定一个有向无环图&#xff0c;方向表示胜负关系&#xff1b;求最后胜出的人。 2. 题解 将所有人标记为胜者&#xff0c;统计出度去掉对应胜者标记&#xff1b; 最后统计胜者数目&#xff0c;是否大于1&#xff0c;若大于1&#xff0c;则没有胜者&#xff0c;否则…...

嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记13:RTC实时时钟

系列文章目录 嵌入式|蓝桥杯STM32G431&#xff08;HAL库开发&#xff09;——CT117E学习笔记01&#xff1a;赛事介绍与硬件平台 嵌入式|蓝桥杯STM32G431&#xff08;HAL库开发&#xff09;——CT117E学习笔记02&#xff1a;开发环境安装 嵌入式|蓝桥杯STM32G431&#xff08;…...

统一用安卓Studio修改项目包名

可以逃跑&#xff0c;可以哭泣&#xff0c;但不可以放弃 --《鬼灭之刃》 修改项目包名 1&#xff09;选中项目中药修改的包名&#xff1a; 2)目结构显示方式&#xff0c;取消 Compact Middle Packages 选项&#xff1b; 3)右键要修改的包名&#xff0c;选择 Refactor —— Re…...

Spring Cloud Gateway详细介绍以及实现动态路由

一. 简介 Spring Cloud Gateway This project provides a libraries for building an API Gateway on top of Spring WebFlux or Spring WebMVC. Spring Cloud Gateway aims to provide a simple, yet effective way to route to APIs and provide cross cutting concerns to …...

transformer上手(6)—— 微调预训练模型

1 加载数据集 以同义句判断任务为例&#xff08;每次输入两个句子&#xff0c;判断它们是否为同义句&#xff09;&#xff0c;构建我们的第一个 Transformers 模型。我们选择蚂蚁金融语义相似度数据集 AFQMC 作为语料&#xff0c;它提供了官方的数据划分&#xff0c;训练集 / …...

PL0语法,分析器实现!

简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...

3403. 从盒子中找出字典序最大的字符串 I

3403. 从盒子中找出字典序最大的字符串 I 题目链接&#xff1a;3403. 从盒子中找出字典序最大的字符串 I 代码如下&#xff1a; class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...

【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具

第2章 虚拟机性能监控&#xff0c;故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令&#xff1a;jps [options] [hostid] 功能&#xff1a;本地虚拟机进程显示进程ID&#xff08;与ps相同&#xff09;&#xff0c;可同时显示主类&#x…...

【Go语言基础【13】】函数、闭包、方法

文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数&#xff08;函数作为参数、返回值&#xff09; 三、匿名函数与闭包1. 匿名函数&#xff08;Lambda函…...

JVM 内存结构 详解

内存结构 运行时数据区&#xff1a; Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器&#xff1a; ​ 线程私有&#xff0c;程序控制流的指示器&#xff0c;分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 ​ 每个线程都有一个程序计数…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf

FTP 客服管理系统 实现kefu123登录&#xff0c;不允许匿名访问&#xff0c;kefu只能访问/data/kefu目录&#xff0c;不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...

iview框架主题色的应用

1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题&#xff0c;无需引入&#xff0c;直接可…...

Golang——6、指针和结构体

指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...

R 语言科研绘图第 55 期 --- 网络图-聚类

在发表科研论文的过程中&#xff0c;科研绘图是必不可少的&#xff0c;一张好看的图形会是文章很大的加分项。 为了便于使用&#xff0c;本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中&#xff0c;获取方式&#xff1a; R 语言科研绘图模板 --- sciRplothttps://mp.…...

PostgreSQL——环境搭建

一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在&#xff0…...