sentinel-规则持久化
sentinel为了便于限流规则持久化管理,专门提供了ReadableDataSource(配置读取)与WritableDataSource(配置写入)接口,利用这两个接口可以向指定的存储设备中实现规则的读写处理
sentinel提供的DataSource是一个逻辑上的概念,具体的存储可以是关系型数据库、文件、zookeeper、redis、nacos等终端,在终端中可以保存所需要的限流规则,而对于DataSource的操作形式也提供有两种:
- 拉模式(Pull-Based):客户端主动向某个DataSource存储中心定期轮询并读取规则,这个配置中心可能是一个文件,或者是关系型数据库,虽然此种方式简单,但是却无法及时获取到配置更新
- 推模式(Push-Based):所有的限流规则由配置中心(Nacos、zookeeper、redis等)统一推送,客户端通过注册监听器的方式监听规则的变化,这样可以更好的保持配置的实时性和一致性
使用nacos配置流控规则
- 在nacos下创建一个新的配置项,名为:
服务名-flow-rules
内容:
[ 限流配置项可以有多个,所以使用json数组来进行描述
{ 具体的限流规则
"resource": "/test", 资源名称
"limitApp": "default", 应用来源
"grade": 1, 阈值类型 0根据线程数量 1根据qps
"count": 1, 单机阈值定义
"strategy": 0, 流控模式 0直接 1关联 2链路
"controlBehavior": 0, 流控效果 0快速失败 1WarmUp 2队列
"clusterMode": false 采用非集群模式
}
]
具体的配置项可以在sentinel源码种的:Rule接口的实现中查找,比如流控规则就是FlowRule(别忘了AbstractRule里也有)的成员变量
- 添加依赖
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
<version>1.5.2</version>
</dependency>
- 修改配置文件
spring:
cloud:
datasource: #数据源配置
flow-datasource: #流控数据源
nacos: #当前存储介质nacos
server-addr: 127.0.0.1:8848
namespace: 71cb07c5-28f1-49da-b8ad-56a76ac9037a
group-id: SENTINEL_GROUP
data-id: ${spring.application.name}-flow-rules #配置项名称
data-type: json #数据格式
rule_type: flow #策略类型:流控
当nacos种的配置修改后,由于配置项允许自动刷新,会自动加载新的配置
使用nacos配置系统规则
- 在nacos中添加名为
服务名-system-rules
配置文件
[
{
"qps":1
}
]
- 修改配置文件
spring:
cloud:
sentinel:
datasource: #数据源配置
system-datasource: #系统规则数据源
nacos: #当前存储介质nacos
server-addr: 127.0.0.1:8848
namespace: 71cb07c5-28f1-49da-b8ad-56a76ac9037a
group-id: SENTINEL_GROUP
data-id: ${spring.application.name}-system-rules #配置项名称
data-type: json #文件结构
rule_type: system #流控