- 微服务系列:Spring Cloud Alibaba 之 Sentinel 详细入门
- 微服务系列:Spring Cloud Alibaba 之 Sentinel 基本流控规则
- 微服务系列:Spring Cloud Alibaba 之 Sentinel 高级流控规则
- 微服务系列:Spring Cloud Alibaba 之 Sentinel 熔断降级规则
- 微服务系列:Spring Cloud Alibaba 之 Sentinel 热点限流规则
- 微服务系列:Sentinel 之 @SentinelResource 配置详解
在经过上面这一系列的文章学习后,我们对 Sentinel
学习也即将进入尾声,不出意外的话,这篇将会结束对 Sentinel
的学习,后面也可能会有新的相关文章,但那都是后话了。
在 Sentinel
的学习过程中,大家肯定注意到了一个问题,每次重启服务或者重启 Sentinel
控制台时,之前控制台中配置的各种规则都会消失,需要重新配置。本文就对这些规则的持久化进行一些探讨。
话不多说,开始今天的学习。
一、概述
Sentinel 的理念是开发者只需要关注资源的定义,当资源定义成功后可以动态增加各种流控降级规则。Sentinel 提供两种方式修改规则:
- 通过 API 直接修改 (
loadRules
) - 通过
DataSource
适配不同数据源修改
通过 API 直接修改:这个就是直接修改代码中定义的规则。
通过 DataSource
适配不同数据源:可以整合动态配置系统,如ZooKeeper
、Nacos
、Apollo
、Redis 等,动态地实时刷新配置规则。
DataSource
扩展常见的实现方式有:
- 拉模式:客户端主动向某个规则管理中心定期轮询拉取规则,这个规则中心可以是 RDBMS、文件,甚至是 VCS 等。这样做的方式是简单,缺点是无法及时获取变更;
- 推模式:规则中心统一推送,客户端通过注册监听器的方式时刻监听变化,比如使用 Nacos、Zookeeper 等配置中心。这种方式有更好的实时性和一致性保证。
一般来说,规则的推送有下面三种模式:
推送模式 | 说明 | 优点 | 缺点 |
原始模式 | API 将规则推送至客户端并直接更新到内存中,扩展写数据源(WritableDataSource) | 简单,无任何依赖 | 不保证一致性;规则保存在内存中,重启即消失。严重不建议用于生产环境 |
扩展写数据源(WritableDataSource), 客户端主动向某个规则管理中心定期轮询拉取规则,这个规则中心可以是 RDBMS、文件 等 | 简单,无任何依赖;规则持久化 | 不保证一致性;实时性不保证,拉取过于频繁也可能会有性能问题。 | |
扩展读数据源(ReadableDataSource),规则中心统一推送,客户端通过注册监听器的方式时刻监听变化,比如使用 Nacos、Zookeeper 等配置中心。这种方式有更好的实时性和一致性保证。生产环境下一般采用 push 模式的数据源。 | 规则持久化;一致性;快速 | 引入第三方依赖 |
二、文件配置规则
Sentinel
支持通过本地文件加载规则配置,使用方式如下(限流规则作为演示)
1. 配置文件
2. flowRule.json
flowRule.json
对应com.alibaba.csp.sentinel.slots.block.flow.FlowRule
各属性。放在了项目中的 resource 目录下
3. 测试接口
4. 启动测试
启动项目,在控制台的流控规则下就读取到了文件中配置的这个规则
也可以正常限流
重启项目后,规则并不会消失。
上面这种配置方式,只是保证了规则的持久化,并不能动态的推送规则,如需动态推送规则,还需做一些额外的配置: 在生产环境中使用 Sentinel · alibaba/Sentinel Wiki · GitHub
三、Nacos配置规则
1. 添加依赖
2. Nacos 控制台定义限流策略
Nacos
控制台新增配置并发布
3. 配置文件
4.启动测试
启动项目,在控制台的流控规则下就读取到了 Nacos
配置的这个规则
限流正常
此时,我们修改 Nacos
中的这个配置
点击发布,观察 Sentinel
控制台,读取到了最新的配置。
但是,如果我们在 Sentinel
控制台修改此流控规则,却并不会同步到 Nacos
中。
从 Sentinel 1.4.0 开始,Sentinel 控制台提供 DynamicRulePublisher
和 DynamicRuleProvider
接口用于实现应用维度的规则推送和拉取,并提供了相关的示例。Sentinel 提供应用维度规则推送的示例页面(/v2/flow
),用户改造控制台对接配置中心后可直接通过 v2 页面推送规则至配置中心。改造详情可参考 应用维度规则推送示例。
四、其他
至此,Sentinel
相关技术文章我也学习好几篇了,其他的肯定还有东西没学到,目前就先学习到这里吧。
其他的 Ribbon、Feign整合Sentinel & 服务的熔断降级