• springcloudalibaba架构(11):Sentinel规则持久化至Nacos


    前言

    通过Dashboard来为每个Sentinel客户端设置各种各样的规则,但是这里有一个问题,就是这些规则默认时存在内存中的,极不稳定,所以需要将其持久化。我们可以将规则持久化到磁盘文件,也可以持久化到nacos,zookeeper等注册配置中心。

    第一节 规则管理及推送

    来自官方的介绍:规则管理及推送
    在这里插入图片描述
    根据官方的介绍,不做任何配置的情况下是第一种原始模式,缺点是数据保存在内存中,重启规则就消失了,而官方的推荐的第三种push模式,生产环境下一般使用push模式的数据源,将规则保存到Nacos,Zookeeper等配置中心,而Nacos作为Alibaba。

    AHAS Sentinel 控制台提供了一个我们推荐的推送规则的做法,即 配置中心控制台/Sentinel 控制台 → 配置中心 → Sentinel 数据源 → Sentinel,这样的流程就非常清晰了。
    在这里插入图片描述

    第二节 在nacos中配置sentinel规则

    1. 准备工作

    • 确保nacos已启动,http://localhost:8848/nacos/
    • 确保sentinel-dashboard已经启动 http://localhost:8080/

    2. 微服务项目

    (1)导入依赖

     
            <dependency>
                <groupId>com.alibaba.cloudgroupId>
                <artifactId>spring-cloud-alibaba-sentinel-datasourceartifactId>
            dependency>
    
            
            <dependency>
                <groupId>com.alibaba.cspgroupId>
                <artifactId>sentinel-datasource-nacosartifactId>
            dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    (2) 配置yml文件(重点部分 spring.cloud.sentinel.datasource下面的内容)

    spring:
      cloud:
        nacos:
          discovery:
            server-addr: localhost:8848
        sentinel:
          transport:
            port: 12345 #与控制台交流的端口,可随意指定,不冲突即可。
            dashboard: localhost:8080 # sentinel-dashboard的地址
          datasource:
            # 自定义命名
            flow-rule:
              # 支持多种持久化数据源:file、nacos、zk、apollo、redis、consul
              nacos:
                # naco服务地址
                server-addr: localhost:8848
                # 命名空间,根据环境配置
                namespace: public
                # 这里我做了一下细分,不同规则设置不同groupId
                group-id: SENTINEL_FLOW_GROUP
                # 仅支持JSON和XML类型
                data-id: ${spring.application.name}-flow-rules.json
                # 规则类型:flow、degrade、param-flow、system、authority
                rule-type: flow
                # nacos开启了认证需要配置username、password
                # username: nacos
                # password: nacos
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    注意: 这里的应用名spring.application.name为server-order

    (3) 到nacos后台添加配置规则
    在这里插入图片描述
    在这里插入图片描述

    [{
    	"clusterMode": false,
    	"controlBehavior": 0,
    	"count": 2.0,
    	"grade": 1,
    	"limitApp": "default",
    	"resource": "/hello4",
    	"strategy": 0
    }]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    (4) 重启微服务,访问一次刚刚配置的资源名/hello4,因为sentinel使用的懒加载,所以必须请求一次,dashboard才会看到配置的规则。快速频繁,请求可以看到接口被限流。
    在这里插入图片描述

    在这里插入图片描述

    (5)在sentinel-dashboard控制台查看流控规则

    在这里插入图片描述

    3. 配置规则中的参数解析

    这里是流控规则,参数解析是流控规则。
    在这里插入图片描述

    • resource:资源名称
    • limitApp:来源应用
    • grade:阀值类型,0表示线程数,1表示QPS
    • count:单机阈值
    • strategy:流控模式,0表示直接,1表示关联,2表示链路
    • controllerBehavior:流控效果,0表示快速失败,1表示Warm up,2表示排队等待
    • clusterMode:是否集群

    官方更详细的规则:https://sentinelguard.io/zh-cn/docs/basic-api-resource-rule.html

    4. 规则同步说明

    • 优点:
      这种在nacos中配置持久化规则,根本不需要sentinel-dashboard的参与,规则直接是持久化到了nacos中,dashboard在这里仅仅是为了更加直观的显示。
    • 缺点:
      对于规则的配置,就需要参考文档来配置了,配置很不方便,写错的概率就高了。

    sentinel-dashboard 源码: https://github.com/alibaba/Sentinel/tree/master/sentinel-dashboard

    在第二节,我们实现了从远程配置中心到Sentinel客户端这个过程。之后我们只要实现将从Sentinel Dashboard将规则推送到配置中心即可。
    我们通过nacos官方提供的SDK,可以查看到它如何发布配置和获取配置。
    当然sentinel-dashboard的源码里也已经提供了获取配置和发布配置的代码,只需要对源码稍作修改,即可实现sentinel-dashboard推送规则到nacos配置中心。
    在这里插入图片描述

    sentinel-dashboard源码,规则保存到内存中。
    在这里插入图片描述

  • 相关阅读:
    mysql无法访问故障排除步骤
    【C++ Primer Plus学习记录】指针——小结
    用HTML+CSS做一个学生抗疫感动专题网页设计作业网页
    Baidu Comate 基于百度文心一言的智能编码助手
    外汇天眼:外汇中的做空和做多是什么意思?有什么区别?
    JSON 是什么?JSON 介绍
    文件批量管理:轻松复制备份并删除原文件
    微信小程序云开发
    优化算法——全局灵敏度分析算法(PAWN )(Matlab代码实现)
    【Essential C++学习笔记】第五章 面向对象编程风格
  • 原文地址:https://blog.csdn.net/u011628753/article/details/126199341