• Sentinel 规则持久化


    1.Sentinel 三种管理模式

    推送方式说明        优点缺点
    默认方式Api将规则推送到客户端存储在内存中,扩展写数据源(WritableDataSource)简单无任何依赖不保证一致性,规则无持久化,重新启动规则消失
    Pull方式扩展写数据源(WritableDataSource),客户端定时向规则管理中心拉取规则,这个规则管理中心可以是RDBS、文件等简单无任何依赖,规则持久化不保证一直性,实时性保证,拉取频繁有性能问题
    push方式扩展读数据源(ReadableDataSource),规则中心统一推送数据,客户端通过注册监听器的方式监听变化(Nacos Zookeeper)规则持久化,一致性引入三方

    2.原始模式(测试环境模式)

    不保证一致性,规则无持久化,重新启动规则消失。

    3.Pull方式

    客户端主动向某个规则管理中心定期轮询拉取规则,这个规则中心可以是 RDBMS、文件,甚至是 VCS 等。这样做的方式是简单,缺点是无法及时获取变更。

    Pull-based: 动态文件数据源、Consul, Eureka。

    4.Push方式(生产环境模式)

    ​规则中心统一推送,客户端通过注册监听器的方式时刻监听变化,比如使用 Nacos、Zookeeper 等配置中心。这种方式有更好的实时性和一致性保证。

    Push-based: ZooKeeper, Redis, Nacos, Apollo, etcd。

    5.客户端集成Nacos持久化规则

    5.1 客户端集成Nacos配置中心

    Springcloud 集成 Nacos配置中心_springcloud整合nacos配置中心-CSDN博客

    5.2 pom中添加依赖包

    1. <dependency>
    2. <groupId>com.alibaba.csp</groupId>
    3. <artifactId>sentinel-datasource-nacos</artifactId>
    4. </dependency>

    5.3 配置文件(bootstrap.yml)

    1. spring:
    2. application:
    3. name: user
    4. cloud:
    5. nacos:
    6. config:
    7. server-addr: 127.0.0.1:8848
    8. prefix: dubbo-user-api
    9. file-extension: yml
    10. sentinel:
    11. transport:
    12. dashboard: 127.0.0.1:6780
    13. eager: true # 取消懒加载
    14. datasource:
    15. ds-user-flow-rule:
    16. nacos:
    17. server-addr: 127.0.0.1:8848
    18. dataId: user-flow-rule
    19. groupId: user-sentinel
    20. namespace: sentinel
    21. rule-type: flow # AUTHORITY(授权规则) DEGRADE(熔断规则) FLOW(流控规则) GW_API_GROUP GW_FLOW PARAM_FLOW(热点规则) SYSTEM(系统规则)
    22. ds-user-degrade-rule:
    23. nacos:
    24. server-addr: 127.0.0.1:8848
    25. dataId: user-degrade-rule
    26. groupId: user-sentinel
    27. namespace: sentinel
    28. rule-type: degrade # AUTHORITY(授权规则) DEGRADE(熔断规则) FLOW(流控规则) GW_API_GROUP GW_FLOW PARAM_FLOW(热点规则) SYSTEM(系统规则)

    5.4 Nacos中添加配置文件

    5.4.1 user-flow-rule

    1. [
    2. {
    3. "resource": "/api/user/getName",
    4. "limitApp": "default",
    5. "grade": 1,
    6. "count": 1,
    7. "strategy": 0,
    8. "controlBehavior": 0,
    9. "clusterMode": false
    10. }
    11. ]

    5.4.2 user-degrade-rule

    1. [
    2. {
    3. "resource": "/api/user/getName",
    4. "limitApp": "default",
    5. "count": 1,
    6. "timeWindow": 5,
    7. "grade": 0,
    8. "minRequestAmount": 3,
    9. "statIntervalMs": 1000,
    10. "slowRatioThreshold": 0.5
    11. }
    12. ]

    5.5 总结

    适合Nacos配置中心负责主要配置源,Sentinel控制台作为临时管理平台(处理突发问题)。

    不足:Sentinel控制台信息调整无法同步到Nacos配置中心。

    6.Sentinel控制台集成Nacos配置中心

    以流控规则为例。

    6.1客户端配置调整

    1. spring:
    2. application:
    3. name: user
    4. cloud:
    5. nacos:
    6. config:
    7. server-addr: 127.0.0.1:8848
    8. prefix: dubbo-user-api
    9. file-extension: yml
    10. sentinel:
    11. transport:
    12. dashboard: 127.0.0.1:6780
    13. eager: true # 取消懒加载
    14. datasource:
    15. ds-user-flow-rule:
    16. nacos:
    17. server-addr: 127.0.0.1:8848
    18. #dataId: user-flow-rule
    19. #groupId: user-sentinel
    20. #namespace: sentinel
    21. dataId: user-flow-rules
    22. groupId: SENTINEL_GROUP
    23. rule-type: flow # AUTHORITY(授权规则) DEGRADE(熔断规则) FLOW(流控规则) GW_API_GROUP GW_FLOW PARAM_FLOW(热点规则) SYSTEM(系统规则)
    24. ds-user-degrade-rule:
    25. nacos:
    26. server-addr: 127.0.0.1:8848
    27. dataId: user-degrade-rule
    28. groupId: user-sentinel
    29. namespace: sentinel
    30. rule-type: degrade # AUTHORITY(授权规则) DEGRADE(熔断规则) FLOW(流控规则) GW_API_GROUP GW_FLOW PARAM_FLOW(热点规则) SYSTEM(系统规则)

    6.2 控台源码下载

    githup地址:https://github.com/alibaba/Sentinel

    源码地址:https://github.com/alibaba/Sentinel.git

    6.3 修改(sentinel-dashboard)

    6.3.1 pom文件修改

    1. <dependency>
    2. <groupId>com.alibaba.cspgroupId>
    3. <artifactId>sentinel-datasource-nacosartifactId>
    4. dependency>

    6.3.2 代码迁移

    test目录下的nacos文件件copy到main目录下的对应目录下。

    6.3.3 修NacosConfig.java

    添加自己的Nacos配置中心地址。

    1. @Bean
    2. public ConfigService nacosConfigService() throws Exception {
    3. return ConfigFactory.createConfigService("127.0.0.1:8848");
    4. }

    6.3.4 修FlowControllerV2.java

    1. // NACOS 集成修改关闭
    2. // @Autowired
    3. // @Qualifier("flowRuleDefaultProvider")
    4. // private DynamicRuleProvider> ruleProvider;
    5. // @Autowired
    6. // @Qualifier("flowRuleDefaultPublisher")
    7. // private DynamicRulePublisher> rulePublisher;
    8. // NACOS 集成修改添加
    9. @Autowired
    10. @Qualifier("flowRuleNacosProvider")
    11. private DynamicRuleProvider> ruleProvider;
    12. @Autowired
    13. @Qualifier("flowRuleNacosPublisher")
    14. private DynamicRulePublisher> rulePublisher;

    6.3.5 修sidebar.html

    打开注释掉的代码

    注释掉如下代码

    6.4 打包运行

    java -Dserver.port=6780 -jar sentinel-dashboard.jar

    6.5 控制台添加规则

    6.6 Nacos 配置中心查看

  • 相关阅读:
    MR混合现实在临床医学课堂教学中的应用演示
    Ubuntu系统-FFmpeg安装及环境配置
    Java技术学习|消息队列|初级RabbitMQ
    Flutter快学快用07 状态管理:Flutter 状态管理及对比选型
    Zookeeper:分布式过程协同技术
    数智随行 | 财务数字化转型的抓手:业务能力标准化
    6款红黄黑榜摄像头评测:谁最安全?谁画质好?从此让你不再踩雷
    北大肖臻老师《区块链技术与应用》系列课程学习笔记[14]以太坊-状态树2
    vue常用的命令
    Django学习日志06
  • 原文地址:https://blog.csdn.net/qq_34253002/article/details/134422314