流控规则持久化到Nacos

      在Sentinel Dashboard中配置规则之后重启应用就会丢失,实际生产环境中需要配置规则的持久化实现,Sentinel提供多种不同的数据源来持久化规则配置,包括file,redis、nacos、zk。

Pull模式 

       pull 模式数据源(如本地文件、RDBMS 等)一般是可写入的。 客户端主动向某个规则管理中心(如本地文件、RDBMS 等)定期轮询拉取规则。既可以在应用本地直接修改文件来更新规则,也可以通过 Sentinel 控制台推送规则。以本地文件数据源为例,推送过程如下图所示:

      

 

       Sentinel 控制台通过 API 将规则推送至客户端并更新到内存中,接着注册的写数据源会将新的规则保存到本地的文件中。使用 pull 模式的数据源时一般不需要对 Sentinel控制台进行改造。

        优点:简单,无任何依赖;规则持久化

        缺点:不保证一致性(无法保证同步);实时性不保证(毕竟是轮询),拉取过于频繁也可能会有性能问题。

Push模式

   规则中心统一推送,客户端通过注册监听器的方式时刻监听变化,比如使用 Nacos、Zookeeper 等配置中心。这种方式有更好的实时性和一致性保证。生产环境下一般采用 push 模式的数据源。

  推送的操作不应由 Sentinel 客户端进行,而应该经控制台统一进行管理,直接进行推送,数据源仅负责获取配置中心推送的配置并更新到本地。配置中心控制台/Sentinel 控制台 → 配置中心 → Sentinel 数据源 → Sentinel:

   

  优点:规则持久化;一致性;快速

  缺点:引入第三方依赖

Nacos控制台添加配置

 

 属性说明

resource:资源名称
limitApp:来源应用
grade:阀值类型,0:线程数,1:QPS
count:单机阀值
strategy:流控模式,0:直接,1:关联,2:链路
controlBehavior:流控效果,0:快速失败,1:warmUp,2:排队等待
clusterMode:是否集群
[
    {
        "resource": "/v1/order/createPayment",
        "limitApp": "default",
        "grade": "1",
        "count": "1",
        "strategy": "0",
        "controlBehavior": "0",
        "clusterMode": false
    }
]

启动Sentinel就可以看到 ,上面的这个限流规则已经在Sentinel控制台了,所以我们在Nacos配置的限流规则,已经推送到了Sentinel控制台。

问题

  每次需要在Nacos配置规则然后会推送到Sentinel。但是Nacos中的规则需要手动添加,这样很不方便。希望做到当然是在Sentinel控制台添加熔断规则,自动将熔断规则推送到Nacos数据源

 

参考: 

       https://www.cnblogs.com/jian0110/p/14139044.html

       https://mynamelancelot.github.io/spring-cloud/spring-cloud-alibaba-sentinel.html

   

 

 

      

posted on 2022-04-05 17:13  溪水静幽  阅读(90)  评论(0)    收藏  举报