Spring Cloud Alibaba Sentinel流量防卫兵
文章目录
- Spring Cloud Alibaba Sentinel流量防卫兵
- 1. 分布式遇到的问题
- 2.解决的方法
- Sentinel: 分布式系统的流量防卫兵
- 1. 简介和特折
- Sentinel流量防卫兵的搭建
- 1.引入依赖
- 2.添加配置类
- 3.运行类上添加@SentinelResource,并配置blockHandler和fallback
- 4. linux中放入Sentinel控制台程序jar包,并执行
- 应用接入控制台(可选下面那种,简单)
- 1.使用整合包(这种)
- 2.通过nacos持久化
- 3.设置规则 json
Spring Cloud Alibaba Sentinel流量防卫兵
1. 分布式遇到的问题
服务可用性问题

服务可用性场景

服务雪崩效应
因服务提供者的不可用导致服务调用者的不可用,并将不可用逐渐放大的过程,就叫服务雪崩效应导致服务不可用的原因:

在服务提供者不可用的时候,会出现大量重试的情况:用户重试、代码逻辑重试,这些重试最终导致:进一步加大请求流量。所以归根结底导致雪崩效应的最根本原因是:大量请求线程同步等待造成的资源耗尽。当服务调用者使用同步调用时, 会产生大量的等待线程占用系统资源。一旦线程资源被耗尽,服务调用者提供的服务也将处于不可用状态, 于是服务雪崩效应产生了。
2.解决的方法
-
超时机制
在不做任何处理的情况下,服务提供者不可用会导致消费者请求线程强制等待,而造成系统资源耗尽。加入超时机制,一旦超时,就释放资源。由于释放资源速度较快,一定程度上可以抑制资源耗尽的问题。 -
服务限流
设置阈值,操作临界值不再进行向后端请求. -
隔离
每当向服务发起一个请求时,就是会发起一个http请求,每一个http请求就要开启一个线程,然后等待服务返回信息,这容易导致线程的堆积,所以就可以用http的URI作为一个标识,然后相同的URI可以开启一个线程池,然后线程池中限定线程数,这样就可以设置拒绝策略,当线程池满了,就可以快速的抛出异常或者拒绝请求,用线程池做到线程隔离来达到限流。 -
服务熔断
熔断就是有一个阈值,向服务发起请求后,如果不成功,就会记录次数,然后当连续失败次数达到阈值时,下次请求的时候就会直接把这个服务停止。请求有三种状态,可以请求(开),不可请求(关),还有一个中间状态,相当于半开状态,半开状态是什么意思呢,就是可以尝试着去请求,就可以在关闭状态后一段时间,发一个请求尝试一下是否可以请求成功,如果不成功,继续保持关闭状态,如果请求成功,则变成开放状态。
-
服务降级
降级其实就相当于,当我们向一个服务发起请求,当请求超时了,就会把这次请求记录到服务中,然后就会尝试向其他服务发请求,如果还没成功,就对这次请求进行处理(怎么处理取决于业务需求如)就相当于try
catch一样的逻辑,当然Sentinel底层使用aop来实现的。
Sentinel: 分布式系统的流量防卫兵
点击进入官方文档
1. 简介和特折
- Sentinel 介绍 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel
是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。 - Sentinel具有以下特征:
- 丰富的应用场景: Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、实时熔断下游不可用应用等。
- 完备的实时监控: Sentinel 同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数据,甚至 500 台以下规模的集群的汇总运行情况。
- 广泛的开源生态: Sentinel 提供开箱即用的与其它开源框架/库的整合模块,例如与 Spring Cloud、Dubbo、gRPC 的整合。您只需要引入相应的依赖并进行简单的配置即可快速地接入 Sentinel。
- 完善的 SPI
扩展点: Sentinel 提供简单易用、完善的 SPI 扩展点。您可以通过实现扩展点,快速的定制逻辑。例如定制规则管理、适配数据源等
Sentinel流量防卫兵的搭建
1.引入依赖

<dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-core</artifactId><version>1.8.0</version>
</dependency>
<dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-annotation-aspectj</artifactId><version>1.8.0</version>
</dependency>
2.添加配置类
这里的配置类也就是aop增强的时候所用的切点,但是这里用的时@Bean注入而不是 注解
@Configuration
public class SentinelConfig {@Beanpublic SentinelResourceAspect sentinelResourceAspect() {return new SentinelResourceAspect();}
}
3.运行类上添加@SentinelResource,并配置blockHandler和fallback

@RestController
public class UserController {@GetMapping("/user/{id}")@SentinelResource(value = "findOrderByUserId",fallback = "fallback", fallbackClass = UserController.class,blockHandler = "handleException", blockHandlerClass = UserController.class)public String findOrderByUserId(@PathVariable("id") Integer id) {if (id == 4) {throw new IllegalArgumentException("非法参数异常");}return "正常返回";}public static String fallback(Integer id, Throwable e) {return "===被异常降级啦===";}public static String handleException(Integer id, BlockException e) {return "===被限流啦===";}/*** 定义流控规则*/@PostConstructprivate static void initFlowRules() {List<FlowRule> rules = new ArrayList<>();FlowRule rule = new FlowRule();//设置受保护的资源rule.setResource("findOrderByUserId");// 设置流控规则 QPSrule.setGrade(RuleConstant.FLOW_GRADE_QPS);// 设置受保护的资源阈值// Set limit QPS to 20.rule.setCount(1);rules.add(rule);// 加载配置好的规则FlowRuleManager.loadRules(rules);}
}
4. linux中放入Sentinel控制台程序jar包,并执行
不让上传自己去外网下把这是网址
1.8.0版本
linux启动代码
java -Dserver.port=8858 -Dsentinel.dashboard.auth.username=sentinel
-Dsentinel.dashboard.auth.password=123456 -jar sentinel-dashboard-1.8.0.jar
应用接入控制台(可选下面那种,简单)
控制台加入jar包
<dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-transport-simple-http</artifactId><version>1.8.0</version>
</dependency>
写入参数

控制台
访问地址 虚拟机IP/设置的端口号 (8858)账号刚刚设置sentinel,密码123456
不出现这个也会正常,看一下机器列表有没有你就行啦,毕竟开源要什么自行车

1.使用整合包(这种)
一个依赖即可
可去掉上方加入的三个jar包,嫌麻烦不去除也可
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
配置文件
# 添加sentinel的控制台地址
spring.cloud.sentinel.transport.dashboard=127.0.0.1:8858# 可以理解为应用端的端口号 服务端是上面配置的8858
# 指定应用与Sentinel控制台交互的端口,应用本地会起一个该端口占用的HttpServer, 可以省略
spring.cloud.sentinel.transport.port=8719
直接运行即可
2.通过nacos持久化
引入依赖
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId></dependency><dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-datasource-nacos</artifactId></dependency>
新建一个bootstrp.properties文件

spring.cloud.nacos.config.server-addr=192.168.14.58:8848
#spring.application.name=sentinel-app
spring.cloud.sentinel.transport.dashboard=192.168.14.58:8858
spring.cloud.sentinel.datasource.flow.nacos.serverAddr=192.168.14.58:8848
spring.cloud.sentinel.datasource.flow.nacos.dataId=${spring.application.name}-flow-rules
spring.cloud.sentinel.datasource.flow.nacos.groupId=DEFAULT_GROUP
spring.cloud.sentinel.datasource.flow.nacos.data-type=json
spring.cloud.sentinel.datasource.flow.nacos.rule-type=flow
spring.cloud.sentinel.datasource.degrade.nacos.serverAddr=192.168.14.58:8848
spring.cloud.sentinel.datasource.degrade.nacos.dataId=${spring.application.name}-degrade-rules
spring.cloud.sentinel.datasource.degrade.nacos.groupId=DEFAULT_GROUP
spring.cloud.sentinel.datasource.degrade.nacos.data-type=json
spring.cloud.sentinel.datasource.degrade.nacos.rule-type=degrade
在nacos中创建 就是前面建立的点击跳转



3.设置规则 json
流量控制
[{// 资源名"resource": "/test",// 针对来源,若为 default 则不区分调用来源"limitApp": "default",// 限流阈值类型(1:QPS;0:并发线程数)"grade": 1,// 阈值"count": 1,// 是否是集群模式"clusterMode": false,// 流控效果(0:快速失败;1:Warm Up(预热模式);2:排队等待)"controlBehavior": 0,// 流控模式(0:直接;1:关联;2:链路)"strategy": 0,// 预热时间(秒,预热模式需要此参数)"warmUpPeriodSec": 10,// 超时时间(排队等待模式需要此参数)"maxQueueingTimeMs": 500,// 关联资源、入口资源(关联、链路模式)"refResource": "rrr"}
]
降级规则
[{// 资源名"resource": "/test1","limitApp": "default",// 熔断策略(0:慢调用比例,1:异常比率,2:异常计数)"grade": 0,// 最大RT、比例阈值、异常数"count": 200,// 慢调用比例阈值,仅慢调用比例模式有效(1.8.0 引入)"slowRatioThreshold": 0.2,// 最小请求数"minRequestAmount": 5,// 当单位统计时长(类中默认1000)"statIntervalMs": 1000,// 熔断时长"timeWindow": 10}
]
热点规则
[{// 资源名"resource": "/test1",// 限流模式(QPS 模式,不可更改)"grade": 1,// 参数索引"paramIdx": 0,// 单机阈值"count": 13,// 统计窗口时长"durationInSec": 6,// 是否集群 默认false"clusterMode": 默认false,// "burstCount": 0,// 集群模式配置"clusterConfig": {// "fallbackToLocalWhenFail": true,// "flowId": 2,// "sampleCount": 10,// "thresholdType": 0,// "windowIntervalMs": 1000},// 流控效果(支持快速失败和匀速排队模式)"controlBehavior": 0,// "limitApp": "default",// "maxQueueingTimeMs": 0,// 高级选项"paramFlowItemList": [{// 参数类型"classType": "int",// 限流阈值"count": 222,// 参数值"object": "2"}]}
]
系统规则
[{// RT"avgRt": 1,// CPU 使用率"highestCpuUsage": -1,// LOAD"highestSystemLoad": -1,// 线程数"maxThread": -1,// 入口 QPS"qps": -1}
]
授权规则
[{// 资源名"resource": "sentinel_spring_web_context",// 流控应用"limitApp": "/test",// 授权类型(0代表白名单;1代表黑名单。)"strategy": 0}
]
相关文章:
Spring Cloud Alibaba Sentinel流量防卫兵
文章目录 Spring Cloud Alibaba Sentinel流量防卫兵1. 分布式遇到的问题2.解决的方法 Sentinel: 分布式系统的流量防卫兵1. 简介和特折 Sentinel流量防卫兵的搭建1.引入依赖2.添加配置类3.运行类上添加SentinelResource,并配置blockHandler和fallback4. linux中放入…...
1.简单工厂模式
UML类图 代码 main.cpp #include <iostream> #include "OperationFactory.h" using namespace std;int main(void) {float num1;float num2;char operate;cin >> num1 >> num2 >> operate;Operation* oper OperationFactory::createOpera…...
GitHub Copilot Chat
9月21日,GitHub在官网宣布,所有个人开发者可以使用GitHub Copilot Chat。用户通过文本问答方式就能生成、检查、分析各种代码。 据悉,GitHub Copilot Chat是基于OpenAI的GPT-4模型打造而成,整体使用方法与ChatGPT类似。例如&…...
利用 QT 完成一个人脸识别系统,完成登录操作
1.配置文件 # Project created by QtCreator 2023-09-22T10:34:23 # #-------------------------------------------------QT core guigreaterThan(QT_MAJOR_VERSION, 4): QT widgetsTARGET project TEMPLATE appSOURCES main.cpp\widget.cppHEADERS widget.hFOR…...
MATLAB APP纯小白入门 两数相加
万事开头难,最怕第一次。使用matlab APP 实现两数求和,如下图所示,c a b,输入数字后,按 “” 就计算。 步骤 拖拽三个 Edit Field(Numeric) 过来,并且双击名字分别改为 a,b,c。注意修改名字后右边会有点变…...
ubuntu右上角的网络连接图标消失解决办法
ubuntu更新了几个文件后,我的ubuntu系统右上角的网络连接图标就消失了,然后怎么也找不到了,怎么办呢? 1、按快捷键ctrlaltt打开终端 2、按以下顺序输入如下的命令行 sudo service network-manager stop sudo rm /var/lib/Netw…...
conda创建虚拟环境安装aix360
目录 创建虚拟环境查看已有虚拟环境进入所创建的虚拟环境查看已安装的程序查看已安装的python模块配置镜像pipconda 安装aix360将环境添加到jupyter删除虚拟环境 创建虚拟环境 conda create -n aix360 python3.9查看已有虚拟环境 conda env list进入所创建的虚拟环境 activa…...
CentOS安装mariadb
1、 安装 [rootlocalhost ~]# yum install mariadb mariadb-server2、 启动并自启 [rootecs-3f21 ~]# systemctl enable mariadb –now3、 查看启动状态 [rootecs-3f21 ~]# systemctl status mariadb4、 初始化mariadb并设置root密码 [rootecs-3f21 ~]# mysql_secure_inst…...
FPGA——基础知识合集
文章目录 前言1、简述触发器与锁存器的区别2、简述 if-else 语句和 case 语句的区别3、相对 ARM、DSP 等处理器,谈谈 FPGA 具有哪些优势4、简述 Verilog 语句中阻塞赋值与非阻塞赋值的含义与区别,以及各自的适用的场景5、什么是同步电路,什么…...
【pytest】 标记冒烟用例 @pytest.mark.smoke
1. 使用 pytest.mark.smoke 标记用例 import pytest class Test_Smoke:def test_01(self):assert 112pytest.mark.smokedef test_02(self):assert 121pytest.mark.smokedef test_03(self):assert 1 2 3 2.配置文件pytest.ini [pytest] markers smoke 3. 运行指定标签 运…...
数据结构入门-14-排序
一、选择排序 1.1 选择排序思想 先把最小的元素拿出来 剩下的,再把最小的拿出来 剩下的,再把最小的拿出来 但是这样 空间复杂度是O(n) 优化一下,希望原地排序 1.1.2 选择原地排序 索引i指向0的位置 索引j指向i1的元素 j 后面的元素遍历&…...
Gin学习记录4——Controller和中间件
一. Controller 用不同的Controller可以实现业务的分类,不同类型的请求可以共用同一套中间件 1.1 单文件Controller 几乎等同于函数封装,直接将ctrl的代码写入到一个文件里然后调用: package adminimport ("net/http""git…...
FL Studio21.2中文版数字音乐制作软件
现在的FL也可以像splice一样啦,需要什么样的声音只需在fl里搜索,就会自动展示给你! FL Studio 简称FL,全称:Fruity Loops Studio,国人习惯叫它"水果"。软件现有版本是 FL Studio 21,已全面升级支…...
ELK 企业级日志分析系统 ELFK
目录 一、概述 二、组件介绍 2.1、ElasticSearch 2.2、Kiabana 2.3、Logstash 2.4、可以添加的其它组件:Filebeat 2.5、缓存/消息队列(redis、kafka、RabbitMQ等) 2.6、Fluentd 三、ELK工作原理 四、实例演示 1.ELK之 部署"E&q…...
IDEA中创建Java Web项目方法1
以下过程使用IntelliJ IDEA 2021.3 一、File-> New -> Project... 1. 项目类型中选择 Java Enterprise 项目 2. Name:填写自己的项目名称 3. Project template:选择项目的模板,Web application。支持JSP和Servlet的项目 4. Applica…...
源码:TMS FlexCel Studio for .NET 7.19
TMS FlexCel Studio for .NET 是100% 托管代码 Excel 文件操作引擎以及 Excel 和 PDF 报告生成,适用于 .NET、Xamarin.iOS、Xamarin.Android、Xamarin.Mac、Windows Phone 和 Windows Store 功能概述 使用 FlexCel Studio for .NET 创建可动态快速读写 Excel 文件的…...
多输入多输出 | MATLAB实现PSO-BP粒子群优化BP神经网络多输入多输出
多输入多输出 | MATLAB实现PSO-BP粒子群优化BP神经网络多输入多输出 目录 多输入多输出 | MATLAB实现PSO-BP粒子群优化BP神经网络多输入多输出预测效果基本介绍程序设计往期精彩参考资料 预测效果 基本介绍 Matlab实现PSO-BP粒子群优化BP神经网络多输入多输出预测 1.data为数据…...
操作系统:系统引导以及虚拟机
1.操作系统引导的过程 ①CPU从一个特定主存地址开始取指令,执行ROM中的引导程序(先进行硬件自检,再开机)②将磁盘的第一块:主引导记录读入内存,执行磁盘引导程序,扫描分区表③从活动分区(又称主…...
AIGC绘本——海马搬家来喽
随着ChatGPT的快速发展,人工智能领域也发生了翻天覆地的变化。今天,我们迎合科技潮流,利用AIGC的强大能力,可以创作很多精彩的作品,比如这样一本名为《海马搬家》的绘本(注:此绘本根据同名儿童故…...
strtok()函数的使用方法
strtok() 函数用于将字符串分割成子字符串(标记)。它在 C 语言中非常常用,可以通过指定分隔符来拆分原始字符串,并依次返回每个子字符串。 以下是 strtok() 函数的使用方法: #include <stdio.h> #include <…...
告别繁琐搜索:baidupankey让百度网盘提取码查询变得轻松高效
告别繁琐搜索:baidupankey让百度网盘提取码查询变得轻松高效 【免费下载链接】baidupankey 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 还在为百度网盘分享链接缺少提取码而烦恼吗?每次遇到需要输入提取码的资源,都要…...
DeepSeek Coder真能替代初级程序员?实测37个真实开发任务后的性能拐点分析
更多请点击: https://intelliparadigm.com 第一章:DeepSeek Coder真能替代初级程序员?实测37个真实开发任务后的性能拐点分析 我们对 DeepSeek Coder v2.5 在 GitHub 公共仓库中抽取的 37 个真实开发场景(含 LeetCode 中等题、小…...
影刀 RPA 给出的企业落地 RPA 项目的组织效率方案
一、组织架构与角色分工 1. 核心角色与职责 表格 角色 核心属性 关键职责 项目经理 管理属性 统筹 RPA 项目全流程:培训信息统计、账号协调、需求评估、进度管理、成果汇报 RPA 专员 强开发属性 承接高价值、高难度流程开发;可与项目经理为同一人 业务部门 需求 + 使用 + 弱…...
Chapter 13:企业实战 - 完整案例演练
Chapter 13:企业实战 - 完整案例演练 学习目标 掌握从需求分析到落地实施的完整流程 能够综合运用 Rules、Skills、MCP、Subagent 理解企业级项目的完整解决方案设计 具备独立设计企业扩展方案的能力 概念讲解(Why) 1.1 实战演练概述 案例背景: 某电商公司"极速商…...
Linux 网络虚拟化深度解析:从 veth 设备对到容器网络实战
第一部分:veth 设备对 —— 虚拟世界的 "网线" 1.1 什么是 veth 设备对? veth(Virtual Ethernet)设备对,可以理解为软件模拟的一对 "虚拟网卡",它们总是成对出现,就像用一…...
5个ReoGrid图表集成技巧:打造专业级数据报表
5个ReoGrid图表集成技巧:打造专业级数据报表 【免费下载链接】ReoGrid Fast and powerful .NET spreadsheet component, support data format, freeze, outline, formula calculation, chart, script execution and etc. Compatible with Excel 2007 (.xlsx) format…...
Arm ADI调试接口架构与实战解析
1. Arm Debug Interface (ADI) 架构解析 在嵌入式系统开发领域,调试接口是连接开发环境与目标硬件的关键纽带。作为行业标准制定者,Arm推出的Debug Interface (ADI) 提供了一套完整的芯片级调试解决方案。我曾在多个基于Cortex-M/A系列处理器的项目中深度…...
数据科学协作新范式:构建可复现、可追溯的“小宇宙”项目
1. 项目概述:从“小宇宙”到数据科学协作的范式革新最近在GitHub上闲逛,发现了一个挺有意思的项目——datawhalechina/tiny-universe。乍一看这个名字,“小宇宙”,感觉有点玄乎,但点进去仔细研究后,发现它远…...
EldenRingSaveCopier终极指南:轻松迁移艾尔登法环存档的完整解决方案
EldenRingSaveCopier终极指南:轻松迁移艾尔登法环存档的完整解决方案 【免费下载链接】EldenRingSaveCopier 项目地址: https://gitcode.com/gh_mirrors/el/EldenRingSaveCopier 你是否曾在艾尔登法环中投入数百小时,却因存档损坏或设备更换而面…...
MATLAB imagesc保姆级教程:从单一热图到多图排版,附完整代码
MATLAB imagesc全攻略:从热图绘制到高级排版实战 在数据科学和工程领域,可视化是理解复杂矩阵数据不可或缺的一环。MATLAB作为技术计算领域的标杆工具,提供了imagesc这一强大的矩阵可视化函数,能够将抽象的数字矩阵转化为直观的热…...
