相关推荐recommended
Spring Cloud Alibaba全家桶(八)——Sentinel规则持久化
作者:mmseoamin日期:2024-02-20

前言

Spring Cloud Alibaba全家桶(八)——Sentinel规则持久化,在这里插入图片描述,第1张

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

不积跬步,无以至千里;不积小流,无以成江海。每天进步一点点,在成为强者的路上,小新与大家共同成长!

📌博主主页:小新要变强 的主页

👉Java全栈学习路线可参考:【Java全栈学习路线】最全的Java学习路线及知识清单,Java自学方向指引,内含最全Java全栈学习技术清单~

👉算法刷题路线可参考:算法刷题路线总结与相关资料分享,内含最详尽的算法刷题路线指南及相关资料分享~

👉Java微服务开源项目可参考:企业级Java微服务开源项目(开源框架,用于学习、毕设、公司项目、私活等,减少开发工作,让您只关注业务!)

↩️本文上接:Spring Cloud Alibaba全家桶(七)——Sentinel控制台规则配置


目录

Sentinel规则持久化

  • 前言
  • 目录
  • 一、原始模式
  • 二、拉模式
  • 三、推模式
  • 后记

    Spring Cloud Alibaba全家桶(八)——Sentinel规则持久化,在这里插入图片描述,第2张

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

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

    一、原始模式

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

    新到内存中:

    Spring Cloud Alibaba全家桶(八)——Sentinel规则持久化,在这里插入图片描述,第3张

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

    用于生产环境。

    二、拉模式

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

    WritableDataSourceRegistry 中。

    三、推模式

    生产环境下一般更常用的是 push 模式的数据源。对于 push 模式的数据源,如远程配置中心

    (ZooKeeper, Nacos, Apollo等等),推送的操作不应由 Sentinel 客户端进行,而应该经控

    制台统一进行管理,直接进行推送,数据源仅负责获取配置中心推送的配置并更新到本

    地。

    因此推送规则正确做法应该是:

    配置中心控制台/Sentinel 控制台 → 配置中心 →Sentinel 数据源 → Sentinel

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

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

    官方demo: sentinel­demo­nacos­datasource

    🍀(1)引入依赖

    
      com.alibaba.csp
      sentinel‐datasource‐nacos
    
    

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

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

    Spring Cloud Alibaba全家桶(八)——Sentinel规则持久化,在这里插入图片描述,第4张

    🍀(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
      }
    ]
    

    Spring Cloud Alibaba全家桶(八)——Sentinel规则持久化,在这里插入图片描述,第5张

    引入依赖:

    
    
      com.alibaba.csp
      sentinel‐datasource‐nacos
    
    

    增加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 Cloud Alibaba全家桶(八)——Sentinel规则持久化,在这里插入图片描述,第6张


    后记

    Spring Cloud Alibaba全家桶(八)——Sentinel规则持久化,在这里插入图片描述,第7张

    👉Java全栈学习路线可参考:【Java全栈学习路线】最全的Java学习路线及知识清单,Java自学方向指引,内含最全Java全栈学习技术清单~

    👉算法刷题路线可参考:算法刷题路线总结与相关资料分享,内含最详尽的算法刷题路线指南及相关资料分享~