SpringCloudAlibaba微服务实战系列(五)Sentinel1.8.5+Nacos持久化

这篇具有很好参考价值的文章主要介绍了SpringCloudAlibaba微服务实战系列(五)Sentinel1.8.5+Nacos持久化。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Sentinel数据持久化

前面介绍Sentinel的流控、熔断降级等功能,同时Sentinel应用也在面临着一个问题:我们在Sentinel后台管理界面中配置了一堆流控、降级规则,但是Sentinel一重启,这些规则全部消失了。那么我们就要考虑Sentinel的持久化问题。

Sentinel为我们提供了几种持久化的解决方案:

  • 存储到文件
  • 使用Redis存储
  • 使用Nacos存储
  • 使用Zookeeper存储
  • 使用Apollo存储

我们这里采用Nacos的方式进行存储这些数据。

Tip:既然使用Nacos进行持久化这些Sentinel规则数据,那么你的Nacos首先肯定是已经具备了持久化的环境的~~

实现持久化

pom.xml文件加入Nacos数据源的依赖

<!-- sentinel持久化访问Nacos的数据源依赖 -->
<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-datasource-nacos</artifactId>
</dependency>

修改bootstrap.yml文件,增加datasource的配置

server:
  port: 9001
spring:
  application:
    name: consumer # 应用名

  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 # nacos服务地址
    sentinel:
      transport:
        port: 8719 # 启动http server,并且该服务与Sentinel仪表板进行交互,使sentinel可以控制应用,若端口占用则8719+1依次扫描
        dashboard: 127.0.0.1:8080 # 仪表版访问地址
      datasource: # sentinel数据源
        ds1:	# 自定义连接名
          nacos:
            server-addr: localhost:8848 # nacos服务地址
            dataId: sentinel-consumer-ds1 # nacos的dataId
            groupId: DEFAULT_GROUP # 默认分组
            data-type: json # 数据类型 json类型
            rule-type: flow # flow表示流控规则

rule-type中的值,可以参考RuleType枚举类

五种规则持久化到Nacos中

  • authority(授权规则)
  • degrade(降级规则)
  • flow(流控规则)
  • param(热点规则)
  • system(系统规则)

当你的rule-type没设置时,程序启动时会报空指针异常

在Nacos的控制面板新建sentinel-consumer-ds1的DataId,具体配置内容如下:

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

首先在Nacos后台管理界面上配置DataId和GroupId一定是和配置文件中一一对应的,json中[]表示可以配置多个

  • resource:表示资源名称
  • limitApp:表示要限制哪些来源的调用
  • grade:阈值类型,取值参考RuleConstant类(0–线程数限流 1–QPS限流)
  • count:表示限流阈值
  • strategy:表示流控模式,0表示直接,1表示关联,2表示链路
  • controlBehavior:流控效果(0表示快速失败,1表示Warm Up,2表示排队等待)

那么这些参数,不同的规则该设置哪些参数呢,可以去参考某些规则类查看

  • 流控规则:FlowRule

  • 熔断降级:DegradeRule

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

    字段 说明 默认值
    resource 资源名,即规则的作用对象
    grade 限流模式 QPS 模式
    count 限流阈值,必填
    durationInSec 统计窗口时间长度(单位为秒),1.6.0 版本开始支持 1s
    controlBehavior 流控效果(支持快速失败和匀速排队模式),1.6.0 版本开始支持 快速失败
    maxQueueingTimeMs 最大排队等待时长(仅在匀速排队模式生效),1.6.0 版本开始支持 0
    paramIdx 热点参数的索引,必填,对应 SphU.entry(xxx, args) 中的参数索引位置
    paramFlowItemList 参数例外项,可以针对指定的参数值单独设置限流阈值,不受前面 count 阈值的限制。仅支持基本类型和字符串类型

这些json的规则除了可以在Sentinel控制面板控制之外,还可以用Java代码的方式,但是不够灵活。

配置好上面的属性后,使用Jmeter请求/sentinelTestB接口,测试流控效果。

SpringCloudAlibaba微服务实战系列(五)Sentinel1.8.5+Nacos持久化,Java,SpringCloud,SpringBoot,微服务,sentinel,nacos

可以看到,流控已经生效了。再到sentinel仪表板中看下:

SpringCloudAlibaba微服务实战系列(五)Sentinel1.8.5+Nacos持久化,Java,SpringCloud,SpringBoot,微服务,sentinel,nacos

已经生成好了一个流控规则。

再来试试降级规则

bootstrap.yml中增加ds2数据源

server:
  port: 9001
spring:
  application:
    name: consumer # 应用名

  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 # nacos服务地址
    sentinel:
      transport:
        port: 8719 # 启动http server,并且该服务与Sentinel仪表板进行交互,使sentinel可以控制应用,若端口占用则8719+1依次扫描
        dashboard: 127.0.0.1:8080 # 仪表版访问地址
      datasource: # sentinel数据源
        ds1:
          nacos:
            server-addr: localhost:8848 # nacos服务地址
            dataId: sentinel-consumer-ds1 # nacos的dataId
            groupId: DEFAULT_GROUP # 默认分组
            data-type: json # 数据类型 json类型
            rule-type: flow # flow表示流控规则
        ds2:
          nacos:
            server-addr: localhost:8848 # nacos服务地址
            dataId: sentinel-consumer-ds2 # nacos的dataId
            groupId: DEFAULT_GROUP # 默认分组
            data-type: json # 数据类型 json类型
            rule-type: degrade # degrade表示降级规则

nacos面板中添加sentinel-consumer-ds2文件

[
    {
        "resource":"/sentinelTest",
        "count":1,
        "grade":2,
        "timeWindow":5,
        "minRequestAmount":1
    }
]
  • timeWindow:表示时间窗口,熔断的时间数。
  • count:阈值
  • grade:降级策略,参考RuleConstant类(0-RT 1-异常比例 2-异常数)

以上配置,我们的/sentinelTest模拟一个异常,然后用Jmeter多次请求

SpringCloudAlibaba微服务实战系列(五)Sentinel1.8.5+Nacos持久化,Java,SpringCloud,SpringBoot,微服务,sentinel,nacos

进入熔断降级。

最后再来看下系统规则的一个实例

bootstrap.yml中

server:
  port: 9001
spring:
  application:
    name: consumer # 应用名

  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 # nacos服务地址
    sentinel:
      transport:
        port: 8719 # 启动http server,并且该服务与Sentinel仪表板进行交互,使sentinel可以控制应用,若端口占用则8719+1依次扫描
        dashboard: 127.0.0.1:8080 # 仪表版访问地址
      datasource: # sentinel数据源
        ds1:
          nacos:
            server-addr: localhost:8848 # nacos服务地址
            dataId: sentinel-consumer-ds1 # nacos的dataId
            groupId: DEFAULT_GROUP # 默认分组
            data-type: json # 数据类型 json类型
            rule-type: flow # flow表示流控规则
        ds2:
          nacos:
            server-addr: localhost:8848 # nacos服务地址
            dataId: sentinel-consumer-ds2 # nacos的dataId
            groupId: DEFAULT_GROUP # 默认分组
            data-type: json # 数据类型 json类型
            rule-type: degrade # degrade表示降级规则

        ds3:
          nacos:
            server-addr: localhost:8848 # nacos服务地址
            dataId: sentinel-consumer-ds3 # nacos的dataId
            groupId: DEFAULT_GROUP # 默认分组
            data-type: json # 数据类型 json类型
            rule-type: system # system表示系统规则

在nacos中新增 ds3的,sentinel-consumer-ds3文件

[
    {
        "qps":1
    }
]

系统规则对应的是SystemRule类,有以下几个属性:

  • avgRt:系统平均响应时间
  • highestCpuUsage:CPU使用率
  • highestSystemLoad:负载
  • maxThread:最大线程数
  • qps:每秒处理的请求数量

新增一个/sentinelTestC的资源,然后使用Jmeter压测一下,系统规则是系统级别的,即相对于资源的流控是比较粗粒度的了。

SpringCloudAlibaba微服务实战系列(五)Sentinel1.8.5+Nacos持久化,Java,SpringCloud,SpringBoot,微服务,sentinel,nacos

同样地,其他的规则,可以找到它对应的Java配置方法,找到那个类,举一反三,将对应的配置修改一下就可以了。

有两个点需要注意下:文章来源地址https://www.toymoban.com/news/detail-684672.html

  • 在Nacos控制台修改规则,Sentinel这边的规则会即时生效,重启服务后依然是有效的,毕竟已经做好持久化了
  • 在Sentinel控制台修改的规则,不会被修改到nacos中,重启后还会变为nacos设置的值

到了这里,关于SpringCloudAlibaba微服务实战系列(五)Sentinel1.8.5+Nacos持久化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微服务实战系列之ZooKeeper(中)

    昨日博主的第一篇 ZooKeeper ,对它自身具备的能力做了初步介绍。书接上文,马不停蹄,我们继续挖掘它内在的美,充分把握它的核心与脉络。 Q:集群一致性协同是如何进行的 我们讲到分布式,一般是在集群环境下实现的。以ZooKeeper为例,它是如何保障集群环境下的成功运

    2024年02月04日
    浏览(42)
  • 微服务实战系列之Cache(技巧篇)

    凡工具必带使用说明书,如不合理的使用,可能得到 “意外收获” 。这就好比每个人擅长的领域有所差异,如果放错了位置或用错了人,也一定会让 Leader 们陷入两难之地: “上无法肩负领导之重托,下难免失去伙伴之信任” ,最终的结局大致是 不欢而散 。 通过前序系列

    2024年02月03日
    浏览(65)
  • 微服务实战系列之ZooKeeper(实践篇)

    关于 ZooKeeper ,博主已完整的通过庖丁解牛式的 “解法” ,完成了概述。我想掌握了这些基础原理和概念后,工作的问题自然迎刃而解,甚至offer也可能手到擒来,真实一举两得,美极了。 为了更有直观的体验,强化概念,博主特别献上一篇实践文章。理论联系实践,才能学

    2024年01月21日
    浏览(78)
  • 微服务实战系列之J2Cache

    经过近几天陆续发布 Cache 系列博文,博主已对业界主流的缓存工具进行了基本介绍,当然也提到了一些基本技巧。相信各位盆友看见这么多 Cache 工具后,在选型上一定存在某些偏爱: A同学说:不管业务千变万化,我对Redis的爱永不变。 B同学说:不管集中式还是分布式,单

    2024年02月04日
    浏览(43)
  • 《学成在线》微服务实战项目实操笔记系列(P92~P120)【下】

    史上最详细《学成在线》项目实操笔记系列【下】,跟视频的每一P对应,全系列18万字,涵盖详细步骤与问题的解决方案。如果你操作到某一步卡壳,参考这篇,相信会带给你极大启发。 4.1 (课程发布)模块需求 P92 课程预览:在发布课程之前需要预览一下,看最终的效果有没

    2024年02月19日
    浏览(45)
  • k8s实战从入门到上天系列第一篇:K8s微服务实战内容开篇介绍

            我们使用开源ruoyi微服务基本使用,基于基本的微服务实践。我们来讲解k8s的实战内容。         第一章:开源ruoyi微服务简介基本使用         第二章:k8s基本知识回顾、k3s集群搭建和基本使用         第三章:微服务镜像构建         第四章:中间件镜像构建

    2024年02月01日
    浏览(43)
  • 【微服务实战之Docker容器】第四章-【微服务实战之Docker容器】第三章-镜像仓库

    【微服务实战之Docker容器】第一章-下载及安装 Docker挂载主机目录访问如果出现cannot open directory .: Permission denied解决办法: 在挂载目录后多加一个–privileged=true参数即可 如果是CentOS7安全模块会比之前系统版本加强,不安全的会先禁止,所以目录挂载的情况被默认为不安全的

    2024年02月07日
    浏览(46)
  • Docker微服务实战

    业务需求 利用Docker部署应用服务,实现在网页端通过输入地址 ip:端口/hello/docker,页面显示hello docker ! IDEA编写代码 创建springboot项目 网上很多教程,此步骤省略… 项目的目录结构 控制层代码 application.properties 配置信息 启动类自动生成无需改动 POM.XML代码 测试代码是否能够正

    2024年02月11日
    浏览(33)
  • 【微服务实战】01-工程结构概览

    领域模型层 基础设施层 ⇒ 仓储 应用层 ⇒ Api、后台任务Job 共享层 总结 领域模型专注业务的设计,不依赖仓储等基础设施层 基础设施的仓储层仅负责领域模型的取出和存储 使用CQRS模式设计应用层 Web Api是面向前端的交互的接口,避免依赖领域模型 将共享代码设计为共享包

    2024年02月12日
    浏览(28)
  • 微服务实战项目-学成在线-项目部署

    一个软件的生命周期包括:需求分析阶、设计、开发、测试、上线、维护、升级、废弃。 通过示例说明如下: 1、产品人员进行需求分析 2、设计人员进行软件架构设计和模块设计。 3、每个模块的开发人员并行开发,设计接口、进行编码,并进行单元测试 4、开发完毕,将代

    2024年02月13日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包