前言:
- 大家关闭服务8401后,sentinel控制台上的流控规则就会消失,这种就是临时的,不是永久的。
- 如今,sentinel的所有规则都是内存存储,重启后所有规则都会丢失。在生产环境下,我们要配置一对配置,一旦重启(app)应用后都消失啦,这个问题就很严重,so我们必须确保这些规则的持久化,避免丢失。
规则管理模式
规则是否能持久化,取决于规则管理模式,sentinel支持三种规则管理模式:
- 原始模式:Sentinel的默认模式,将规则保存在内存,重启服务会丢失。
- 拉模式:客户端主动向某个规则管理中心定期轮询拉取规则,这个规则中心可以是 RDBMS、文件,甚至是 VCS 等。这样做的方式是简单,缺点是无法及时获取变更;
- 推模式:规则中心统一推送,客户端通过注册监听器的方式时刻监听变化,比如使用 Nacoshttps://github.com/alibaba/nacos、Zookeeper 等配置中心。这种方式有更好的实时性和一致性保证。
推模式示例展示
1.在pom.xml中添加依赖,使用nacos配置规则,nacos 是阿里中间件团队开源的服务发现和动态配置中心。Sentinel 针对 Nacos 作了适配,底层可以采用 Nacos 作为规则配置数据源。
<!--Springcloud ailibaba sentinel-datasource-nacos后续做特久化用-->
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
</dependency
2.修改resources中的application.yml文件,在spring.cloud.sentinel中添加
spring:
cloud:
sentinel:
datasource:
ds1:
nacos:
server-addr: localhost:8848
data-id: cloudalibaba-sentinel-service
group-id: DEFAULT_GROUP
data-type: json
rule-type: flow
3.添加nacos的业务规则配置,这里与sentinel相互联系:
4.这里着重对上面配置内容进行解释:
- resource:资源名称,
- limitApp:来源应用;
- grade:阈值类型,0表示线程数,1表示QPS;
- count:单机阈值;
- strategy:流控模式,0表示直接,1表示关联,2表示链路;
- controlBehavior:流控效果,0表示快速失败,1表示Warm Up,2表示排队等待;
- clusterMode:是否集群。
5.点击发布后,配置列表存在
6.启动8401后刷新路径,sentinel客户端上面业务规则就存在了
7.验证sentinel持久化规则(动态规则,DataSource
扩展实现)
7.1停止8401服务,查看sentinel界面,我们发现业务规则没有了
7.2重启8401服务,调用url,反复刷新,查看sentinel界面,我们发现业务规则又存在了,不用再手动去配置规则了
结语:
我们在没有使用sentinel动态规则之前,都是通过 API 手动直接修改 (loadRules
),这只是(硬编码方式)一般仅用于测试和演示,而我们生产上一般通过动态规则源的方式来动态管理规则。