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中添加依赖包

复制代码
        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-datasource-nacos</artifactId>
        </dependency>

5.3 配置文件(bootstrap.yml)

复制代码
spring:
  application:
    name: user
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        prefix: dubbo-user-api
        file-extension: yml
    sentinel:
      transport:
        dashboard: 127.0.0.1:6780
      eager: true # 取消懒加载
      datasource:
        ds-user-flow-rule:
          nacos:
            server-addr: 127.0.0.1:8848
            dataId: user-flow-rule
            groupId: user-sentinel
            namespace: sentinel
            rule-type: flow # AUTHORITY(授权规则) DEGRADE(熔断规则) FLOW(流控规则) GW_API_GROUP GW_FLOW PARAM_FLOW(热点规则) SYSTEM(系统规则)
        ds-user-degrade-rule:
          nacos:
            server-addr: 127.0.0.1:8848
            dataId: user-degrade-rule
            groupId: user-sentinel
            namespace: sentinel
            rule-type: degrade # AUTHORITY(授权规则) DEGRADE(熔断规则) FLOW(流控规则) GW_API_GROUP GW_FLOW PARAM_FLOW(热点规则) SYSTEM(系统规则)

5.4 Nacos中添加配置文件

5.4.1 user-flow-rule

复制代码
[
    {
        "resource": "/api/user/getName",
        "limitApp": "default",
        "grade": 1,
        "count": 1,
        "strategy": 0,
        "controlBehavior": 0,
        "clusterMode": false
    }
]

5.4.2 user-degrade-rule

复制代码
[
	{
		"resource": "/api/user/getName",
		"limitApp": "default",
		"count": 1,
		"timeWindow": 5,
		"grade": 0,
		"minRequestAmount": 3,
		"statIntervalMs": 1000,
		"slowRatioThreshold": 0.5
	}
]

5.5 总结

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

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

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

以流控规则为例。

6.1客户端配置调整

复制代码
spring:
  application:
    name: user
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        prefix: dubbo-user-api
        file-extension: yml
    sentinel:
      transport:
        dashboard: 127.0.0.1:6780
      eager: true # 取消懒加载
      datasource:
        ds-user-flow-rule:
          nacos:
            server-addr: 127.0.0.1:8848
            #dataId: user-flow-rule
            #groupId: user-sentinel
            #namespace: sentinel
            dataId: user-flow-rules
            groupId: SENTINEL_GROUP
            rule-type: flow # AUTHORITY(授权规则) DEGRADE(熔断规则) FLOW(流控规则) GW_API_GROUP GW_FLOW PARAM_FLOW(热点规则) SYSTEM(系统规则)

        ds-user-degrade-rule:
          nacos:
            server-addr: 127.0.0.1:8848
            dataId: user-degrade-rule
            groupId: user-sentinel
            namespace: sentinel
            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文件修改

复制代码
        <!-- for Nacos rule publisher sample -->
        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-datasource-nacos</artifactId>
            <!--   Nacos集成注释掉 <scope>test</scope> -->
        </dependency>

6.3.2 代码迁移

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

6.3.3 修NacosConfig.java

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

复制代码
@Bean
public ConfigService nacosConfigService() throws Exception {
    return ConfigFactory.createConfigService("127.0.0.1:8848");
}

6.3.4 修FlowControllerV2.java

复制代码
//    NACOS 集成修改关闭
//    @Autowired
//    @Qualifier("flowRuleDefaultProvider")
//    private DynamicRuleProvider<List<FlowRuleEntity>> ruleProvider;
//    @Autowired
//    @Qualifier("flowRuleDefaultPublisher")
//    private DynamicRulePublisher<List<FlowRuleEntity>> rulePublisher;

    //    NACOS 集成修改添加
    @Autowired
    @Qualifier("flowRuleNacosProvider")
    private DynamicRuleProvider<List<FlowRuleEntity>> ruleProvider;
    @Autowired
    @Qualifier("flowRuleNacosPublisher")
    private DynamicRulePublisher<List<FlowRuleEntity>> rulePublisher;

6.3.5 修sidebar.html

打开注释掉的代码

注释掉如下代码

6.4 打包运行

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

6.5 控制台添加规则

6.6 Nacos 配置中心查看

相关推荐
SUPER52663 小时前
本地开发环境_spring-ai项目启动异常
java·人工智能·spring
moxiaoran57533 小时前
Spring AOP开发的使用场景
java·后端·spring
小王师傅667 小时前
【轻松入门SpringBoot】actuator健康检查(上)
java·spring boot·后端
醒过来摸鱼8 小时前
Java classloader
java·开发语言·python
专注于大数据技术栈8 小时前
java学习--StringBuilder
java·学习
loosenivy8 小时前
企业银行账户归属地查询接口如何用Java调用
java·企业银行账户归属地·企业账户查询接口·企业银行账户查询
IT 行者8 小时前
Spring Security 6.x 迁移到 7.0 的完整步骤
java·spring·oauth2
JIngJaneIL8 小时前
基于java+ vue农产投入线上管理系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot
东东的脑洞8 小时前
【面试突击二】JAVA基础知识-volatile、synchronized与ReentrantLock深度对比
java·面试
川贝枇杷膏cbppg9 小时前
Redis 的 AOF
java·数据库·redis