首页 > 其他分享 >Sentinel之动态规则扩展

Sentinel之动态规则扩展

时间:2024-12-28 22:30:07浏览次数:6  
标签:推送 数据源 扩展 nacos sentinel 规则 Sentinel 动态

Sentinel 中的动态规则

1,Sentinel提供两种方式修改规则:

  • 通过API直接修改(loadRules)
FlowRuleManager.loadRules(List<FlowRule>rules);// 修改流控规则
DegradeRuleManager.loadRules(List<DegradeRule>rules);// 修政降级规则
  • 通过 Datasource 适配不同数据源修改
    2,DataSource 扩展
    • loadRules()方法只接受内存态的规则对象,但更多时候规则存储在文件、数据库或者配置中心当中。
    • Datasource 接口给我们提供了对接任意配置源的能力。相比直接通过API修改规则,实现 Datasource接口是更加可靠的做法
      参考官方文档:https://sentinelguard.io/zh-cn/docs/dynamic-rule-configuration.html

规则管理的推荐做法

1.推荐通过控制台设置规则后将规则推送到统一的规则中心,客户端实现 ReadableDataSource 接口端监听规则中心实时获取变更

2.Datasource 扩展常见的实现方式有:
拉模式:客户端主动向某个规则管理中心定期轮询拉取规则,这个规则中心可以是 RDBMS、文件,甚至是 VCS 等。这样做的方式
是简单,缺点是无法及时获取变更
推模式(推荐):规则中心统一推送,客户端通过注册监听器的方式时刻监听变化,比如使用 Nacos、Zookeeper 等配置中心。这种方式有更好的实时性和一致性保证

Sentinel支持的数据源

1.拉模式:动态文件数据源、Consul Eureka
2.推模式: ZooKeeper, Redis,Nacos, Apollo,etcd

配置动态数据源以Nacos为例

1,注册数据源选择nacos作为规则数据源,参考: Nacos 数据源。

添加sentinel适配nacos的依赖(hailtaxi-api中添加)

<!-- https://mvnrepository.com/artifact/com.alibaba.csp/sentinel-datasource-nacos -->
<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-datasource-nacos</artifactId>
    <version>1.8.5</version>
</dependency>

版本要与当前使用的sentinel-core版本对应

2,以流控规则FlowRule为例,创建 NacosDataSource并将其注册至对应的RuleManager上即可,也可参考:sentinel-demo-nacos-datasource。
在FlowConfiguration配置类中添加如下初始执行的方法

 @PostConstruct
public  void loadMyNamespaceRules() {
    Properties properties = new Properties();
    properties.put(PropertyKeyConst.SERVER_ADDR, "192.168.10.30:8848");// server addr
    properties.put(PropertyKeyConst.NAMESPACE, "486db17a-2f34-42c0-99ce-7d8fe8ccf516");// namespaceid
​
    ReadableDataSource<String, List<FlowRule>> flowRuleDataSource = new NacosDataSource<>(
        properties,
        "SENTINEL_GROUP",//group
        "driver-flow-rules",//dataId
        source -> JSON.parseObject(source, new TypeReference<List<FlowRule>>() {}) //Converter
    );
    FlowRuleManager.register2Property(flowRuleDataSource.getProperty());
}

3,在nacos中添加规则配置

根据注册数据源时的转换器Converter可知,配置规则信息转换出来的结果是:List,我们就明白了应该在nacos中配置什么样的数据
在nacos中创建dataid为driver-flow-rules的配置文件,并添加如下配置

[
    {
        "resource":"driverInfo",
        "grade":1,
        "count":2
    }
]

"grade":1代表流控模式是qps模式,"count":2表明限流阈值是2,针对的资源是driverInfo

控制台推送规则到数据源(nacos)

1,下载sentinel源码工程
git clone https://github.com/alibaba/Sentinel.git
2,导入到idea,基于tag:1.8.5新打一个分支出来
git checkout -b v1.8.5 1.8.5
3,找到sentinel-dashboard模块,先进行源码预览
先看网页

再看后端controller

针对流控规则管理,先来看FlowControllerV1中的实现,其中包含了获取,添加,修改流控规则的几个api

GET /v1/flow/rules
POST /v1/flow/rule
PUT /v1/flow/save.json

核心涉及到两点:

1,dashboard自身对于规则的存储:提供了RuleRepository接口,且对于各种规则都提供的是InMem基于内存的存储
2,dashboard对于规则的推送和拉取:提供了两个接口,DynamicRuleProvider用于拉取规则,DynamicRulePublisher用于推送规则,
并且针对两个接口提供了默认的实现,在实现细节上内部是通过SentinelApiClient[内部基于httpClient]直接从应用端拉取和推送到应用端。但是sentinel在test目录下提供了Nacos、ZooKeeper和Apollo 的推送和拉取规则实现示例,我们拿来修改即可

4,在dashboard模块的pom文件中将sentinel-datasource-nacos依赖范围放开

<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-datasource-nacos</artifactId>
    <!--<scope>test</scope>-->
</dependency>

标签:推送,数据源,扩展,nacos,sentinel,规则,Sentinel,动态
From: https://www.cnblogs.com/Eduhg/p/18601947

相关文章

  • 自动化微信朋友圈:Python脚本实现自动发布动态
    自动化微信朋友圈:Python脚本实现自动发布动态引言在数字化时代,社交媒体已成为人们日常生活中不可或缺的一部分。微信作为中国最受欢迎的社交平台之一,其朋友圈功能更是用户分享生活点滴的重要场所。然而,手动输入长文本内容到朋友圈可能会显得繁琐且耗时。本文将介绍如何使......
  • springboot毕设新能源汽车动态单价推荐论文+程序+部署
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、研究背景随着新能源汽车市场的迅速发展,传统的静态定价模式逐渐暴露出诸多弊端。在当前市场环境下,新能源汽车的成本受到多种因素的动态影响,例如电池技术的......
  • wpf DataGrid 内容绑定动态资源方法
    先讲故事:系统需要区分语言环境,有中文环境与英文环境。然后有一列用户角色列,用户分为管理员(admin)与普通用户(users)。假设管理员用户角色ID为1,普通用户为2.用户角色编码字段名:UseRoleCode。当数据加到到DataGrid 之后,这是切换语言,需要根据当前的语言显示中文或者英文,再不......
  • FTYPE命令 显示或修改文件类型,应用于文件扩展名关联。
    FTYPE命令的起源可以追溯到早期的MS-DOS和Windows操作系统。它是用于管理和配置文件扩展名与程序关联的工具之一。具体而言,FTYPE命令与ASSOC命令一起工作,允许用户在文件扩展名与特定程序之间建立关联,控制如何打开不同类型的文件。起源与历史背景:MS-DOS和早期的Windo......
  • 王佩丰24节Excel学习笔记——第二十二讲:制作甘特图与动态甘特图
    【以Excel2010系列学习,用OfficeLTSC专业增强版2021实践】【本章技巧】插入图表,针对每一个图表上的元素,都可以选中选右键进行修改数据;本章中的向两端延伸,设置数据的原理;数据格式的显示方式,此处用来处理坐标轴的正负值的显示;图表的背景填充方法,处理图片的方法,使用艺术......
  • 王佩丰24节Excel学习笔记——第二十一讲:经典Excel动态图表实现原理
    【以Excel2010系列学习,用OfficeLTSC专业增强版2021实践】【本章技巧】使用公式记得要绝对引用;定义好的名称,引用时要使用文件名+!+定义名,不能写错,否则无结果;利用offset函数解决数据透视表做好后,原数据值添加了数据,导致数据透视表无法更新问题。记住这个公式,取数据透......
  • Vue中动态样式绑定+CSS变量实现切换明暗主题功能——从入门到进阶
    1.直接借助Vue的动态绑定样式绑定Vue动态样式绑定在Vue中,动态样式绑定是一种强大的功能,它允许开发者根据数据的变化动态地更新元素的样式。以下是对Vue动态样式绑定的详细知识梳理与详解:一、基础知识Vue的动态样式绑定主要通过v-bind:style(或简写为:style)指令来实现。通......
  • Java动态规划算法
    ①动态规划动态规划(DynamicProgramming,DP)是运筹学的一个分支,是求解决策过程最优化的过程。20世纪50年代初,美国数学家贝尔曼(R.Bellman)等人在研究多阶段决策过程的优化问题时,提出了著名的最优化原理,从而创立了动态规划。动态规划的应用极其广泛,包括工程技术、经济、工业生产......
  • 面试官:Sentinel是如何实现限流的?
    限流是一种通过控制系统对外提供的资源、服务或接口的访问数量或速率,以保护系统免受过载的一种策略。它的目的是确保系统能够在承受范围内提供稳定和可靠的服务,避免因过多的请求而导致系统崩溃、资源耗尽或响应延迟过高的情况发生。在Sentinel中,实现限流的方法有以下两......
  • 代码随想录——动态规划9不同的二叉搜索树
    解题思路本题通过递归和二叉搜索树特性解决。当n=1时,结果是1。如果n>1时,因为根节点值不同对应的二叉搜索树肯定不同,所以我们考虑根为i(2≤i≤n)的情况。由二叉搜索树特性,根左边一定有i-1个元素,右边一定有n-i个元素。设f(i)函数返回i个不同元素节点组成的二叉搜索树的个数。......