SpringCloudAlibaba微服务实战系列(五)Sentinel1.8.5+Nacos持久化
Sentinel数据持久化
前面介绍Sentinel的流控、熔断降级等功能,同时Sentinel应用也在面临着一个问题:我们在Sentinel后台管理界面中配置了一堆流控、降级规则,但是Sentinel一重启,这些规则全部消失了。那么我们就要考虑Sentinel的持久化问题。
Sentinel为我们提供了几种持久化的解决方案:
- 存储到文件
- 使用Redis存储
- 使用Nacos存储
- 使用Zookeeper存储
- 使用Apollo存储
我们这里采用Nacos的方式进行存储这些数据。
Tip:既然使用Nacos进行持久化这些Sentinel规则数据,那么你的Nacos首先肯定是已经具备了持久化的环境的~~
实现持久化
pom.xml文件加入Nacos数据源的依赖
<!-- sentinel持久化访问Nacos的数据源依赖 -->
<dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
修改bootstrap.yml文件,增加datasource的配置
server:port: 9001
spring:application:name: consumer # 应用名cloud:nacos:discovery:server-addr: localhost:8848 # nacos服务地址sentinel:transport:port: 8719 # 启动http server,并且该服务与Sentinel仪表板进行交互,使sentinel可以控制应用,若端口占用则8719+1依次扫描dashboard: 127.0.0.1:8080 # 仪表版访问地址datasource: # sentinel数据源ds1: # 自定义连接名nacos:server-addr: localhost:8848 # nacos服务地址dataId: sentinel-consumer-ds1 # nacos的dataIdgroupId: DEFAULT_GROUP # 默认分组data-type: json # 数据类型 json类型rule-type: flow # flow表示流控规则
rule-type中的值,可以参考RuleType枚举类
五种规则持久化到Nacos中
authority(授权规则)degrade(降级规则)flow(流控规则)param(热点规则)system(系统规则)
当你的rule-type没设置时,程序启动时会报空指针异常
在Nacos的控制面板新建sentinel-consumer-ds1的DataId,具体配置内容如下:
[{"resource":"/sentinelTestB","limitApp":"default","grade": 1,"count": 1,"strategy": 0,"controlBehavior": 0,"clusterMode": false}
]
首先在Nacos后台管理界面上配置DataId和GroupId一定是和配置文件中一一对应的,json中[]表示可以配置多个
resource:表示资源名称limitApp:表示要限制哪些来源的调用grade:阈值类型,取值参考RuleConstant类(0–线程数限流 1–QPS限流)count:表示限流阈值strategy:表示流控模式,0表示直接,1表示关联,2表示链路controlBehavior:流控效果(0表示快速失败,1表示Warm Up,2表示排队等待)
那么这些参数,不同的规则该设置哪些参数呢,可以去参考某些规则类查看
-
流控规则:
FlowRule -
熔断降级:
DegradeRule字段 说明 默认值 resource 资源名,即规则的作用对象 grade 熔断策略,支持慢调用比例/异常比例/异常数策略 慢调用比例 count 慢调用比例模式下为慢调用临界 RT(超出该值计为慢调用);异常比例/异常数模式下为对应的阈值 timeWindow 熔断时长,单位为 s minRequestAmount 熔断触发的最小请求数,请求数小于该值时即使异常比率超出阈值也不会熔断(1.7.0 引入) 5 statIntervalMs 统计时长(单位为 ms),如 60*1000 代表分钟级(1.8.0 引入) 1000 ms slowRatioThreshold 慢调用比例阈值,仅慢调用比例模式有效(1.8.0 引入) -
热点规则:
ParamFlowRule字段 说明 默认值 resource 资源名,即规则的作用对象 grade 限流模式 QPS 模式 count 限流阈值,必填 durationInSec 统计窗口时间长度(单位为秒),1.6.0 版本开始支持 1s controlBehavior 流控效果(支持快速失败和匀速排队模式),1.6.0 版本开始支持 快速失败 maxQueueingTimeMs 最大排队等待时长(仅在匀速排队模式生效),1.6.0 版本开始支持 0 paramIdx 热点参数的索引,必填,对应 SphU.entry(xxx, args) 中的参数索引位置 paramFlowItemList 参数例外项,可以针对指定的参数值单独设置限流阈值,不受前面 count 阈值的限制。仅支持基本类型和字符串类型
这些json的规则除了可以在Sentinel控制面板控制之外,还可以用Java代码的方式,但是不够灵活。
配置好上面的属性后,使用Jmeter请求/sentinelTestB接口,测试流控效果。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QU9fy6um-1690078521125)(../imgs4/1.png)]](https://img-blog.csdnimg.cn/5cb85fa2632a41949a2d6416204680ff.png)
可以看到,流控已经生效了。再到sentinel仪表板中看下:

已经生成好了一个流控规则。
再来试试降级规则
bootstrap.yml中增加ds2数据源
server:port: 9001
spring:application:name: consumer # 应用名cloud:nacos:discovery:server-addr: localhost:8848 # nacos服务地址sentinel:transport:port: 8719 # 启动http server,并且该服务与Sentinel仪表板进行交互,使sentinel可以控制应用,若端口占用则8719+1依次扫描dashboard: 127.0.0.1:8080 # 仪表版访问地址datasource: # sentinel数据源ds1:nacos:server-addr: localhost:8848 # nacos服务地址dataId: sentinel-consumer-ds1 # nacos的dataIdgroupId: DEFAULT_GROUP # 默认分组data-type: json # 数据类型 json类型rule-type: flow # flow表示流控规则ds2:nacos:server-addr: localhost:8848 # nacos服务地址dataId: sentinel-consumer-ds2 # nacos的dataIdgroupId: DEFAULT_GROUP # 默认分组data-type: json # 数据类型 json类型rule-type: degrade # degrade表示降级规则
nacos面板中添加sentinel-consumer-ds2文件
[{"resource":"/sentinelTest","count":1,"grade":2,"timeWindow":5,"minRequestAmount":1}
]
- timeWindow:表示时间窗口,熔断的时间数。
- count:阈值
- grade:降级策略,参考RuleConstant类(0-RT 1-异常比例 2-异常数)
以上配置,我们的/sentinelTest模拟一个异常,然后用Jmeter多次请求
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lwozYNFW-1690078521127)(../imgs4/3.png)]](https://img-blog.csdnimg.cn/ccbcaeca2eea449ea6ac55d26ed1484e.png)
进入熔断降级。
最后再来看下系统规则的一个实例
bootstrap.yml中
server:port: 9001
spring:application:name: consumer # 应用名cloud:nacos:discovery:server-addr: localhost:8848 # nacos服务地址sentinel:transport:port: 8719 # 启动http server,并且该服务与Sentinel仪表板进行交互,使sentinel可以控制应用,若端口占用则8719+1依次扫描dashboard: 127.0.0.1:8080 # 仪表版访问地址datasource: # sentinel数据源ds1:nacos:server-addr: localhost:8848 # nacos服务地址dataId: sentinel-consumer-ds1 # nacos的dataIdgroupId: DEFAULT_GROUP # 默认分组data-type: json # 数据类型 json类型rule-type: flow # flow表示流控规则ds2:nacos:server-addr: localhost:8848 # nacos服务地址dataId: sentinel-consumer-ds2 # nacos的dataIdgroupId: DEFAULT_GROUP # 默认分组data-type: json # 数据类型 json类型rule-type: degrade # degrade表示降级规则ds3:nacos:server-addr: localhost:8848 # nacos服务地址dataId: sentinel-consumer-ds3 # nacos的dataIdgroupId: DEFAULT_GROUP # 默认分组data-type: json # 数据类型 json类型rule-type: system # system表示系统规则
在nacos中新增 ds3的,sentinel-consumer-ds3文件
[{"qps":1}
]
系统规则对应的是SystemRule类,有以下几个属性:
- avgRt:系统平均响应时间
- highestCpuUsage:CPU使用率
- highestSystemLoad:负载
- maxThread:最大线程数
- qps:每秒处理的请求数量
新增一个/sentinelTestC的资源,然后使用Jmeter压测一下,系统规则是系统级别的,即相对于资源的流控是比较粗粒度的了。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SagtgDhy-1690078521128)(../imgs4/4.png)]](https://img-blog.csdnimg.cn/eaf5cbe6233544da93ce07e0f36c819c.png)
同样地,其他的规则,可以找到它对应的Java配置方法,找到那个类,举一反三,将对应的配置修改一下就可以了。
有两个点需要注意下:
- 在Nacos控制台修改规则,Sentinel这边的规则会即时生效,重启服务后依然是有效的,毕竟已经做好持久化了
- 在Sentinel控制台修改的规则,不会被修改到nacos中,重启后还会变为nacos设置的值
相关文章:
SpringCloudAlibaba微服务实战系列(五)Sentinel1.8.5+Nacos持久化
Sentinel数据持久化 前面介绍Sentinel的流控、熔断降级等功能,同时Sentinel应用也在面临着一个问题:我们在Sentinel后台管理界面中配置了一堆流控、降级规则,但是Sentinel一重启,这些规则全部消失了。那么我们就要考虑Sentinel的持…...
pytest中conftest的用法以及钩子基本使用
一、conftest是什么? conftest是pytest进阶中的高级应用,最近正好用到这一块儿,研究之后,向大家分享该高级应用。 二、使用步骤 1.conftest代码块 以全局性使用driver为主,只启动一次浏览器: pytest.fi…...
数据结构---顺序栈、链栈
特点 typedef struct Stack { int* base; //栈底 int* top;//栈顶 int stacksize //栈的容量; }SqStack; typedef struct StackNode { int data;//数据域 struct StackNode* next; //指针域 }StackNode,*LinkStack; 顺序栈 #define MaxSize 100 typedef struct Stack { int*…...
我的MacBook Pro:维护心得与实用技巧
文章目录 我的MacBook Pro:维护心得与实用技巧工作电脑概况:MacBook Pro 2019款 16 寸日常维护措施个人维护技巧其他建议 我的MacBook Pro:维护心得与实用技巧 无论是学习还是工作,电脑都是IT人必不可少的重要武器。一台好电脑除…...
Higress非K8S安装
Higress非K8S安装 文章目录 Higress非K8S安装环境安装安装higress进入到higress 的目录下修改下nacos的地址启动Higress登录higress管理页面 Higress 是基于阿里内部构建的下一代云原生网关,官网介绍:https://higress.io/zh-cn/docs/overview/what-is-hi…...
QT--day4(定时器事件、鼠标事件、键盘事件、绘制事件、实现画板、QT实现TCP服务器)
QT实现tcpf服务器代码:(源文件) #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);//给服务器指针实例化空间server new QTc…...
hjm家族信托科技研究报告
目录 绪论 研究背景与意义 一、选题背景 二、选题意义 研究内容与主要研究方法 一、本文内容 二、研究方法 创新与不足 一、创新 二、不足之处 文献综述与理论基础 文献综述 国外研究现状国内研究现状国内外研究综述 理论基础 金融创新理论组合投资理论生命周期理论…...
[SQL挖掘机] - 视图相关操作
创建视图: create view view_name as select column1, column2, ... from table_name where condition;以上语句创建了一个名为view_name的视图,它基于table_name表格,并选择了列column1、column2等作为结果集。可以使用where子句来指定条件。 注意: 视…...
【Quartus FPGA】EMIF DDR3 读写带宽测试
在通信原理中,通信系统的有效性用带宽来衡量,带宽定义为每秒传输的比特数,单位 b/s,或 bps。在 DDR3 接口的产品设计中,DDR3 读/写带宽是设计者必须考虑的指标。本文主要介绍了 Quartus FPGA 平台 EMIF 参数配置&#…...
Flutter:flutter_local_notifications——消息推送的学习
前言 注: 刚开始学习,如果某些案例使用时遇到问题,可以自行百度、查看官方案例、官方github。 简介 Flutter Local Notifications是一个用于在Flutter应用程序中显示本地通知的插件。它提供了一个简单而强大的方法来在设备上发送通知&#…...
Spring AOP (面向切面编程)原理与代理模式—实例演示
一、AOP介绍和应用场景 Spring 中文文档 (springdoc.cn) Spring | Home 官网 1、AOP介绍(为什么会出现AOP ?) Java是一个面向对象(OOP)的语言,但它有一些弊端。虽然使用OOP可以通过组合或继承的方…...
什么是SCRUM认证体系 ?
Scrum认证是一个针对个人职业发展的认证体系,基础级认证主要面向Scrum的三个角色:Scrum Master、Scrum Product Owner 和 Developers。Scrum认证体系由Scrum官方机构—国际Scrum联盟(ScrumAlliance.org)制定和维护,Scr…...
DoIP学习笔记系列:(二)VN5620 DoIP测试配置实践笔记
文章目录 1. 添加.cdd2. CAPL中调用接口发送DoIP请求3. “Ethernet Packet Builder”的妙用4. CANoe也可以做交互界面在进行测试前,先检查车载以太网硬件连线是否正确,需要注意连接两端的Master、Slave,100M、1000M等基本情况,在配置VN5620的时候就可以灵活处理了。成功安装…...
Grafana - TDEngine搭建数据监测报警系统
TDengine 与开源数据可视化系统 Grafana 快速集成搭建数据监测报警系统 一、介绍二、前置条件三、Grafana 安装及配置3.1 下载3.2 安装3.2.1 windows安装 - 图形界面3.2.2 linux安装 - 安装脚本 四、Grafana的TDEngine配置及使用4.1 登录4.2 安装 Grafana Plugin 并配置数据源4…...
ES6基础知识二:ES6中数组新增了哪些扩展?
一、扩展运算符的应用 ES6通过扩展元素符…,好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列 console.log(...[1, 2, 3]) // 1 2 3console.log(1, ...[2, 3, 4], 5) // 1 2 3 4 5[...document.querySelectorAll(div)] // [<div>, &l…...
使用CRM分析数据有哪些功能?
CRM数据分析软件可以帮助企业增强竞争力,并更好地了解客户需求及市场变化,助力企业数据分析,并提供实时更新的数据和分析结果,CRM数据分析软件的主要特点是什么?包括以下6个特点。 CRM数据分析软件的主要功能通常包括…...
大数据课程综合实验案例---课设问题汇总
最近翻看两年前的大数据课设,感觉这个大数据课设实验当时答辩 在大数据课设实验过程中,我遇到了很多问题,在这里做出汇总: 1、MySQL启动报错 首先,我的MySQL有时候启动不了,当我输入这个命令的时候&#…...
基于Vue+Element Plus实现表格组件
目录 前言分析实现例子效果图前言 表格对于管理类项目是很重要的,可以只管的展示和比比较数据。使用Element Plus能解决一部分问题,但是还存在一些缺点和不足。 分析 浏览器上表格数据展示空间不足。列显示太多不够直观。完全依赖官方表格组件代码过于臃肿不利于管理和优化…...
MYSQL 主从复制
在读多写少的网络环境下,MySQL 如何优化数据查询方案 假如说一个电商平台 到双十一了 大量的读写操作 如果不做点什么的话 平台就被冲烂了 那我们要怎么办呢? 你或许会想 林北直接一个redis缓存 帮数据库度过难关 这个操作实际上是不行的 因为应用缓存的原则之一…...
网络安全领域关键信息泄露事件引发关注
近日,一家知名网络安全公司发布了一份报告揭露了一起重大信息泄露事件。据称,该事件涉及大量敏感用户数据的泄露引发了全球网络安全领域的广泛关注。 根据报道,该事件发生在全球范围内涉及多个国家和组织。专家指出,此次泄露事件…...
循环冗余码校验CRC码 算法步骤+详细实例计算
通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)࿰…...
学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...
高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...
有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...
CVPR2025重磅突破:AnomalyAny框架实现单样本生成逼真异常数据,破解视觉检测瓶颈!
本文介绍了一种名为AnomalyAny的创新框架,该方法利用Stable Diffusion的强大生成能力,仅需单个正常样本和文本描述,即可生成逼真且多样化的异常样本,有效解决了视觉异常检测中异常样本稀缺的难题,为工业质检、医疗影像…...
在树莓派上添加音频输入设备的几种方法
在树莓派上添加音频输入设备可以通过以下步骤完成,具体方法取决于设备类型(如USB麦克风、3.5mm接口麦克风或HDMI音频输入)。以下是详细指南: 1. 连接音频输入设备 USB麦克风/声卡:直接插入树莓派的USB接口。3.5mm麦克…...
系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文通过代码驱动的方式,系统讲解PyTorch核心概念和实战技巧,涵盖张量操作、自动微分、数据加载、模型构建和训练全流程&#…...
实战设计模式之模板方法模式
概述 模板方法模式定义了一个操作中的算法骨架,并将某些步骤延迟到子类中实现。模板方法使得子类可以在不改变算法结构的前提下,重新定义算法中的某些步骤。简单来说,就是在一个方法中定义了要执行的步骤顺序或算法框架,但允许子类…...
Vue 3 + WebSocket 实战:公司通知实时推送功能详解
📢 Vue 3 WebSocket 实战:公司通知实时推送功能详解 📌 收藏 点赞 关注,项目中要用到推送功能时就不怕找不到了! 实时通知是企业系统中常见的功能,比如:管理员发布通知后,所有用户…...
海云安高敏捷信创白盒SCAP入选《中国网络安全细分领域产品名录》
近日,嘶吼安全产业研究院发布《中国网络安全细分领域产品名录》,海云安高敏捷信创白盒(SCAP)成功入选软件供应链安全领域产品名录。 在数字化转型加速的今天,网络安全已成为企业生存与发展的核心基石,为了解…...
