Sentinel 规则持久化操作

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第4天,点击查看活动详情

1-10、规则持久化

在上面演示的sentinel规则,每次服务重启,之前配置的规则就会丢失,这样之前好不容易辛苦配置的规则就全部丢失,在生成环境显然是不行的,因此就需要对规则进行持久化操作。

Sentinel规则的推送有下面三种模式:

推送模式 说明 优点 缺点
原始模式 API 将规则推送至客户端并直接更新到内存中,扩展写数据源(WritableDataSource) 简单,无任何依赖 不保证一致性;规则保存在内存中,重启即消失。严重不建议用于生产环境
Pull 模式 扩展写数据源(WritableDataSource), 客户端主动向某个规则管理中心定期轮询拉取规则,这个规则中心可以是 RDBMS、文件 等 简单,无任何依赖;规则持久化 不保证一致性;实时性不保证,拉取过于频繁也可能会有性能问题。
Push 模式 扩展读数据源(ReadableDataSource),规则中心统一推送,客户端通过注册监听器的方式时刻监听变化,比如使用 Nacos、Zookeeper 等配置中心。这种方式有更好的实时性和一致性保证。生产环境下一般采用 push 模式的数据源。 规则持久化;一致性;快速 引入第三方依赖

1-10-1、原始模式

如果不做任何修改,Dashboard 的推送规则方式是通过 API 将规则推送至客户端并直接更新到内存中: image.png 这种做法的好处是简单,无依赖;坏处是应用重启规则就会消失,仅用于简单测试,不能用于生产环境。

1-10-2、拉模式

pull 模式的数据源(如本地文件、RDBMS 等)一般是可写入的。使用时需要在客户端注册数据源:将对应的读数据源注册至对应的 RuleManager,将写数据源注册至 transport 的 WritableDataSourceRegistry 中。

1-10-3、推模式

生产环境下一般更常用的是 push 模式的数据源。对于 push 模式的数据源,如远程配置中心(ZooKeeper, Nacos, Apollo等等),推送的操作不应由 Sentinel 客户端进行,而应该经控制台统一进行管理,直接进行推送,数据源仅负责获取配置中心推送的配置并更新到本地。因此推送规则正确做法应该是** 配置中心控制台/Sentinel 控制台 → 配置中心 → Sentinel 数据源 → Sentinel**,而不是经 Sentinel 数据源推送至配置中心。这样的流程就非常清晰了:

1-10-3-1、基于Nacos实现push模式

1-10-3-1-1、引入依赖
<!--配置sentinel基于nacos持久化-->
<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
1-10-3-1-2、在nacos中配置规则

在nacos中配置sentinel的规则,配置模式最好选择JSON,这样在yml配置文件中就可以少配置一个参数值,配置内容如红框中的内容就是流控的规则信息。 image.png

相关规则参数信息,如果不知道含义可以去github中查看: github.com/alibaba/Sen…

流控规则参数:

image.png

熔断降级规则参数:

image.png

image.png

系统规则:

image.png

热点参数规则:

image.png

1-10-3-1-3、配置yml加载nacos流控规则

当前配置使用ruleType指定了规则类型为flow(流控规则),因此nacos中dataID为sentinel-rule中就配置流控规则,如果配置其他规则,则需要再进行配置 image.png

配置流控和降级规则

image.png

1-10-3-1-3-1、yml属性的查看

按住ctrl+鼠标左键,进入这个方法 image.png

再次进入DataSourcePropertiesConfigurationimage.png

可以看到有不同的配置类型,file/nacos/zk/apollo/redis/consul。 image.png

进入nacos配置类,就可以看到相关的配置属性 image.png

再次进入其父类 image.png

父类的配置属性,其中dataType就是在nacos中设置的配置格式 image.png

RoleType就是规则的类型:

FLOW:流控
DEGRADE:降级
PARAM_FLOW:热点参数流控
SYSTEM:系统规则
AUTHORITY:权限规则
GW_FLOW:网关流量控制
GW_API_GROUP:API控制

image.png

1-10-3-1-4、重启服务访问sentinel控制台

启动控制台之后,随便访问一下接口,然后刷新控制台就可以看到配置的流控规则了

image.png

1-10-3-1-5、测试规则

流控规则设置的QPS阈值为2,频繁刷新的情况下,可以触发规则 image.png

1-10-3-1-6、规则更新

  在sentinel里面对规则进行编辑修改,目前的操作是无法将新配置更新到Nacos中的,因此如果需要修改规则,就需要去Nacos中进行修改。   实际上在sentinel中修改规则也是可以同步到nacos中的,涉及到了一些源码的了解,后面文章再进行介绍。

猜你喜欢

转载自juejin.im/post/7126175555950477319