Sentinel 规则持久化到 apollo 配置中心
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 配置中心相关推荐
- Alibaba Sentinel规则持久化-拉模式-手把手教程【基于文件】
文章目录 一.拉模式架构 二.原理简述 三.编写 3.1 加依赖 3.2 写代码 3.3 配置 四.优缺点分析 五.你可能会有的疑问 六.参考文档 七.案例测试 7.1. 添加流控规则 7.2. 服务 ...
- Apollo配置中心使用篇
Apollo配置中心使用篇 常见配置中心对比 Apollo核心概念 Apollo核心特性 Apollo架构设计 各模块介绍 服务端设计 客户端设计 Apollo与Spring集成的底层原理 Apoll ...
- apollo 配置中心_Apollo配置中心搭建笔记
如我所愿,十一小长假之前成功跳槽了. 由于准备还算充分,offer拿了不少,涨幅也普遍达到了预期. 但是在offer对比过程中我还是纠结了许久.在薪资差别不大的情况下,主要考虑的是平台规模.业务前景. ...
- apollo配置中心
文章目录 1 概览 1.1 什么是配置 1.2 什么是配置中心 2 Apollo简介 2.1 主流配置中心 2.1.1 功能特性对比 2.1.2 总结 2.2 Apollo简介 2.3 Apollo特 ...
- Apollo 配置中心详细教程
一.简介 Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限.流程治理等特性,适用于微服务配置管理 ...
- Apollo配置中心热加载mysql_Apollo配置中心介绍
1.What is Apollo 1.1 背景 随着程序功能的日益复杂,程序的配置日益增多:各种功能的开关.参数的配置.服务器的地址-- 对程序配置的期望值也越来越高:配置修改后实时生效,灰度发布,分 ...
- Apollo 配置中心介绍
一.前言 最近我司进行基础架构升级,将配置中心从 Spring Cloud Config 迁移至 Apollo.趁此机会也学习下 Apollo,本文主要知识来自于我对官方 Wiki 的学习,如有错误, ...
- Spring Boot 集成 Apollo 配置中心,真香、真强大!
作者:超级小豆丁 来源:http://www.mydlq.club/article/42/ 由于 Apollo 概念比较多,刚开始使用比较复杂,最好先过一遍概念再动手实践尝试使用. 1.背景 随着程序 ...
- 02.Apollo配置中心整合spring cloud zuul
一.前言 携程 Apollo 配置中心 学习笔记, Windows 系统搭建基于携程Apollo配置中心分布式模式, 在此基础上,介绍如何使用阿波罗整合zuul实现动态路由. 二.项目搭建 参考htt ...
最新文章
- win10应用开发——如何判断应用是在手机上运行还是电脑上运行
- 干掉 RESTful!GraphQL 真香!
- Alpha 冲刺 (9/10)
- goland开启go mod管理
- 取消mysql自动备份文件_MySQL自动备份并清理多少天前的备份文件
- Leetcode643.Maximum Average Subarray I子数组的最大平均数1
- NuGet version
- JAVA怎么实现网页退出系统_java后台实现js关闭本页面,父页面指定跳转或刷新操作...
- 数据/方法论固然重要,但人为分析更有价值!
- C# 删除 文件 里面的第一行数据
- 性能测试中的jvm监控
- python实现FTP文件上传和下载
- 手把手教你做短视频去水印微信小程序(4-解析结果页)
- 三维重建-摄像机模型+摄像机标定(上)
- Alex 的 Hadoop 菜鸟教程: 第6课 Hbase 安装教程
- 图论 二分图 小世界网络 语义网络
- 我们到底能从《别逗了,费曼先生》中学到什么?
- 病毒全攻略:我是怎样让你感冒的
- Android 相机预览 横屏竖屏 -- 显示
- 从头开始学习->JVM(九):垃圾收集(上)