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 配置中心查看

相关推荐
侠客行031719 小时前
Mybatis连接池实现及池化模式
java·mybatis·源码阅读
蛇皮划水怪19 小时前
深入浅出LangChain4J
java·langchain·llm
老毛肚21 小时前
MyBatis体系结构与工作原理 上篇
java·mybatis
风流倜傥唐伯虎21 小时前
Spring Boot Jar包生产级启停脚本
java·运维·spring boot
Yvonne爱编码21 小时前
JAVA数据结构 DAY6-栈和队列
java·开发语言·数据结构·python
Re.不晚21 小时前
JAVA进阶之路——无奖问答挑战1
java·开发语言
你这个代码我看不懂1 天前
@ConditionalOnProperty不直接使用松绑定规则
java·开发语言
fuquxiaoguang1 天前
深入浅出:使用MDC构建SpringBoot全链路请求追踪系统
java·spring boot·后端·调用链分析
琹箐1 天前
最大堆和最小堆 实现思路
java·开发语言·算法
__WanG1 天前
JavaTuples 库分析
java