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 <…...
Matlab中的handle 类
目录 说明 类属性 方法 公共方法 事件 示例 从 handle 派生类 说明 handle 类是遵守句柄语义的所有类的超类。句柄是引用 handle 类的对象的变量。多个变量可以引用同一个对象。 handle 类是抽象类,这样无法直接创建该类的实例。使用 handle 类派…...
C#,数值计算——Multinormaldev的计算方法与源程序
1 文本格式 using System; namespace Legalsoft.Truffer { public class Multinormaldev : Ran { public Cholesky chol { get; set; } null; private int mm { get; set; } private double[] mean { get; set; } private double[,] xvar {…...
软件项目测试用例评审
软件项目测试用例评审是确保测试计划的一部分(即测试用例)满足项目质量和要求的关键步骤之一。以下是一个通用的软件项目测试用例评审流程,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎…...
图像处理与计算机视觉--第二章-成像与图像表示-8问
图像处理与计算机视觉--第二章-成像与图像表示-8问 1.光谱波长分布及其成像特点各是什么? 光谱波长分布:是指在不同波长范围内的光的强度或能量分布。它通常可以用光谱图来表示,其中横轴是波长,纵轴是光的强度或能量。 成像特点…...
python中使用多线程批量导入包
问题放到前面,目前发现一个问题,importlib对于c/c编译过来的包,只支持导入最顶层的包,不过也够了。 因为有些项目的依赖太多,所以导致每个文件头部都包含大量import语句,用来导入必要的包,如果量…...
齿轮减速机设备类网站pbootcms模板(PC端+手机端自适应)
齿轮减速机设备类网站pbootcms模板-手机端自适应,优化SEO效果 模板介绍: 这是一款基于PbootCMS内核开发的模板,专为机械设备和加工机械类企业设计。该模板具有简洁简单的页面设计,易于管理,同时还附带测试数据。通过使…...
MySQL报错:this is incompatible with sql_mode=only_full_group_by 解决方法
文章目录 项目场景:原因分析及解决方案:总结: 项目场景: 提示:这里简述项目相关背景: which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_modeonly_f…...
impala常用时间函数,date->string->timestamp互转
impala 和hive不一样,hive是弱类型,比如int和string在大部分条件下可以比较 比如hive select 11 --结果true或false 但是impala select 11 报错 operands of type TINYINT and STRING are not comparable: 1 1 这样带来的好处是 类型一致结果更…...
无源供电无线测温系统的应用意义
电力系统设备在长期的运行中,往往会产生老化或过热现象,如果没有及时发现和解决,可能会造成严重的火灾事故。由于变电站设备地理位置偏远,对于其维护和监控,管理人员不能做到面面俱到,巡检和维护的难度较大…...
使用 PyTorch 的计算机视觉简介 (1/6)
一、说明 Computer Vision(CV)是一个研究计算机如何从数字图像和/或视频中获得一定程度的理解的领域。理解这个定义具有相当广泛的含义 - 它可以从能够区分图片上的猫和狗,到更复杂的任务,例如用自然语言描述图像。 二、CV常见的问…...
青岛做网站公司/bt磁力bt天堂
做毕设需要做目标识别的内容,需要GPU进行训练,参考了很多装Cuda的博客和教程,也大致看了一下官方的安装文档,经过了三个月断断续续的摸索,终于把实验室的电脑和自己的电脑成功装上了cuda8.0版本,并在后续装…...
怎么在虚拟空间做两个网站/企业网站有哪些功能
传送门 解题思路 首先给出的树形态没用,因为除根结点外每个点只有一个父亲,它只需要保证和父亲颜色不同即可。设\(f(k)\)表示至多染了\(k\)种颜色的方案,那么\(f(k)(k-1)^{(n-1)}*k\),而我们要求的是恰好染\(k\)种颜色的方案数&am…...
免费建站软件排行榜/网址大全下载到桌面
注解注入失败有很多种情况,我这里列举其中一种 我直接删掉了SpringBootApplication()括号中的代码,直接就解决了 你可以看看你的启动注解中是否添加了别的代码 我这个比较偏,希望不会有人用到 你的问题可能也会和我相似,启动注…...
域名注册了 如何做网站/2023年8月新冠又来了
title转载于:https://www.cnblogs.com/wangjixianyun/p/9036220.html...
寻花问柳一家专门做男人的网站/网上培训
Design Principles 这些设计原则能优化Android用户体验并使激发用户的最大兴趣,当你设计思考时要时刻想着他们,不要偏离目标。 打动我 用惊奇的方式吸引我 漂亮的界面,精心放置的动画,适时的声音反馈都是美好的体验,敏…...
南京有哪些做网站的公司/360网站排名优化
问题 MediaConvert进行转码任务的时候,需要及时了解MediaConvert转码任务的状态。因为AWS设计成MediaConvert转码任务只能给AWS的服务监控平台CloudWatch发事件,这次就来说说怎么在CloudWatch上面配置对MediaConvert转码任务的监听。 步骤 MediaConve…...