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)]

可以看到,流控已经生效了。再到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)]

进入熔断降级。

最后再来看下系统规则的一个实例

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)]

同样地,其他的规则,可以找到它对应的Java配置方法,找到那个类,举一反三,将对应的配置修改一下就可以了。

有两个点需要注意下:

  • 在Nacos控制台修改规则,Sentinel这边的规则会即时生效,重启服务后依然是有效的,毕竟已经做好持久化了
  • 在Sentinel控制台修改的规则,不会被修改到nacos中,重启后还会变为nacos设置的值

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/9557.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1、传统锁回顾(Jvm本地锁,MySQL悲观锁、乐观锁)

目录 1.1 从减库存聊起1.2 环境准备1.3 简单实现减库存1.4 演示超卖现象1.5 jvm锁1.6 三种情况导致Jvm本地锁失效1、多例模式下&#xff0c;Jvm本地锁失效2、Spring的事务导致Jvm本地锁失效3、集群部署导致Jvm本地锁失效 1.7 mysql锁演示1.7.1、一个sql1.7.2、悲观锁1.7.3、乐观…

深度学习:常用优化器Optimizer简介

深度学习&#xff1a;常用优化器Optimizer简介 随机梯度下降SGD带动量的随机梯度下降SGD-MomentumSGDWAdamAdamW 随机梯度下降SGD 梯度下降算法是使权重参数沿着整个训练集的梯度方向下降&#xff0c;但往往深度学习的训练集规模很大&#xff0c;计算整个训练集的梯度需要很大…

集睿致远推出CS5466多功能拓展坞方案:支持DP1.4、HDMI2.1视频8K输出

ASL新推出的 CS5466是一款Type-C/DP1.4转HDMI2.1的显示协议转换芯片,&#xff0c;它通过类型C/显示端口链路接收视频和音 频流&#xff0c;并转换为支持TMDS或FRL输出信令。DP接收器支持81.Gbp s链路速率。HDMI输出端口可以作为TMDS或FRL发射机工作。FRL发射机符合HDMI 2.1规范…

OpenCvSharp (C# OpenCV) 二维码畸变矫正--基于透视变换(附源码)

导读 本文主要介绍如何使用OpenCvSharp中的透视变换来实现二维码的畸变矫正。 由于CSDN文章中贴二维码会导致显示失败,大家可以直接点下面链接查看图片: C# OpenCV实现二维码畸变矫正--基于透视变换 (详细步骤 + 代码) 实现步骤 讲解实现步骤之前先看下效果(左边是原图,右边…

菜鸡shader:L13 渐隐渐显的UV动画

文章目录 SD部分Shader代码部分 呃呃&#xff0c;这是目前我学习庄懂AP01课程的最后一节了&#xff0c;我看了一下21集之后的内容是关于LightingMap&#xff0c;目前感觉还用不到&#xff0c;加上之前参与过一个项目里面也有用到LightingMap&#xff0c;也算了解过&#xff0c;…

拦截Bean使用之前各个时机的Spring组件

拦截Bean使用之前各个时机的Spring组件 之前使用过的BeanPostProcessor就是在Bean实例化之后&#xff0c;注入属性值之前的时机。 Spring Bean的生命周期本次演示的是在Bean实例化之前的时机&#xff0c;使用BeanFactoryPostProcessor进行验证&#xff0c;以及在加载Bean之前进…

NISP含金量?NISP真的有必要考么?NISP好考吗?NISP二级为什么那么贵?

NISP证书简述 NISP证书三个级别&#xff0c;分别是&#xff1a;一级、二级、三级&#xff08;专项&#xff09; 证书。其每一项资格证书都有不同的优点&#xff0c;但是优点各有 相同&#xff0c;而且拥有NISP二级证书可以免考更换CISP资格证书&#xff0c;那么证书含金量如何下…

rcu链表综合实践

基础知识 rcu-read copy update的缩写。和读写锁起到相同的效果。据说牛逼一点。对于我们普通程序员&#xff0c;要先学会使用&#xff0c;再探究其内部原理。 链表的数据结构&#xff1a; struct list_head {struct list_head *next, *prev; };还有一种&#xff1a;struct h…

STM32(HAL库)驱动st7789LCD屏幕(7引脚240*240)

目录 1、简介 2、CubeMX初始化配置 2.1 基础配置 2.1.1 SYS配置 2.1.2 RCC配置 2.2 屏幕引脚配置 2.3 项目生成 3、KEIL端程序整合 3.1 LCD驱动添加 3.2 函数修改 3.2.1 lcd.h修改 3.2.2 lcd_innit.h 修改 3.2.3 lcd.c修改 3.2.4 lcd_inut.c修改 3.3 主函数代码 3.3…

Django学习笔记-表单(forms)的使用

在Django中提供了了form表单&#xff0c;可以更为简单的创建表单模板信息&#xff0c;简化html的表单。 一、网页应用程序中表单的应用 表单通常用来作为提交数据时候使用。 1.1 创建表单模板文件夹 在项目文件夹下创建一个template文件夹&#xff0c;用于存储所有的html模…

使用百度地图SDK计算距离

说明&#xff1a;通过百度地图提供的SDK&#xff0c;可以计算出两个地点之间的距离&#xff0c;另外还有行驶路线等等。本文介绍如果使用百度地图SDK&#xff0c;并用java代码实现。 申请 首先需要登录百度地图的官网&#xff0c;申请开发者认证&#xff0c;个人认证一般都很…

GPT一键化身「AI助理」——自定义指令功能

最近GPT又更新了一个超实用的功能——自定义指令&#xff0c;启用后&#xff0c;你可以给GPT设置一些固定指令&#xff0c;让它记住或扮演某个角色&#xff0c;比如客服、律师、投资管理师、老师、营养师...... 这样&#xff0c;我们就不再需要每次都要打开新的聊天&#xff0c…

ChatGPT的工作原理:从输入到输出

&#x1f337;&#x1f341; 博主 libin9iOak带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33…

华为eNSP:isis配置跨区域路由

一、拓扑图 二、路由器的配置 1、配置接口IP AR1: <Huawei>system-view [Huawei]int g0/0/0 [Huawei-GigabitEthernet0/0/0]ip add 1.1.1.1 24 [Huawei-GigabitEthernet0/0/0]q AR2: [Huawei]int g0/0/0 [Huawei-GigabitEthernet0/0/0]ip add 1.1.1.2 24 [Huawe…

【React Native】学习记录(一)——环境搭建

Expo是一套工具&#xff0c;库和服务&#xff0c;可让您通过编写JavaScript来构建原生iOS和Android应用程序。 一开始学习的时候直接使用的是expo。 npx create-expo-app my-appcd my-appnpm run start接下来需要搭建安卓和IOS端&#xff08;为此特意换成了苹果电脑&#xff09…

云曦暑期学习第二周——文件上传漏洞

1.文件上传 1.1原理 一些web应用程序中允许上传图片、视频、头像和许多其他类型的文件到服务器中。 文件上传漏洞就是利用服务端代码对文件上传路径变量过滤不严格将可执行的文件上传到一个到服务器中 &#xff0c;再通过URL去访问以执行恶意代码。 1.2为什么存在文件上传漏…

Angular:动态依赖注入和静态依赖注入

问题描述&#xff1a; 自己写的服务依赖注入到组件时候是直接在构造器内初始化的。 直到看见代码中某大哥写的 private injector: Injector 动态依赖注入和静态依赖注入 在 Angular 中&#xff0c;使用构造函数注入的方式将服务注入到组件中是一种静态依赖注入的方式。这种方…

ThinkPHP8知识详解:给PHP8和MySQL8添加到环境变量

在PHPenv安装的时候&#xff0c;环境变量默认的PHP版本是7.4的&#xff0c;MySQL的版本是5.7的&#xff0c;要想使用ThinkPHP8来开发&#xff0c;就必须修改环境变量&#xff0c;本文就详细讲解了如果修改PHP和MySQL的环境变量。 1、添加网站 启动phpenv&#xff0c;网站&…

LiveGBS流媒体平台GB/T28181功能-设备树自定义分组自定义组织机构选择通道共享给上级国标平台配置权限给指定用户

LiveGBS流媒体平设备树自定义分组自定义组织机构选择通道共享给上级国标平台权限给指定用户 1、背景2、分组2.1、新建分组2.2、选择通道2.3、导入设备2.4、编辑名称2.5、删除分组2.6、移除分组 3、国标级联3.1、分组共享节点3.1.1、共享给上级平台3.1.2、分配权限给用户 3.2、级…

Android 帧率分析

卡顿&#xff1a; 界面呈现是指从应用生成帧并将其显示在屏幕上的动作。如需确保用户能够流畅地与您的应用互动&#xff0c;您的应用呈现每帧的时间不应超过 16ms&#xff0c;以达到每秒 60 帧的呈现速度&#xff08;为什么是 60fps&#xff1f;&#xff09;。如果您的应用存在…