irpas技术客

Spring Cloud Alibaba Sentinel(八)持久化数据及配置json_CodingAnHour

irpas 5757

默认情况下sentinel dashboard中配置的规则是API 将规则推送至客户端并直接更新到内存中,扩展写数据源(WritableDataSource),当服务重启或者重新部署后,配置的规则需要重新配置,不保证一致性;规则保存在内存中,重启即消失。严重不建议用于生产环境

持久化数据到nacos中(Push模式)

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

配置jar包,先检查下,如果不存在此包在增加

<!--sentinel数据持久化--> <dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-datasource-nacos</artifactId> </dependency>

nacos 对当前项目的配置文件中增加持久化配置

spring: cloud: sentinel: # nacos 持久化数据 datasource: # 可配置多个规则 # 可自定义key-流控规则 dashboard-flow: nacos: server-addr: http:localhost dataId: ${spring.application.name}-flow file-extension: json rule-type: flow namespace: ${spring.profiles.active} # 可自定义key-系统规则 dashboard-system: nacos: server-addr: http:localhost dataId: ${spring.application.name}-system file-extension: json rule-type: system namespace: ${spring.profiles.active} nacos配置名,例如项目名demo 规则json

配置时需要把注释删除掉否则报错

流控规则

根据实际的需要改变减少对应的参数即可

[ { // 资源名 "resource": "/test", // 针对来源,若为 default 则不区分调用来源 "limitApp": "default", // 限流阈值类型(1:QPS;0:并发线程数) "grade": 1, // 阈值 "count": 1, // 是否是集群模式 "clusterMode": false, // 流控效果(0:快速失败;1:Warm Up(预热模式);2:排队等待) "controlBehavior": 0, // 流控模式(0:直接;1:关联;2:链路) "strategy": 0, // 预热时间(秒,预热模式需要此参数) "warmUpPeriodSec": 10, // 超时时间(排队等待模式需要此参数) "maxQueueingTimeMs": 500, // 关联资源、入口资源(关联、链路模式) "refResource": "rrr" } ] 降级规则

根据实际的需要改变减少对应的参数即可

[ { // 资源名 "resource": "/test1", "limitApp": "default", // 熔断策略(0:慢调用比例,1:异常比率,2:异常计数) "grade": 0, // 最大RT、比例阈值、异常数 "count": 200, // 慢调用比例阈值,仅慢调用比例模式有效(1.8.0 引入) "slowRatioThreshold": 0.2, // 最小请求数 "minRequestAmount": 5, // 当单位统计时长(类中默认1000) "statIntervalMs": 1000, // 熔断时长 "timeWindow": 10 } ] 热点规则

根据实际的需要改变减少对应的参数即可

[ { // 资源名 "resource": "/test1", // 限流模式(QPS 模式,不可更改) "grade": 1, // 参数索引 "paramIdx": 0, // 单机阈值 "count": 13, // 统计窗口时长 "durationInSec": 6, // 是否集群 默认false "clusterMode": 默认false, // "burstCount": 0, // 集群模式配置 "clusterConfig": { // "fallbackToLocalWhenFail": true, // "flowId": 2, // "sampleCount": 10, // "thresholdType": 0, // "windowIntervalMs": 1000 }, // 流控效果(支持快速失败和匀速排队模式) "controlBehavior": 0, // "limitApp": "default", // "maxQueueingTimeMs": 0, // 高级选项 "paramFlowItemList": [ { // 参数类型 "classType": "int", // 限流阈值 "count": 222, // 参数值 "object": "2" } ] } ] 系统规则

负值表示没有阈值检查。不需要删除参数

[ { // RT "avgRt": 1, // CPU 使用率 "highestCpuUsage": -1, // LOAD "highestSystemLoad": -1, // 线程数 "maxThread": -1, // 入口 QPS "qps": -1 } ] 受权规则

根据实际的需要改变对应的参数即可

[ { // 资源名 "resource": "sentinel_spring_web_context", // 流控应用 "limitApp": "/test", // 授权类型(0代表白名单;1代表黑名单。) "strategy": 0 } ]

官网说明


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #Spring #Cloud #Alibaba #默认情况下sentinel