Sentinel 规则默认是存储在内存中的,只要服务重启之后对应的规则也会消失,实际的生产中肯定是不允许这种操作,因此 Sentinel 官方推荐在生产架构中使用第三方数据源作为永久存储中心,比如 nacos、apollo、zookeeper。因为这几种数据源都是基于 push 模式,也就是由规则中心统一推送,Sentinel Client 只需通过注册监听器的方式时刻监听变化,并负责获取配置中心推送的配置并更新到本地,这种方式能更好的保证实时性和一致性,并且各个微服务的限流、降级规则都可以永久存储,如下图所示。那么这篇文章我们就介绍下,如何集成 apollo 做配置中心进行规则持久化。

1、准备工作:

首先我们需要先做下准备工作,部署 Apollo 服务 + 搭建微服务项目并接入Apollo,这部分的内容我们就不单独介绍了,有问题的读者请阅读下Apollo官方文档:https://www.apolloconfig.com/#/zh/development/apollo-development-guide

2、添加依赖:

<!-- sentinel整合apollo进行规则持久化 -->
</dependency><dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-datasource-apollo</artifactId>
</dependency>

3、添加与 sentinel 规则相关的配置项:

# 项目名
spring.application.name = myApplication
# sentinel + apollo 进行规则持久化,为了方便管理,统一将所有项目的 sentinel 规则存放在 sentinel-rules 的公共NameSpace中
sentinel.datasource.rules.apollo.namespace-name = EDU001.sentinel-rules# 规则类型:限流
spring.cloud.sentinel.datasource.flow.apollo.ruleType = flow
# 从Apollo公共空间中EDU001.sentinel-rules读取限流规则
spring.cloud.sentinel.datasource.flow.apollo.namespace-name = ${sentinel.datasource.rules.apollo.namespace-name}
# 限流规则的具体内容,具体写法下文会介绍(我们需要再添加一个key为“myApplication-flow-rules”的属性存放具体的限流规则)
spring.cloud.sentinel.datasource.flow.apollo.flowRulesKey = ${spring.application.name}-${spring.cloud.sentinel.datasource.flow.apollo.ruleType}-rules# 规则类型:熔断降级
spring.cloud.sentinel.datasource.degrade.apollo.ruleType = degrade
# 从Apollo公共空间中EDU001.sentinel-rules读取熔断规则
spring.cloud.sentinel.datasource.degrade.apollo.namespace-name = ${sentinel.datasource.rules.apollo.namespace-name}
# 熔断降级规则的具体内容,具体写法下文会介绍
spring.cloud.sentinel.datasource.degrade.apollo.flowRulesKey = ${spring.application.name}-${spring.cloud.sentinel.datasource.degrade.apollo.rule-ruleType}-rules

上述配置仅仅展示了和持久化相关的一些配置,其他相关的配置代码就不贴了。ruleType 的取值用于区分对应的规则类型,总共七大类型,这里我们配置了限流和熔断规则,其他规则类型的取值在 com.alibaba.cloud.sentinel.datasource.RuleType 这个枚举类中有体现,可以自己尝试配置一下。另外,上述的 key 中的 flow、degrade 的名字可以任意。

4、配置规则的真正内容:

sentinel 规则存放在 apollo 配置中心的方式默认都是 JSON 格式的,那么,如何书写 JSON 格式的规则呢?下面我们就介绍下 Json 数据格式中每个属性的作用,开发中可以照着修改即可,对于一些可选属性不需要的时候也可以删除。

4.1、流控规则:

[{// 资源名"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"}
]

4.2、熔断降级规则:

[{// 资源名"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}
]

4.3、热点规则:

[{// 资源名"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"}]}
]

4.4、系统规则:

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

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

4.5、授权规则:

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

至此,我们就完成了 sentinel 规则持久化到 apollo 配置中心了,只需要在 apollo 中添加好规则并发布配置,相关规则就会被推送到对应的 sentinel client 以及 sentinel-dashboard 中了。如果读者想实现 sentinel 规则持久化到 nacos 配置中心,那么可以参考下这篇文章:https://mp.weixin.qq.com/s/Q7Xv8cypQFrrOQhbd9BOXw

但是在 push 模式下,所有规则都只能通过 Nacos 界面或 Apollo 界面来完成修改才能得到持久化存储,而在 Sentinel Dashboard 中修改限流规则虽然可以生效,但是不会被持久化到配置中心。而在这两个配置中心里存储的数据是一个 Json 格式,当存储的规则越来越多,对该 Json 配置的可读性与可维护性会变的越来越差。所以接下来我们将会介绍如何对 sentinel-dashboard 进行改造,实现 Sentinel-Dashboard 与 apollo 规则的相互同步(文章地址:https://blog.csdn.net/a745233700/article/details/122659459)

Sentinel 规则持久化到 apollo 配置中心相关推荐

  1. Alibaba Sentinel规则持久化-拉模式-手把手教程【基于文件】

    文章目录 一.拉模式架构 二.原理简述 三.编写 3.1 加依赖 3.2 写代码 3.3 配置 四.优缺点分析 五.你可能会有的疑问 六.参考文档 七.案例测试 7.1. 添加流控规则 7.2. 服务 ...

  2. Apollo配置中心使用篇

    Apollo配置中心使用篇 常见配置中心对比 Apollo核心概念 Apollo核心特性 Apollo架构设计 各模块介绍 服务端设计 客户端设计 Apollo与Spring集成的底层原理 Apoll ...

  3. apollo 配置中心_Apollo配置中心搭建笔记

    如我所愿,十一小长假之前成功跳槽了. 由于准备还算充分,offer拿了不少,涨幅也普遍达到了预期. 但是在offer对比过程中我还是纠结了许久.在薪资差别不大的情况下,主要考虑的是平台规模.业务前景. ...

  4. apollo配置中心

    文章目录 1 概览 1.1 什么是配置 1.2 什么是配置中心 2 Apollo简介 2.1 主流配置中心 2.1.1 功能特性对比 2.1.2 总结 2.2 Apollo简介 2.3 Apollo特 ...

  5. Apollo 配置中心详细教程

    一.简介 Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限.流程治理等特性,适用于微服务配置管理 ...

  6. Apollo配置中心热加载mysql_Apollo配置中心介绍

    1.What is Apollo 1.1 背景 随着程序功能的日益复杂,程序的配置日益增多:各种功能的开关.参数的配置.服务器的地址-- 对程序配置的期望值也越来越高:配置修改后实时生效,灰度发布,分 ...

  7. Apollo 配置中心介绍

    一.前言 最近我司进行基础架构升级,将配置中心从 Spring Cloud Config 迁移至 Apollo.趁此机会也学习下 Apollo,本文主要知识来自于我对官方 Wiki 的学习,如有错误, ...

  8. Spring Boot 集成 Apollo 配置中心,真香、真强大!

    作者:超级小豆丁 来源:http://www.mydlq.club/article/42/ 由于 Apollo 概念比较多,刚开始使用比较复杂,最好先过一遍概念再动手实践尝试使用. 1.背景 随着程序 ...

  9. 02.Apollo配置中心整合spring cloud zuul

    一.前言 携程 Apollo 配置中心 学习笔记, Windows 系统搭建基于携程Apollo配置中心分布式模式, 在此基础上,介绍如何使用阿波罗整合zuul实现动态路由. 二.项目搭建 参考htt ...

最新文章

  1. win10应用开发——如何判断应用是在手机上运行还是电脑上运行
  2. 干掉 RESTful!GraphQL 真香!
  3. Alpha 冲刺 (9/10)
  4. goland开启go mod管理
  5. 取消mysql自动备份文件_MySQL自动备份并清理多少天前的备份文件
  6. Leetcode643.Maximum Average Subarray I子数组的最大平均数1
  7. NuGet version
  8. JAVA怎么实现网页退出系统_java后台实现js关闭本页面,父页面指定跳转或刷新操作...
  9. 数据/方法论固然重要,但人为分析更有价值!
  10. C# 删除 文件 里面的第一行数据
  11. 性能测试中的jvm监控
  12. python实现FTP文件上传和下载
  13. 手把手教你做短视频去水印微信小程序(4-解析结果页)
  14. 三维重建-摄像机模型+摄像机标定(上)
  15. Alex 的 Hadoop 菜鸟教程: 第6课 Hbase 安装教程
  16. 图论 二分图 小世界网络 语义网络
  17. 我们到底能从《别逗了,费曼先生》中学到什么?
  18. 病毒全攻略:我是怎样让你感冒的
  19. Android 相机预览 横屏竖屏 -- 显示
  20. 从头开始学习->JVM(九):垃圾收集(上)

热门文章

  1. 四十七、微信小程序开发页面结构WXML
  2. 《失控玩家》爆火背后:什么才是拥抱人工智能的正确姿势?
  3. SIGIR 2021 | 基于用户偏好感知的虚假新闻检测
  4. 手把手带你掌握计算机视觉原始论文细节阅读
  5. HihoCode1032 最长回文子串 manacher算法
  6. 【LeetCode 55】【LeetCode 45】 跳跃游戏
  7. Java实现单链表的逆序打印
  8. paramterType和resultType的区别
  9. oracle中case when关键字的使用
  10. C#——事件(Event)DEMO[闻鸡起舞]