Spring中的Sentinel规则持久化解析

 更新时间:2023年09月12日 09:50:58   作者:小新要变强  
这篇文章主要介绍了Spring中的Sentinel规则持久化解析,具体内容包括,Sentinel规则推送三种模式介绍,原始模式,拉模式,推模式,并对基于Nacos配置中心控制台实现推送进行详尽介绍,需要的朋友可以参考下

前言

本文小新为大家带来 Sentinel规则持久化 相关知识,具体内容包括, Sentinel规则推送三种模式 介绍,包括: 原始模式 , 拉模式 , 推模式 ,并对 基于Nacos配置中心控制台实现推送 进行详尽介绍~

Sentinel规则的推送有下面三种模式:

推送模式说明优点缺点
原始模式API 将规则推送至客户端并直接更新到内存中,扩展写数据源(WritableDataSource)简单,无任何依赖不保证一致性;规则保存在内存中,重启即消失。严重不建议用于生产环境
Pull 模式扩展写数据源(WritableDataSource), 客户端主动向某个规则管理中心定期轮询拉取规则,这个规则中心可以是 RDBMS、文件 等简单,无任何依赖;规则持久化不保证一致性;实时性不保证,拉取过于频繁也可能会有性能问题。
Push 模式扩展读数据源(ReadableDataSource),规则中心统一推送,客户端通过注册监听器的方式时刻监听变化,比如使用 Nacos,Zookeeper 等配置中心。这种方式有更好的实时性和一致性保证。生产环境下一般采用 push 模式的数据源。规则持久化;一致性;快速引入第三方依赖

一、原始模式

如果不做任何修改,Dashboard 的推送规则方式是通过 API 将规则推送至客户端并直接更 新到内存中:

在这里插入图片描述

这种做法的好处是简单,无依赖;坏处是应用重启规则就会消失,仅用于简单测试,不能 用于生产环境。

二、拉模式

pull 模式的数据源(如本地文件、RDBMS 等)一般是可写入的。使用时需要在客户端注册数据源:将对应的读数据源注册至对应的 RuleManager,将写数据源注册至 transport 的 WritableDataSourceRegistry 中。

三、推模式

生产环境下一般更常用的是 push 模式的数据源。对于 push 模式的数据源,如远程配置中心 (ZooKeeper, Nacos, Apollo等等),推送的操作不应由 Sentinel 客户端进行,而应该经控 制台统一进行管理,直接进行推送,数据源仅负责获取配置中心推送的配置并更新到本 地。

因此推送规则正确做法应该是: 配置中心控制台/Sentinel 控制台配置中心Sentinel 数据源Sentinel

而不是经 Sentinel 数据源推送至配置中心。这样的流程就非常清晰了。

基于Nacos配置中心控制台实现推送:

官方demo: sentinel­demo­nacos­datasource

(1)引入依赖

<dependency>
  <groupId>com.alibaba.csp</groupId>
  <artifactId>sentinel‐datasource‐nacos</artifactId>
</dependency>

(2)nacos配置中心中配置流控规则

[
  {
    "resource": "TestResource",
    "controlBehavior": 0,
    "count": 10.0,
    "grade": 1,
    "limitApp": "default",
    "strategy": 0
  }
]

在这里插入图片描述

(3)application.yml中进行配置

spring:
  application:
    name: mall‐user‐sentinel‐demo
    cloud:
      nacos:
        discovery:
          server‐addr: 127.0.0.1:8848
      sentinel:
        transport:
          # 添加sentinel的控制台地址
          dashboard: 127.0.0.1:8080
          # 指定应用与Sentinel控制台交互的端口,应用本地会起一个该端口占用的HttpServer
          port: 8719
        datasource:
          ds1:
            nacos:
              server‐addr: 127.0.0.1:8848
              dataId: ${spring.application.name}
              groupId: DEFAULT_GROUP
              data‐type: json
              rule‐type: flow

(4)nacos配置中心中添加

[
  {
    "resource": "userinfo",
    "limitApp": "default",
    "grade": 1,
    "count": 1,
    "strategy": 0,
    "controlBehavior": 0,
    "clusterMode": false
  }
]

在这里插入图片描述

引入依赖:

<!‐‐sentinel持久化 采用 Nacos 作为规则配置数据源‐‐>
<dependency>
  <groupId>com.alibaba.csp</groupId>
  <artifactId>sentinel‐datasource‐nacos</artifactId>
</dependency>

增加application.yml配置:

server:
  port: 8806
spring:
  application:
    name: mall‐user‐sentinel‐rule‐push‐demo #微服务名称
  #配置nacos注册中心地址
  cloud:
    nacos:
      discovery:
        server‐addr: 127.0.0.1:8848
    sentinel:
      transport:
        # 添加sentinel的控制台地址
        dashboard: 127.0.0.1:8080
        # 指定应用与Sentinel控制台交互的端口,应用本地会起一个该端口占用的HttpServer
        #port: 8719
        datasource:
          # ds1: #名称自定义,唯一
          # nacos:
          # server‐addr: 127.0.0.1:8848
          # dataId: ${spring.application.name}
          # groupId: DEFAULT_GROUP
          # data‐type: json
          # rule‐type: flow
        flow‐rules:
          nacos:
            server‐addr: 127.0.0.1:8848
            dataId: ${spring.application.name}‐flow‐rules
            groupId: SENTINEL_GROUP # 注意groupId对应Sentinel Dashboard中的定义
            data‐type: json
            rule‐type: flow
        degrade‐rules:
          nacos:
            server‐addr: 127.0.0.1:8848
            dataId: ${spring.application.name}‐degrade‐rules
            groupId: SENTINEL_GROUP
            data‐type: json
            rule‐type: degrade
        param‐flow‐rules:
          nacos:
            server‐addr: 127.0.0.1:8848
            dataId: ${spring.application.name}‐param‐flow‐rules
            groupId: SENTINEL_GROUP
            data‐type: json
            rule‐type: param‐flow
        authority‐rules:
          nacos:
            server‐addr: 127.0.0.1:8848
            dataId: ${spring.application.name}‐authority‐rules
            groupId: SENTINEL_GROUP
            data‐type: json
            rule‐type: authority
        system‐rules:
          nacos:
            server‐addr: 127.0.0.1:8848
            dataId: ${spring.application.name}‐system‐rules
            groupId: SENTINEL_GROUP
            data‐type: json
            rule‐type: system

以流控规则测试,当在sentinel dashboard配置了流控规则,会在nacos配置中心生成对应 的配置。

在这里插入图片描述

到此这篇关于Spring中的Sentinel规则持久化解析的文章就介绍到这了,更多相关Sentinel规则持久化内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • springboot项目启动的时候参数无效的解决

    springboot项目启动的时候参数无效的解决

    这篇文章主要介绍了springboot项目启动的时候参数无效的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • 详解jvm双亲委派机制

    详解jvm双亲委派机制

    双亲委派机制保证了核心类的安全,确保不会被修改,也保证了不会加载到重复的字节码文件,这篇文章主要介绍了jvm双亲委派机制详解,需要的朋友可以参考下
    2022-11-11
  • SSM 整合的配合文件(分享)

    SSM 整合的配合文件(分享)

    下面小编就为大家分享一篇SSM 整合的配合文件,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • Java手机号最新校验规则

    Java手机号最新校验规则

    在Java中,进行手机号校验通常使用正则表达式(Regex)来匹配手机号的格式,以下是一个基于当前(截至2024年)中国手机号规则的校验方法,感兴趣的朋友跟随小编一起看看吧
    2024-05-05
  • idea resources目录下的application.properties不能自动提示问题

    idea resources目录下的application.properties不能自动提示问题

    这篇文章主要介绍了idea resources目录下的application.properties不能自动提示问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • 解决java 分割字符串成数组时,小圆点不能直接进行分割的问题

    解决java 分割字符串成数组时,小圆点不能直接进行分割的问题

    这篇文章主要介绍了解决java 分割字符串成数组时,小圆点不能直接进行分割的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • MybatisPlus查询条件为空字符串或null问题及解决

    MybatisPlus查询条件为空字符串或null问题及解决

    这篇文章主要介绍了MybatisPlus查询条件为空字符串或null问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • Mybatis配置之typeAlias标签的用法

    Mybatis配置之typeAlias标签的用法

    这篇文章主要介绍了Mybatis配置之typeAlias标签的用法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • Java使用kafka发送和生产消息的示例

    Java使用kafka发送和生产消息的示例

    本篇文章主要介绍了Java使用kafka发送和生产消息的示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • 简单了解Java程序运行整体流程

    简单了解Java程序运行整体流程

    这篇文章主要介绍了简单了解Java程序运行整体流程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07

最新评论