【第30章】Spring Cloud之Sentinel动态规则扩展

news2024/11/16 3:51:46

文章目录

  • 前言
  • 一、规则管理及推送
  • 二、DataSource 扩展
    • 1. 引入依赖
    • 2. 规则文件
    • 3. 定义数据源信息
  • 三、服务定义和测试
    • 1. 服务定义
    • 2. 并发测试
    • 3. 控制台查看规则
  • 总结


前言

之前我们定义的流控和熔断规则应用每次重启之后就丢失了,是因为在控制定义规则这些规则仅在内存态生效,应用重启之后,该规则会丢失,这就是规则推送的原始模式。

规则推送分为 3 种模式,包括 “原始模式”、“Pull 模式” 和"Push 模式"。

这里我们主要介绍官方推荐的 push 模式,结合Nacos来完成Sentinel规则的存储。


一、规则管理及推送

一般来说,规则的推送有下面三种模式:

推送模式说明优点缺点
原始模式API 将规则推送至客户端并直接更新到内存中,扩展写数据源(WritableDataSource)简单,无任何依赖不保证一致性;规则保存在内存中,重启即消失。严重不建议用于生产环境
Pull 模式扩展写数据源(WritableDataSource), 客户端主动向某个规则管理中心定期轮询拉取规则,这个规则中心可以是 RDBMS、文件 等简单,无任何依赖;规则持久化不保证一致性;实时性不保证,拉取过于频繁也可能会有性能问题。
Push 模式扩展读数据源(ReadableDataSource),规则中心统一推送,客户端通过注册监听器的方式时刻监听变化,比如使用 Nacos、Zookeeper 等配置中心。这种方式有更好的实时性和一致性保证。生产环境下一般采用 push 模式的数据源。规则持久化;一致性;快速引入第三方依赖

通过表格可以看出Push模式是目前比较完善的解决方案,不存在明显的缺点。

二、DataSource 扩展

我们推荐通过控制台设置规则后将规则推送到统一的规则中心,客户端实现 ReadableDataSource 接口端监听规则中心实时获取变更,流程如下:
在这里插入图片描述

1. 引入依赖

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

2. 规则文件

我们在Nacos新建配置文件provider-service-flow-rules.json,这里分组定义为SENTINEL_GROUP,和服务配置区分开

[
  {
    "resource": "/sentinel/flow",
    "controlBehavior": 0,
    "count": 5,
    "grade": 1,
    "limitApp": "default",
    "strategy": 0
  }
]

注意我们这里的resource定义不包含应用上下文路径,要和簇点链路中资源名称保持一致
在这里插入图片描述

3. 定义数据源信息

Sentinel starter 整合了目前存在的几类 ReadableDataSource。只需要在配置文件中进行相关配置,即可在 Spring 容器中自动注册 DataSource。

spring:
  cloud:
    sentinel:
      transport:
        port: 8719
        dashboard: 192.168.137.192:8080
      datasource:
        ds1:
          nacos:
            server-addr: ${NACOS_SERVER_ADDR}
            namespace: ${NACOS_NAMESPACE}
            username: ${NACOS_USERNAME}
            password: ${NACOS_PASSWORD}
            dataId: ${spring.application.name}-flow-rules.json
            groupId: SENTINEL_GROUP
            data-type: json
            rule-type: flow

我们可以定义多个数据源,和ds1:保持同级定义ds2:,ds3:即可

ReadableDataSource 加载规则数据成功的时候,控制台会打印出相应的日志信息:

2024-08-31T16:53:36.153+08:00  INFO 13708 --- [provider-service] [           main] c.a.n.client.config.impl.ClientWorker    : [fixed-dev-192.168.137.192_8848] [subscribe] provider-service-flow-rules.json+SENTINEL_GROUP+dev
2024-08-31T16:53:36.161+08:00  INFO 13708 --- [provider-service] [           main] c.a.nacos.client.config.impl.CacheData   : [fixed-dev-192.168.137.192_8848] [add-listener] ok, tenant=dev, dataId=provider-service-flow-rules.json, group=SENTINEL_GROUP, cnt=1

三、服务定义和测试

1. 服务定义

package org.example.nacos.provider.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

/**
 * Create by zjg on 2024/8/31
 */
@RestController
public class SentinelController {
    @GetMapping(value = "/sentinel/flow")
    public String flow(@RequestParam("name") String name) {
        return "hello"+name;
    }
}

2. 并发测试

在这里插入图片描述
在这里插入图片描述
我们定义的流控规则已经生效了,限流阈值5,导致了第6个请求失败,符合预期。

3. 控制台查看规则

在这里插入图片描述
我们通过Nacos定义的provider-service-flow-rules.json流控配置文件已经生效,并且我们可以通过Nacos动态调整流控和熔断等各种各样的规则,推送到Sentinel 控制台。


总结

回到顶部
上图的①到③环节已经打通,但是到这里,还有些问题,我们通过Sentinel 控制台修改规则,却无法保存到我们的Nacos配置中心,重启还是会丢失,下一章我们让Sentinel 控制台修改规则推送到配置文件中去,完成持久化存储的功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2126853.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Dotnet Publish 报错 - the process cannot access the file

Dotnet Publish 报错 - the process cannot access the file 问题描述&#xff1a; 我在使用自动化部署工具 Jenkins 时&#xff0c;遇到需要使用 dotnet publish 命令来发布.net core 项目时&#xff0c;报错了&#xff1a; The process cannot access the file because it …

若依RuoYi脚手架二次开发教程(二次开发必学技能)

文章目录 一、若依框架修改器二、新建业务模块1、在新模块中导入核心模块依赖2、父工程版本锁定3、添加新模块依赖 三、菜品管理&#xff08;主子表&#xff09;1、准备SQL并导入数据库2、配置代码生成信息3、下载代码并导入项目4、页面功能测试5、功能完善与升级改造6、页面调…

I.MX6U裸机-汇编LED灯实验

汇编基础语法参考&#xff1a;初识汇编语言-CSDN博客 本文主要参考正点原子《I.MX6U 嵌入式 Linux 驱动开发指南 》第八章 STM32 GPIO 回顾 我们一般拿到一款全新的芯片&#xff0c;第一个要做的事情的就是驱动其 GPIO&#xff0c;控制其 GPIO 输出高低电平&#xff0c;我们学习…

Python复制数组并增加一个维度

二维数组扩增到三维数组 在处理nc文件过程中&#xff0c;读取的数据如果是多个时间点的数据&#xff0c;比如绿海模式的数据&#xff0c;它的格点的维度除了经纬度还有时间和高度。在进行格点数据插值到站点数据时&#xff0c;为了保持维度一致&#xff0c;也构造一个相同维度的…

【CSS in Depth 2 精译_029】5.2 Grid 网格布局中的网格结构剖析(上)

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第一章 层叠、优先级与继承&#xff08;已完结&#xff09; 1.1 层叠1.2 继承1.3 特殊值1.4 简写属性1.5 CSS 渐进式增强技术1.6 本章小结 第二章 相对单位&#xff08;已完结&#xff09; 2.1 相对…

opencv之Canny边缘检测

文章目录 前言1.应用高斯滤波去除图像噪声2.计算梯度3.非极大值抑制4.应用双阈值确定边缘5.Canny函数及使用 前言 Canny边缘检测是一种流行的边缘检测算法&#xff0c;用于检测图像中的边缘。它通过一系列步骤将图像中的像素边缘突出显示出来&#xff0c;主要分为以下几个步骤…

ChatGLM3中的一些语法

ChatGLM3中的一些语法 flyfish 一、functools.cache functools.cache 是 Python 3.9 引入的装饰器&#xff0c;用于实现函数的结果缓存。它的全称是 functools.cache&#xff0c;能够自动缓存函数调用的结果。 import functoolsfunctools.cache def expensive_computation(…

Python 封装、继承和多态

在学习 Python 这门编程语言时&#xff0c;你会接触到一些重要的面向对象编程&#xff08;OOP&#xff09;概念&#xff0c;比如封装、继承和多态。这些概念不仅是 Python 的核心特性&#xff0c;也是理解和使用高级编程技巧的基础。本文将通俗易懂地解释这些概念&#xff0c;特…

MVC设计模式与delegate,tablview,Appdelegate,SceneDelegate

一、MVC MVC就是Model&#xff08;模型&#xff09;、View&#xff08;视图&#xff09;、Controller&#xff08;控制器&#xff09; 例如上面的 excel表&#xff0c; 数据、数据结构就是模型Model 根据数据形成的直观的、用户能直接看见的柱形图是视图View 数据构成的表格…

Linux网络——socket编程与UDP实现服务器与客户机通信

文章目录 端口号TCP/UDP网络字节序socket的常见APIUDP实现服务器与客户机通信服务器客户机运行效果如下 端口号 我们说即便是计算机网络&#xff0c;他们之间的通信也仍然是进程间通信 那么要如何在这么多计算机中&#xff0c;找到你想要的那个进程呢 在网络中标识的唯一的计…

反激电路的参数设计,基于TI-UC3843芯片,Simplis仿真验证

采用TI官方提供的UC3843芯片手册给的DEMO图&#xff0c;通过MATHCAD计算参数得出环路补偿的各项参数&#xff0c;最后使用simplis进行仿真验证&#xff0c;一起进行学习吧。 UCx84x 电流模式 PWM 控制器 datasheet (Rev. G) (semiee.com) UCx84x 系列控制集成电路提供了实现离…

【springboot过ingress后无法获取X-Forwarded-For头信息】

springboot过ingress后无法获取X-Forwarded-For头信息 一、现象结论修改步骤ingressspringboot 排查流程本文参考 一、现象 项目使用spring boot 2.7.18&#xff0c;有个新需求是校验X-Forwarded-For头的所有来源ip合法性&#xff0c;线上环境出现取不到X-Forwarded-For头的问…

【思博伦】史上最详细思博伦测试仪使用精讲!图解超赞超详细!!!

承接上文 目录 2.2.9.7 配置TCPFLAG 2.2.9.8 配置分片 2.2.9.9 添加VLAN标签 2.2.9.10 添加MPLS标签 2.2.9.11 添加Vntag标签 2.2.9.12 重新快速新建新的帧内容 ​​​​​​​2.2.10 导入Pcap包 2.2.11 发包配置 2.2.11.1 发包模式配置 ​​​​​​​2.2.11.2 配置…

【OJ】关于顺序表的经典题目(移除数组中指定元素的值、数组去重、合并两个有序的数组)

文章目录 前言题目1&#xff1a;移除数组中指定的元素题目描述解题思路方法1 &#xff1a;暴力法方法2&#xff1a;双指针法 题目2&#xff1a;数组去重题目描述解题思路双指针法 题目3&#xff1a;合并两个有序的数组题目描述解题思路方法1&#xff1a;暴力破解法方法2&#x…

SAP F110 批量付款付款参考(KIDNO)和分配字段(ZUONR)带入会计凭证

SAP F110 批量付款付款参考(KIDNO)和分配字段(ZUNOR)带入会计凭证 财务有个要求需要将付款建议的付款参考和分配字段写入最后的ZP凭证 最后的效果大概就是这样的 折腾了很久, 1、先是想到的GGB1的替代,但是试验了很久都没有搞定,貌似很多人遇到了这个情况。 2、然后…

初识爬虫4

1.理解代理ip&#xff0c;正向代理和反向代理 2.代理ip分类&#xff0c;根据匿名度分类&#xff1a;透明&#xff0c;匿名&#xff0c;高匿 3.防止频繁向同一个域名发送请求被封ip,需使用代理ip # -*- coding: utf-8 -*- import requestsurl https://www.baidu.comproxies {…

Facebook如何通过AI改变你的社交体验?

在当今数字化的社交媒体环境中&#xff0c;Facebook作为全球最大的社交平台之一&#xff0c;正在通过引入和优化人工智能&#xff08;AI&#xff09;技术&#xff0c;改变用户的社交体验。人工智能不仅帮助Facebook增强了内容推荐和信息过滤的精准度&#xff0c;还让平台具备了…

故障恢复(残次版)

视频地址 一&#xff1a;文件系统故障修复案例 模拟搞坏磁盘中的某一块 dd if/dev/zero of/dev/sdb1 bs1k count10(默认4K)1.修补分区中每个组中坏掉的超级块部分 查看超级块的备份块 dumpe2fs 磁盘位置 如&#xff1a; dumpe2fs /dev/sdb1使用备份超级块进行修复&#x…

Netty笔记01-Netty的基本概念与用法

文章目录 1. 概述1.1 Netty 是什么&#xff1f;1.2 Netty 的特点1.3 Netty 的作者1.4 Netty 的地位1.5 Netty 的优势1.6 Netty 的工作原理1.7 Netty 的应用场景1.8 Netty 的重要组件 2. 第一个程序2.1 目标2.2 服务器端2.3 客户端2.4 流程梳理&#x1f4a1; 提示 1. 概述 1.1 …

【香菇的程序人生】七夕舔狗反诈指南:技术篇

本文设计技术分析及部分参考网站仅供技术研究及自我保护&#xff0c;请勿用于其他用途&#xff01; 另外&#xff0c;为什么本文只针对"舔狗"呢?因为舔狗不愿面对事实&#xff0c;本文将从科学技术角度给其指点迷津~ 文章目录 1. 你的女神/男神保熟吗1.1 AI 换脸请谨…