Sentinel配置持久化到Nacos实现流控熔断

nacos2.2.3版本安装 威胁情报组收到事件情报,部分单位发现Nacos存在权限认证绕过的Nday漏洞(CVE-2021-29441),据在野验证,该漏洞在Nacos版本2.0.4及之前可复现。 阅读详情

控制台

jar 下载:github.com/alibaba/Sen…

启动参数

# 将控制台自身接入到sentinel
nohup java -jar -Dproject.name=sentinel-dashboard -Dcsp.sentinel.dashboard.server=localhost:8181 sentinel-dashboard-1.8.5.jar --server.port=8181 &> sentinel.log &
# -Dsentinel.dashboard.auth.username=sentinel 
# -Dsentinel.dashboard.auth.password=sentinel 

控制台页面

心跳时间

通过多次刷新页面,发现默认每隔10秒发送一次心跳。

规则下发

端口配置会在应用对应的机器上启动一个 Http Server ,该 Server 会与 Sentinel 控制台 做交互。

比如 Sentinel 控制台添加了一个限流规则,会把规则数据 push 给这个 Http Server 接收,Http Server 再将规则注册到 Sentinel 中。

接入Nacos

pom

<!-- spring cloud alibaba nacos discovery 依赖 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>2.2.3.RELEASE</version>
        </dependency>
​
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
            <version>2021.1</version>
        </dependency>

yaml

spring:
  application:
    name: cloud-alibaba-sentinel
  cloud:
    nacos:
      discovery:
        enabled: true
        server-addr: 0.0.0.0:8848
        namespace: 9862bd7f-2dc2-47a4-9c80-c6290c5c3e2b
        metadata:
          management:
            context-path: ${server.servlet.context-path}/actuator
      config:
        enabled: false
#        namespace:
#        group:
    sentinel:
      transport:
        dashboard: localhost:8181
        port: 8182
#        clientIp: localhost

本地连接服务器的sentinel,能注册上但是没有实时监控也没有链路,换了版本也不行。

最后还是用的本地sentinel,如果有知道解决方法的可以评论。

流控案例

名词解释

  • 资源名 :唯一名称,默认请求路径。资源是 Sentinel 的关键概念。它可以是 Java 应用程序中的任何内容,例如,由应用程序提供的服务,或由应用程序调用的其它应用提供的服务,甚至可以是一段代码。

  • 针对来源 :就是调用者。Sentinel 可以针对调用者进行限流,这里填写微服务名,默认default就是不区分来源。

  • 阈值类型、 单机阈值:这里区分 QPS和 并发线程数。

    • QPS :Query Per Second,每秒请求的数量,当调用该请求API每秒请求的数量达到配置的 阈值 的时候,进行限流。
    • 并发线程数 : 当调用该请求API的线程数量达到配置的 阈值 的时候,进行限流。
  • 流控模式 :资源的调用关系,流控模式分为 直连 、关联、链路

    • 直连模式 :请求的API达到限流条件(配置的阈值)时,直接进行限流;
    • 关联模式 :当关联的资源达到配置的 阈值 时,就限流自己,比如 /test-a 需要读取数据 c , /test-b 则是更改数据 c ,他们之间有个 争抢资源 的关系,如果放任这两个操作 争抢资源,则 争抢 本身带来的开销会降低整体的 吞吐量 。此时对 /test-a 设置限流规则流控模式为关联,关联资源为 /test-b , 那么当 /test-b 写数据 c 的操作过于频繁时,则限制 /test-a 读取 c 的操作。
    • 链路模式 :Sentinel 记录着资源之间的调用链路,这些资源通过调用关系,相互之间构成一棵调用树。链路模式 就是只关心这颗树上 指定的一条链路 上是否达到阈值而进行限流,不关心其他调用路径上的调用。
  • 流控效果:控制的效果,有 快速失败 、冷启动(或称 预热 、Warm Up)、 排队等待。流控效果只在阈值类型为QPS时才有效,阈值类型为线程数的流控效果是如果超出阈值,新的请求会被立即拒绝。

    • 快速失败 :默认的流量控制方式,当QPS超过任意规则的阈值后,新的请求就会被立即拒绝,拒绝方式为抛出 FlowException 。
    • Warm Up :预热/冷启动方式。根据 codeFactor(冷加载因子,默认3)的值,请求 QPS 从 阈值/codeFacotor阈值/codeFacotor阈值/codeFacotor 开始,经 预热时长 逐渐升至设定的 QPS 阈值。
    • 排队等待 :这种方式会严格控制请求通过的间隔时间,也即是让请求以均匀的速度通过。

流控测试

熔断案例

来看一下熔断规则的这些字段:

  • 资源名 :唯一名称,默认请求路径。
  • 熔断策略 :包括 慢调用比例 , 异常比例 , 异常数 。
  • 最大RT :RT 就是响应时间,这里设置 最大响应时间 。熔断策略配置为 慢调用比例 时,必须设置该字段,用来确定哪些请求时慢调用。
  • 比例阈值 :配置 慢调用比例 时该值为慢调用占所有请求的比例上限;配置 异常比例 时为请求异常所占比例的上限。取值范围:0 ~ 1。
  • 异常数 :就是请求的异常数量。注意:Sentinel 中异常降级的统计是仅针对 业务异常 ,Sentinel 进行降级时本身的异常(BlockException)是不生效的。
  • 熔断时长 :熔断经过该值后恢复到 HALF-OPEN 状态。HALF-OPEN 状态:熔断后经过熔断时长后的第一个请求成功而没有错误则恢复正常结束熔断,否则继续熔断。
  • 最小请求数 :请求数目大于该值时才会根据配置的熔断策略进行降级。
  • 统计时长 :应该和上面几个字段联合起来理解:当 单位统计时长 内满足请求数目大于 最小请求数 时才会根据配置的熔断策略进行降级。

该配置将要达到的效果是: 1秒(1000ms)内达到10个请求以上,当响应时长超过0.5秒的请求数量大于1(10 * 0.1)个的时候进行熔断,熔断5秒后变成 Half Open 状态,即5秒后的第一个请求若没有问题则恢复正常,否则继续熔断。 这是一个 慢调用比例 的熔断策略。

配置持久化

在 Sentinel DashBoard 上配置的规则只存在缓存中,当项目重启,这些规则就消失了。如何持久化配置信息呢?

Sentinel 提供多种不同的数据源来持久化规则配置,包括 File ,Redis 、Nacos 、ZooKeeper 等。

pom

<!-- 引入 Sentinel 数据源 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-alibaba-sentinel-datasource</artifactId>
</dependency>
<!-- Sentinel数据源之 Nacos -->
<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-datasource-nacos</artifactId>
</dependency>

流量控制规则(FlowRule)

  • resource :资源名,资源名是限流规则的作用对象,比如请求资源 getUser 。
  • grade :限流阈值类型,QPS 或线程数模式。0表示线程数,1表示QPS。默认为1,即 QPS 模式
  • count :限流阈值。比如值为2表示1秒超过2个请求就限流。
  • strategy :流控模式:直接、链路、关联,默认 直接 。0表示直接,1表示关联,2表示链路。
  • controlBehavior :流控效果(直接拒绝 / 排队等待 / 慢启动模式),0表示快速失败,1表示Warm Up,2表示排队等待。
  • limitApp :流控针对的调用来源。默认就是 default ,代表不区分调用来源.

熔断降级规则 (DegradeRule)

  • resource :资源名,资源名是限流规则的作用对象,比如请求资源 getUser 。
  • grade :熔断策略,支持慢调用比例/异常比例/异常数策略。1:慢调用比例,2:异常比例,3:异常数。默认为1,慢调用比例。
  • count :慢调用比例模式下为慢调用临界 RT(超出该值计为慢调用);异常比例/异常数模式下为对应的阈值。
  • timeWindow :熔断时长,单位为秒。
  • minRequestAmount :熔断触发的最小请求数,请求数小于该值时即使异常比率超出阈值也不会熔断。默认为 5 。
  • statIntervalMs :统计时长(单位为 ms),如 60*1000 代表分钟级。默认为 1000 ms。
  • slowRatioThreshold :慢调用比例阈值,仅慢调用比例模式有效

示例

[
  {
    "resource": "/user/findById",
    "limitApp": "default",
    "grade": 1,
    "count": 2,
    "strategy": 0,
    "controlBehavior": 0,
    "clusterMode": false
  }
]

yaml

spring:
  application:
    name: cloud-commerce-user
#  zipkin:
#    #    sender:
#    #       type: kafka # 默认是 web
#    base-url: http://101.43.160.149:9411/
  cloud:
    nacos:
      discovery:
        enabled: true
        server-addr: 0.0.0.0:8848
        namespace: 123
        metadata:
          management:
            context-path: ${server.servlet.context-path}/actuator
    sentinel:
      transport:
        # 101.43.138.173
        dashboard: localhost:8181
        port: 8182
#        clientIp: localhost
      datasource:
        nacos: # 这个名字任意起
          nacos:
            serverAddr: 0.0.0.0:8848
            groupId: DEFAULT_GROUP
            dataId: cloud-sentinel-rule
            namespace: 123
            ruleType: flow
            data-type: json

发布配置之后重启项目,访问流控的资源,规则就会被拉取到 sentinel-dashbroad 。

在 nacos 更改配置,也会实时更新。

双向推送

大佬改造之后的 dashboard :github.com/CHENZHENNAM…

nacos 配置Sentinel 熔断规则 nacos上网关配置文件 yh-platform-gateway-dev.yml server: port: 18600 spring: cloud: sentinel: app: #标识网关项目 type: 1 # 取消控制台懒加载 eager: true transport: # 控制台地址 dashboard: 192.168.0.188:8088 # .. 阅读详情

相关推荐

Sentinel结合Nacos实现配置持久化(全面)

在分布式微服务的开发中,Gateway是必不可少的组件,那么对于服务的配置也会集成到Gateway中,但是我们不能把配置放在内存中,此时就需要结合nacos配置中心来实现配置的持久化了。

qq_45515182的博客 1万+

sentinel1.8.3持久化教程,使用Nacos作为数据源

sentinel动态规则的持久化

c_2333的博客 1706

Sentinel 快速入门

如果这个时候其它的机器也处在一个边缘状态的时候,这个增加的流量就会导致这台机器也崩溃,最后导致整个集群不可用。使用nacos达到sentinel 规则持久化和动态刷新,当然这是nacos到sentinel单项配置,如果想要在sentinel 控制台添加流控规则并实时同步到nacos ,需要修改sentinel控制台源码,修改打包后即可实现双向同步。由于调用关系的复杂性,如果调用链路中的某个资源出现不稳定,最终会导致请求发生堆积,所以降低调用链路中的不稳定资源也是Sentinel的使命。可以看到服务降级了。

weixin_44210373的博客 2158

Nacos 2.2.3+Seata+Sentinel 版本踩坑

Nacos 2.2.3+Seata+Sentinel 版本踩坑

qq_42354307的博客 1863

Spring Cloud Alibaba——Sentinel持久化和集群流控

本文已参与「新人创作礼」活动,一起开启掘金创作之路。Sentinel提供了这几种持久化方案储存到文件 使用Redis储存 使用Nacos存储 使用Zookeeper存储 使用Apollo存储 下面将使用同为Spring Cloud Alibaba开发套件中的Naocs作为持久化方案,因为在前期已经将Nacos持久化到MySQL数据库1.1 导入依赖 1.2 修改配置 1.3 Nacos配置 (1)测试配置流控规则 各字段含义:resource:表示资源名称 limitApp:表示要限制来自哪些来源的调用,d

jjc4261的博客 1961

Sentinel的熔断与持久化

目录 Sentinel的熔断机制 Sentinel的持久化 Sentinel的熔断机制 首先熔断指当服务的某个节点不可用或响应时间过长时,会进入熔断,熔断该节点的调用。而服务降级指的是服务端一点毛病没有,就是返回给客户端当前服务不可用,让客户端无法调用。 Sentinel的熔断机制我们主要将fallback和blockHandler的处理 fallback:指的是程序自身有异常的时候,我们进行处理,让“指定的友好界面返回给客户端” blockHandler:指的是通过Senti..

我能在河边钓一整天的鱼 1293

Sentinel集成Nacos对流控与降级规则的持久化

在上一篇我们介绍了流控和降级熔断这几个概念,并对Sentinel的流控与降级的规则进行了进一步的阐述。但是我们之前在控制台配置的规则,控制台是默认通过API推送至客户端并直接更新到内存中。一旦我们重启应用,这些规则便会消失,所以,接下来就让我们一起来看看如何将这些规则持久化吧。

apple_52109766的博客 1491

【Ultrascale+ MPSOC学习记录】10、PS端以太网使用lwip

还是参考ALINX教程,学习PS端以太网如何使用,从教程中可以看到,开发板使用了一个xilinx默认不支持的phy JL2121,所以需要修改lwip的库源码。

ryo891012的博客 881

Sentinel配置Nacos持久化

Sentinel在使用控制台时进行配置是纯内存操作,并没有提供默认的持久化措施,一旦服务重启会导致配置的流控、熔断等策略失效。Sentinel官方提供了多种持久化方式如:Redis、Zookeeper、Etcd、Nacos以及其他方式等。此文以Nacos为持久化配置方式进行讲解。

z1299236067的博客 954

MIMO技术入门

MIMO:多天线技术,发射端和接收端有多个天线(注意:并不是指多个天线板,而是多套振子,每一套是一个独立的天线。) 4G:2、8天线 5G:4、64天线(64T64R) 手机也是多天线 MIMO实现效果的分类: 1)空间分集 。2)空间复用。3)波束赋形。 空间分集(space diversity) 作用:提升接收质量 利用多个天线发射或者接收一个数据流,避免单个信道衰落对整个链路的影响。(比如你的耳机坏了一只并不影响另一只) 空间复用(space multiplexing) 作用:提升速率 利

About1129的博客 2876

【通信协议】I2C总线(一主多从)

I2C总线(一主多从)之软件模拟代码详解

m0_75090944的博客 9841

sentinel整合nacos配置中心持久化

sentinel整合nacos配置中心持久化

打孔员的博客 594

Agentic-Desktop-Pet:构建本地智能桌面助手的架构与实践

智能体(Agent)作为人工智能领域的重要概念,是指能够感知环境、自主决策并执行任务以实现目标的软件实体。其核心原理在于结合感知、决策与执行模块,通过大语言模型(LLM)等推理引擎处理信息并驱动行动。这种架构的技术价值在于将AI的认知能力与具体的操作系统环境深度融合,从而创造出能主动理解用户上下文、提供个性化服务的智能伙伴。在应用场景上,智能体技术正从云端对话机器人向本地化、场景化的桌面助手演进,旨在解决传统自动化工具缺乏智能、而纯聊天机器人脱离操作环境的问题。本文探讨的Agentic-Desktop-Pe

weixin_27210125的博客 623

SpringCloud+Nacos持久化Sentinel

SpringCloud-Alibaba+Nacos+Sentinel整合并持久化集成

qq_42354307的博客 1585

【漏洞复现】用友U9 UMWebService.asmx 任意文件读取漏洞

用友U9存在任意文件读取漏洞,未授权的攻击者可以通过该漏洞读取服务器任意文件,造成敏感信息泄露。

qq_67810151的博客 620

springboot+vue项目基础开发(12)vue项目的搭建

在src目录下新建 api,utils,views文件夹。删除componets目录下自动生成的所有文件。在utils文件夹下创建request.js。启动项目,记得是要在管理员下启动。

m0_58498702的博客 153

SpringCloud Alibaba——Sentinel服务熔断与限流(六、规则持久化配置)

SpringCloud Alibaba——Sentinel服务熔断与限流(六、规则持久化配置)

贝尔摩德苦艾酒 7259

2、探秘储备池计算:原理、应用与前沿趋势

储备池计算(Reservoir Computing)作为一种新兴的计算方法,起源于计算神经科学和机器学习领域,现已广泛应用于非线性动力系统理论、物理学、材料科学、生物学和机器人学等多个领域。其核心优势在于概念简洁性,通过利用高维动态系统的非线性响应,将学习过程集中在读出层,避免了传统循环神经网络(RNN)训练的复杂性。储备池计算的发展方向主要包括拓展到非线性动态系统和利用物理动态系统作为计算资源(PRC),后者有望突破冯·诺依曼瓶颈,实现边缘计算。理论方面,储备池计算与人类大脑的信息处理方式密切相关,并推动

ggg99的专栏 737

Nacos持久化Sentinel规则配置

【代码】Nacos持久化Sentinel规则配置。

huzhuozhuoas的博客 203

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Spring Boot + Spring Cloud Gateway + Alibaba Cloud Sentinel + Alibaba Nacos 持久化 限流 熔断降级 失效 重启后规则消失

Spring Boot + Spring Cloud Gateway + Alibaba Cloud Sentinel + Alibaba Nacos 持久化 限流 熔断降级 失效 重启后规则消失

weixin_44560583的博客 1320

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【Spring Cloud Alibaba】【Hoxton】Sentinel 热点规则-@SentinelResource-熔断-持久化(二)

1 热点参数限流 何为热点?热点即经常访问的数据。很多时候我们希望统计某个热点数据中访问频次最高的 Top K 数据,并对其访问进行限制。比如: 商品 ID 为参数,统计一段时间内最常购买的商品 ID 并进行限制 用户 ID 为参数,针对一段时间内频繁访问的用户 ID 进行限制 热点参数限流会统计传入参数中的热点参数,并根据配置的限流阈值与模式,对包含热点参数的资源调用进行限流。热点参数限流可以...

qq_34125999的博客 5132

Sentinel-Dashboard-1.8持久化Nacos全网最详细讲解(包含客户端)

*耗时2天(我的元旦假期啊~~~~),针对Sentinel-Dashboard1.8的源码进行修改。 目前已打包并上传优快云资源。如果你不想看这长篇大论的话。* 资源地址:https://download.youkuaiyun.com/download/u014386444/14003226 本人因为经常下载资源,积分用完了。。。我看其他人在优快云都需要3、40积分,5积分应该不算多吧。。当然如果你和我一样没积分了。联系我,免费发你。 最后一句废话,如果帮到你,我们学学老外。共享知识,互相学习进步~ 现在开始正题。

铁蛋的博客 5003

Sentinel dashboard规则持久化到nacos改造

修改Sentinel dashboard源码,使规则配置持久化到nacos中

Hello Java 1113
上一篇: Spring 源码阅读:忽略感知接口对应成员变量的自动装配
下一篇: 来自鹅厂大神级架构师把Tomcat内核设计解析完了
Java技术那些事儿
博客等级 码龄5年 2306粉丝 2584原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值