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的dataId
            groupId: 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的dataId
            groupId: DEFAULT_GROUP # 默认分组
            data-type: json # 数据类型 json类型
            rule-type: flow # flow表示流控规则
        ds2:
          nacos:
            server-addr: localhost:8848 # nacos服务地址
            dataId: sentinel-consumer-ds2 # nacos的dataId
            groupId: 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的dataId
            groupId: DEFAULT_GROUP # 默认分组
            data-type: json # 数据类型 json类型
            rule-type: flow # flow表示流控规则
        ds2:
          nacos:
            server-addr: localhost:8848 # nacos服务地址
            dataId: sentinel-consumer-ds2 # nacos的dataId
            groupId: DEFAULT_GROUP # 默认分组
            data-type: json # 数据类型 json类型
            rule-type: degrade # degrade表示降级规则

        ds3:
          nacos:
            server-addr: localhost:8848 # nacos服务地址
            dataId: sentinel-consumer-ds3 # nacos的dataId
            groupId: 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设置的值

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

小程序路由跳转页面重复问题

目标&#xff1a;想要某个页面在历史中&#xff08;页面栈&#xff09;只显示一次 什么是页面栈&#xff1a; 在小程序开发中&#xff0c;页面栈是指小程序当前打开的页面的层级关系堆栈。每当打开一个新页面时&#xff0c;它会被放置在页面栈的顶部&#xff0c;而当前页面就位…

Linux学习之Ubuntu 20.04安装内核模块

参考博客&#xff1a;Ubuntu20.04编译内核教程 sudo lsb_release -a可以看到我当前的系统是Ubuntu 20.04.4&#xff0c;sudo uname -r可以看到我的系统内核版本是5.4.0-100-generic。 sudo apt-get install -y libncurses5-dev flex bison libssl-dev安装所需要的依赖。 su…

交换一个整数二进制位的奇数位和偶数位

目录 一、方案一 1.求待操作数的二进制序列 2.创建一个数组存放待操作数的二进制序列 3.交换二进制序列奇偶位 4.输出奇偶位交换之后的二进制序列 5.代码 二、方案二&#xff08;宏的实现&#xff09; 1.求待操作数二进制序列偶数位 2.求待操作数二进制序列奇数位 3.求待…

手机word文档怎么转换成pdf?分享两种方法

手机word文档怎么转换成pdf&#xff1f;在如今信息化的时代&#xff0c;电子文档已经成为人们日常办公不可或缺的一部分。随着科技的不断进步&#xff0c;电子文档的格式也在不断发展。PDF作为电子文档的一种重要格式&#xff0c;被广泛使用。那么&#xff0c;如何将手机上的Wo…

信息管理系统---Servlet+javaBean+Druid+DButil

这里是学习了Servlet后结合数据库进行增删查改–登录等作为练手项目非常适合 准备工作&#xff1a; 1.数据准备 这张表是用户表&#xff0c;用于登录 CREATE TABLE users (id int NOT NULL AUTO_INCREMENT,username varchar(25) DEFAULT NULL,password varchar(20) DEFAULT…

gazebo simulation

<?xml version"1.0" ?> <!-- --> <!-- | This document was autogenerated by xacro from /home/xrh/ros-project/gazebo_test/src/fmauch_universal_robot/ur_description/urdf/ur3_D455_2f140.urdf.xacro | --> <!-- | EDITING THIS…

C# Yolo+Onnx 号牌识别

参考 https://github.com/missxingwu/net_yolov5_plate https://github.com/ivilson/Yolov7net https://github.com/we0091234/Chinese_license_plate_detection_recognition 效果 项目 VS2022.net 4.8OpenCvSharp4Microsoft.ML.OnnxRuntime 部分代码 using System; using …

基于RASC的keil电子时钟制作(瑞萨RA)(3)----使用J-Link烧写程序到瑞萨芯片

基于RASC的keil电子时钟制作3_使用J-Link烧写程序到瑞萨芯片 概述硬件准备视频教程软件准备hex文件准备J-Link与瑞萨开发板进行SWD方式接线烧录 概述 这一节主要讲解如何使用J-Link对瑞萨RA芯片进行烧录。 硬件准备 首先需要准备一个开发板&#xff0c;这里我准备的是芯片型…

【内网自制无需密码的SSL证书--适用与IP或者localhost】

内网自制无需密码的SSL证书--适用与IP或者localhost 前言步骤确认是否安装openssl自制CA私钥自制csr文件免除密码自制CA证书 验证 前言 搞半死&#xff0c;原来这么简单&#xff0c;今天就把教程分享给大家&#xff0c;本文基于CentOS7环境的openssl生成SSL自制证书&#xff0…

Jmeter+Jenkins+Ant自动化持续集成环境搭建

一、安装准备 1.JDK:jdk-8u121-windows-x64 2.jmeter工具&#xff1a;apache-jmeter-2.13 3.ANT工具&#xff1a;apache-ant-1.9.7-bin 4.jenkins工具&#xff1a;jenkins-2.32.2 二、软件安装 1.JDK的安装 >双击JDK安装包&#xff0c;选择安装路径&#xff08;本人是…

7.12 redis未授权访问漏洞

在1.txt添加存在redis未授权访问漏洞的IP redis.py输入脚本 redis-cli exe -h IP -p 端口号

基于MATLAB的无人机遥感数据预处理与农林植被性状估算实践

遥感技术作为一种空间大数据手段&#xff0c;能够从多时、多维、多地等角度&#xff0c;获取大量的农情数据。数据具有面状、实时、非接触、无伤检测等显著优势&#xff0c;是智慧农业必须采用的重要技术之一。本内容主要针对农业、林业、生态、遥感背景的对无人机遥感有兴趣的…

操作系统笔记、面试八股(三)—— 系统调用与内存管理

文章目录 3. 系统调用3.1 用户态与内核态3.2 系统调用分类3.3 如何从用户态切换到内核态&#xff08;系统调用举例&#xff09; 4. 内存管理4.1 内存管理是做什么的4.1.1 为什么需要虚拟地址空间4.1.2 使用虚拟地址访问内存有什么优势 4.2 常见的内存管理机制4.3 分页管理4.3.1…

OpenCV4图像处理-图像交互式分割-GrabCut

本文将实现一个与人&#xff08;鼠标&#xff09;交互从而分割背景的程序。 GrabCut 1.理论介绍2. 鼠标交互3. GrabCut 1.理论介绍 用户指定前景的大体区域&#xff0c;剩下为背景区域&#xff0c;还可以明确指出某些地方为前景或者背景&#xff0c;GrabCut算法采用分段迭代的…

2.多线程-初阶(中)

文章目录 4. 多线程带来的的风险-线程安全 (重点)4.1 观察线程不安全4.2 线程安全的概念4.3 线程不安全的原因4.3.1原子性4.3.2可见性4.3.3代码顺序性 4.4 解决之前的线程不安全问题 5. synchronized[ˈsɪŋkrənaɪzd] 关键字-监视器锁monitor lock5.1 synchronized 的特性5.…

数据分享|R语言逻辑回归、Naive Bayes贝叶斯、决策树、随机森林算法预测心脏病...

全文链接&#xff1a;http://tecdat.cn/?p23061 这个数据集&#xff08;查看文末了解数据免费获取方式&#xff09;可以追溯到1988年&#xff0c;由四个数据库组成。克利夫兰、匈牙利、瑞士和长滩。"目标 "字段是指病人是否有心脏病。它的数值为整数&#xff0c;0无…

ElasticSearch学习--数据聚合

介绍 数据聚合可以帮助我们对海量的数据进行统计分析&#xff0c;如果结合kibana&#xff0c;我们还能形成可视化的图形报表。自动补全可以根据用户输入的部分关键字去自动补全和提示。数据同步可以帮助我们解决es和mysql的数据一致性问题。集群可以帮助我们了解结构和不同节点…

Flask 文件上传,删除上传的文件

目录结构 app.py from flask import Flask, request, render_template, redirect, url_for import osapp Flask(__name__) BASE_DIR os.getcwd() UPLOAD_FOLDER os.path.join(BASE_DIR, testfile)app.route(/) def home():files os.listdir(UPLOAD_FOLDER)return render_t…

回归预测 | MATLAB实现TCN-BiGRU时间卷积双向门控循环单元多输入单输出回归预测

回归预测 | MATLAB实现TCN-BiGRU时间卷积双向门控循环单元多输入单输出回归预测 目录 回归预测 | MATLAB实现TCN-BiGRU时间卷积双向门控循环单元多输入单输出回归预测预测效果基本介绍模型描述程序设计参考资料 预测效果 ![6 基本介绍 1.MATLAB实现TCN-BiGRU时间卷积双向门控循…

解决JMeter+Grafana+influxdb 配置出现transaction无数据情形

问题描述 JMeterGrafanainfluxdb 配置时&#xff0c;Darren洋发现jmeter中明明已经配置好了事务条件以及接口实例信息&#xff0c;但就是在grafana的头部导航栏中的transaction按钮下来没有相应事务数据信息&#xff0c;经过相关资料查询&#xff0c;Darren洋发现执行以下两个步…