【Sentinel系列】Sentinel Dashboard 整合Nacos 实现 流控规则 双向同步

2,841 阅读2分钟

这是我参与11月更文挑战的第23天,活动详情查看:2021最后一次更文挑战

Nacos 作为项目的配置中心角色,但是存在一种情况是一部分操作者在Nacos控制台上动态修改流控规则并且实现流控规则同步,但是有另外一部分操作者通过Sentinel Dashboard来修改流控规则,这种情况导致Nacos上的流控规则和Sentinel Dashboard上流控规则数据不一致的问题。

Nacos作为配置的持久化数据库存储中心,不建议在Nacos上修改流控规则,因为Nacos配置流控规则不是本职工作所负责的,而是Sentinel DashBoard专门负责管理流控规则的控制台,对流控规则配置更加清晰、可视化,所以流控规则的管理集中在Sentinel Dashboard上。但是需要实现Sentinel Dashboard动态修改流控规则能同步到Nacos。

Sentinel Dashboard 整合Nacos 实现 流控规则 双向同步

Sentinel Dashboard的【流控规则】下的所有操作,都是调用Sentinel Dashboard源码中FlowControllerV1类,这个类中有流控规则本地化的增删改查操作。

在com.alibaba.csp.sentinel.dashboard.controller.v2包下有一个FlowControllerV2类,这个类提供了流控规则的增删改查操作,和V1版本不同点是它可实现数据源的规则拉取和发布。

@RestController
@RequestMapping(value="/v2/flow")
public class FlowControllerV2{
    	@Autowired
    	private InMemoryRuleRepositoryAdapter<FlowRuleEntity> repository;
    	@Auowired
    	@Qualifier("flowRuleDefaultProvider")
    	private DynamicRuleProvider<List<FlowRuleEntity>> ruleProvider;
    	@Auowired
    	@Qualifier("flowRuleDefaultPublisher")
    	private DynamicRulePulisher<List<FlowRuleEntity>> rulePublisher;
}

FlowControllerV2依赖以下两个重要的类

  1. DynamicRulePulisher:动态规则的发布,在Sentinel Dashboard 中修改规则同步到指定数据源。
  2. DynamicRuleProvider:动态规则的拉取,从指定数据源中获取流控规则后在Sentinel Dashboard中显示。

需要扩展DynamicRuleProvider和DynamicRulePulisher,整合Nacos实现Sentinel Dashboard流控规则双向同步。

Sentinel Dashboard 同步流控规则到Nacos

修改Sentinel Dashboard代码,具体流程步骤如下:

  1. 在github中拉取Sentinel 1.7.2 的源码
  2. 使用IDEA打开Sentinel源码
  3. 在Sentinel-dashboard模块pom.xml文件将sentinel-datasource-nacos依赖的去掉。
<dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-datasource-nacos</artifactId>
            <!--<scope>test</scope>-->
        </dependency>