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

SpringCloud-Alibaba之Sentinel熔断与限流

在这里插入图片描述
在这里插入图片描述

一、下载安装运行

http://localhost:8080进行访问
登录账号和密码均为sentinel
github.com/alibaba/sentinel/releases

二、创建工程,并注册到nacos服务中心

  1. 依赖spring-cloud-starter-alibaba-nacos-discovery,spring-cloud-starter-alibaba-sentinel
    sentine-datasource-nacos (持久化)
  2. 配置文件
server:port: 8401
spring:application:name: cloudalibaba-sentinel-servicecloud:nacos:discovery:server-addr: localhost:8848sentinel:transport:dashboard: localhost:8080 # 8080监控8401port: 8719 # 假如被占用会自动从8719开始依此+1扫描,直至找到未被占用的端口
management:endpoints:web:exposure:include: '*'
  1. 启动类
@EnableDiscoveryClient
@SpringBootApplication
public class MainApp8401{public static void main(String[] args){SpringApplication.run(MainApp8401.class,args);}
}
  1. 业务类
@RestController
public class FlowlimitController{@GetMapping("/testA")public String testA(){return "------testA";}@GetMapping("/testB")public String testB(){return "-------testB";}
}

三、启动sentinel java -jar sentinel-dashboard-1.7.0.jar 启动微服务8401,查看sentinel控制台

Sentinel流控规则

在这里插入图片描述

QPS:每秒钟请求数量达到阈值进行限流,连续多次刷新请求即可。
线程数:调用该请求的线程数达到阈值进行限流,再代码中添加thread.sleep(3),然后多次刷新请求即可模拟出来

在这里插入图片描述

关联资源,当关联资源/testB的QPS阈值超过1,就限流/testA的Rest访问地址
利用postman进行模拟
在这里插入图片描述

Sentinel流控效果

在这里插入图片描述

严格控制请求通过的间隔时间,就是让请求匀速通过,对应的是漏桶算法。
在这里插入图片描述

降级规则

在这里插入图片描述
RT:平均响应时间,秒级。

  • 平均响应时间超出阈值且在时间窗口内通过的请求>=5,两个条件同时满足触发降级
  • 窗口期过后关闭断路器
  • RT最大4900(更大需要通过-Dcsp.sentinel.statistic.max.rt=XXXX才能生效)
    在这里插入图片描述
@GetMapping("/testD")
public String testD(){try{TimeUnit.SECONDS.sleep(1);}catch(InterruptedException e){e.printStackTrace();}log.info("testD测试RT");return "testD"
}

在这里插入图片描述

异常比例:秒级

  • QPS>=5且异常比例(秒级统计)超过阈值触发降级,时间窗口结束,关闭降级
    在这里插入图片描述
@GetMapping("/testD")
public String testD(){log.info("testD异常比例");int age = 10/0;return "testD"
}

在这里插入图片描述

异常数:分钟级

  • 异常数(分钟统计)超过阈值时,触发降级,时间窗口结束后,关闭降级
    在这里插入图片描述
@GetMapping("/testE")
public String testE(){log.info("testE测试异常数");int age = 10/0;return "testE 测试异常数";
}

热点Key限流

商品ID为参数,统计一段时间内最常购买的商品ID并进行限制
用户ID为参数,统计一段时间内频繁访问的用户ID进行限制
在这里插入图片描述

@GetMapping("/testHotKey")
@sentinelResource(value = "testHotKey",blockHandler = "deal_testHotKey")
public String testHotKey(@RequeestParam(value = "p1",required = false) String p1,@RequeestParam(value = "p2",required = false) String p2){return "--------testE 测试异常数";
}public String deal_testHotKey(String p1,String p2,BlockException exception){return "--------deal_testHotKey 测试异常数";
}

对第0个参数p1,进行阈值限定。
在这里插入图片描述
在这里插入图片描述

参数例外项,对参数指定的值进行阈值设定,如下所示:当参数为5,限流阈值改为200
在这里插入图片描述

系统规则

在这里插入图片描述

自定义限流处理逻辑

@GetMapping("/rateLimit/customerBlockHandler")
@SentinelResource(value = "customerBlockHandler",blockHandlerClass = CustomerBlockHandler.class,blockHandler = "handlerException2") //指定处理限流的类以及方法
public CommonResult customerBlockHandler(){return new CommonResult(200,"按客户自定义",new Payment(2020L,"serial002"));
}
/**另外创建一个handler包创建CustomerBlockHandler类自定义限流处理逻辑可以定义多个方法
*/
public class CustomerBlockHandler{public static CommonResult handlerException(BlockException exception){return new CommonResult(444,"按客户自定义自定义处理",new Payment(2020L,"serial002"));}public static CommonResult handlerException2(BlockException exception){return new CommonResult(444,"按客户自定义自定义处理",new Payment(2020L,"serial002"));}
}

@SentinelResource注解的属性

Controller中

@SentinelResource(value = "fallback",fallback = "handlerFallback") //只负责业务异常@SentinelResource(value = "fallback",blockHandler = "blockHandler") //赋值sentinel控制台的设置出现异常

若blockHandler和fallback都进行了配置,则被限流降级而抛出BlockException时只会进入blockHandler处理逻辑

远程调用接口@FeignClinet进行Sentinel组合

Sentinel规则持久化

将限流配置规则持久化到Nacos保存,只要刷新rest地址,sentinel控制台就能显示出流控规则。

一、工程中引入依赖

sentinel-datasource-nacos

二、配置文件中
在这里插入图片描述
三、nacos中添加配置列表,添加json配置规则
在这里插入图片描述

四、sentinel控制台就可以查到流控规则
在这里插入图片描述

相关文章:

SpringCloud-Alibaba之Sentinel熔断与限流

一、下载安装运行 http://localhost:8080进行访问 登录账号和密码均为sentinel 二、创建工程,并注册到nacos服务中心 依赖spring-cloud-starter-alibaba-nacos-discovery,spring-cloud-starter-alibaba-sentinel sentine-datasource-nacos (持久化)配置文件 se…...

深“扒”云原生高性能分布式文件系统JuiceFS

JuiceFS 是一款面向云原生设计的高性能分布式文件系统,在 Apache 2.0 开源协议下发布。提供完备的 POSIX 兼容性,可将几乎所有对象存储接入本地作为海量本地磁盘使用,亦可同时在跨平台、跨地区的不同主机上挂载读写。 JuiceFS 简介 JuiceFS…...

opencv-18 什么是色彩空间?

1.什么是色彩空间类型? 色彩空间类型,也称为颜色空间类型或色彩模型,是一种表示图像中颜色的方式。在计算机图形学和数字图像处理中,有许多种色彩空间类型,每种类型有不同的表达方式和特点。 常见的色彩空间类型包括&a…...

RedHat离线安装工具yum+gcc+pcre+zlib+openssl+openssh

RedHat离线安装工具yumgccpcrezlibopensslopenssh 【一】安装gcc-c(解决yum不可用问题)(1)问题描述(2)替换安装yum(3)安装gcc 【二】安装pcre【三】安装zlib【四】安装openssl【五】…...

Redis概述及安装、使用和管理

目录 一、NoSQL非关系型数据库 1.NoSQL概述 2.关系型数据库和非关系型数据库区别 (1)数据存储方式不同 (2)扩展方式不同 (3)对事务性的支持不同 3.非关系型数据库使用场景 二、Redis概述 1.简介 2…...

【算法第十一天7.25】二叉树前、中、后递归、非递归遍历

链接:力扣94-二叉树中序遍历 链接:力扣144-二叉树前序遍历 链接:力扣145-二叉树后序遍历 树的结构 * public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { thi…...

Linux搭建Promtail + Loki + Grafana 轻量日志监控系统

一、简介 日志监控告警系统,较为主流的是ELK(Elasticsearch 、 Logstash和Kibana核心套件构成),虽然优点是功能丰富,允许复杂的操作。但是,这些方案往往规模复杂,资源占用高,操作苦…...

[PyTorch][chapter 44][RNN]

简介 循环神经网络(Recurrent Neural Network, RNN)是一类以序列(sequence)数据为输入,在序列的演进方向进行递归(recursion)且所有节点(循环单元)按链式连接的递归神经网…...

20230726----重返学习-vue3项目实战-知乎日报第3天-TS-简历

day-121-one-hundred-and-twenty-one-20230726-vue3项目实战-知乎日报第3天-TS-简历 vue3项目实战-知乎日报第3天 封装按钮组件 jsx函数式组件 只能做静态页面,内部没有方法让它自动更新。 封装第三方按钮-非计算属性版 封装第三方按钮-不使用计算属性 src/c…...

TypeScript 在前端开发中的应用实践

TypeScript 在前端开发中的应用实践 TypeScript 已经成为前端开发领域越来越多开发者的首选工具。它是一种静态类型的超集,由 Microsoft 推出,为开发者提供了强大的静态类型检查、面向对象编程和模块化开发的特性,解决了 JavaScript 的动态类…...

商业密码应用安全性评估量化评估规则2023版更新点

《商用密码应用安全性评估量化评估规则》(2023版)已于2023年7月发布,将在8月1日正式执行。相比较2021版,新版本有多处内容更新,具体包括5处微调和5处较大更新。 微调部分(5处) 序号2021版本202…...

【软件测试】单元测试工具---Junit详解

1.junit 1.1 junit是什么 JUnit是一个Java语言的单元测试框架。 虽然我们已经学习了selenium测试框架,但是有的时候测试用例很多,我们需要一个测试工具来管理这些测试用例,Junit就是一个很好的管理工具,简单来说Junit是一个针对…...

【算法基础:搜索与图论】3.4 求最短路算法(Dijkstrabellman-fordspfaFloyd)

文章目录 求最短路算法总览Dijkstra朴素 Dijkstra 算法(⭐原理讲解!⭐重要!)(用于稠密图)例题:849. Dijkstra求最短路 I代码1——使用邻接表代码2——使用邻接矩阵 补充:稠密图和稀疏…...

【Matlab】基于卷积神经网络的数据分类预测(Excel可直接替换数据)

【Matlab】基于卷积神经网络的数据分类预测(Excel可直接替换数据) 1.模型原理2.数学公式3.文件结构4.Excel数据5.分块代码6.完整代码7.运行结果1.模型原理 基于卷积神经网络(Convolutional Neural Network,CNN)的数据分类预测是一种常见的深度学习方法,广泛应用于图像识…...

【C++ 重要知识点总结】自定义类型-枚举和联合

复杂类型 除了类之外还有Union、Enum连个特殊的类型。 Union 概念 union即为联合,它是一种特殊的类。通过关键字union进行定义,一个union可以有多个数据成员。 union Token{char cval;int ival;double dval; };用法 互斥赋值。在任意时刻&#xff0c…...

Centos MySql安装,手动安装保姆级教程

1.删除原有的mariadb,不然mysql装不进去 查询MAriaDB命令 rpm -qa|grep mariadb 删除 rpm -e --nodeps mariadb-libs-5.5.60-1.el7_5.x86_64 (yum -y remove mysql 如需要清除服务器上以前安装过的MySQL可执行此命令,执行前一…...

电脑C盘空间大小调整 --- 扩容(扩大/缩小)--磁盘分区大小调整/移动

概述: 此方法适合C盘右边没有可分配空间(空闲空间)的情况,D盘有数据不方便删除D盘分区的情况下,可以使用傲梅分区助手软件进行跨分区调整分区大小,不会损坏数据。反之可直接使用系统的磁盘管理工具进行调整…...

centos7设置网桥网卡

安装bridge-utils yum install bridge-utils修改ens33 网卡 TYPEEthernet BOOTPROTOnone DEFROUTEyes IPV4_FAILURE_FATALno IPV6INITyes IPV6_AUTOCONFyes IPV6_DEFROUTEyes IPV6_FAILURE_FATALno NAMEens33 UUID04b97484-25c8-45c7-8c8c-e335e8080e10 DEVICEens33 ONBOOTye…...

TCP模型和工作沟通方式

我们如何与客户沟通?理科生和技术人员可能在沟通技巧方面有所欠缺。 那么我们如何理解和掌握沟通的原则和技巧呢?我发现TCP网络交互模型很好的描述了沟通的原则和要点。下面我们就从TCP来讲沟通的过程。 TCP的客户端就像客户(甲方&#xff…...

Langchain 的 ConversationSummaryBufferMemory

Langchain 的 ConversationSummaryBufferMemory ConversationSummaryBufferMemory 在内存中保留最近交互的缓冲区,但不仅仅是完全刷新旧的交互,而是将它们编译成摘要并使用两者。但与之前的实现不同的是,它使用令牌长度而不是交互次数来确定何…...

vscode里如何用git

打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

React Native 导航系统实战(React Navigation)

导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...

在四层代理中还原真实客户端ngx_stream_realip_module

一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

基于Docker Compose部署Java微服务项目

一. 创建根项目 根项目&#xff08;父项目&#xff09;主要用于依赖管理 一些需要注意的点&#xff1a; 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件&#xff0c;否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

css的定位(position)详解:相对定位 绝对定位 固定定位

在 CSS 中&#xff0c;元素的定位通过 position 属性控制&#xff0c;共有 5 种定位模式&#xff1a;static&#xff08;静态定位&#xff09;、relative&#xff08;相对定位&#xff09;、absolute&#xff08;绝对定位&#xff09;、fixed&#xff08;固定定位&#xff09;和…...

Angular微前端架构:Module Federation + ngx-build-plus (Webpack)

以下是一个完整的 Angular 微前端示例&#xff0c;其中使用的是 Module Federation 和 npx-build-plus 实现了主应用&#xff08;Shell&#xff09;与子应用&#xff08;Remote&#xff09;的集成。 &#x1f6e0;️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...

Yolov8 目标检测蒸馏学习记录

yolov8系列模型蒸馏基本流程&#xff0c;代码下载&#xff1a;这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中&#xff0c;**知识蒸馏&#xff08;Knowledge Distillation&#xff09;**被广泛应用&#xff0c;作为提升模型…...

GruntJS-前端自动化任务运行器从入门到实战

Grunt 完全指南&#xff1a;从入门到实战 一、Grunt 是什么&#xff1f; Grunt是一个基于 Node.js 的前端自动化任务运行器&#xff0c;主要用于自动化执行项目开发中重复性高的任务&#xff0c;例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...