• 详细了解关于sentinel的实际应用


    一、sentinel的持久化配置

    我们通过Dashboard来为Sentinel客户端设置各种各样的规则,但是这些规则默认是存放在内存中,极不稳定,无法用于生成环境,所以需要将其持久化。

    DataSource 扩展常见的实现方式有:

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

    Sentinel 目前支持以下数据源扩展:

    • Pull-based: 文件、Consul
    • Push-based: ZooKeeper, Redis, Nacos, Apollo, etcd

    生产环境中一般常用的就是推模式。这里我们使用Nacos存储规则。推送模式的正确做法应该是 「配置中心控制台/Sentinel 控制台 → 配置中心 → Sentinel 数据源 → Sentinel」

    1.1 sentinel同步nacos配置

    增加sentinel的依赖和nacos存储扩展依赖

    2. 添加nacos相关配置

    1. 提供接口用于测试限流

    4. nacos中增加限流规则的配置

    • resource:资源名,即限流规则的作用对象
    • limitApp:流控针对的调用来源,若为 default 则不区分调用来源
    • grade:限流阈值类型(QPS 或并发线程数);0代表根据并发数量来限流,1代表根据QPS来进行流量控制
    • count:限流阈值
    • strategy:调用关系限流策略
    • controlBehavior:流量控制效果(直接拒绝、Warm Up、匀速排队)
    • clusterMode:是否为集群模式
    1. 测试,访问test接口,发现sentinel-dashboard中出现了一条流控规则

    1.2 sentinel-dashboard中修改规则同步到nacos

    要想实现在sentinel-dashboard中修改规则并同步到nacos,我们就需要修改sentinel服务。首先我们去官网下载Sentinel。

    1. 修改pom文件

    将test注释掉,因为这个是作用于test目录下的。

    1. 找到 sentinel-dashboard/src/test/java/com/alibaba/csp/sentinel/dashboard/rule/nacos目录,将整个目录拷贝到sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/rule/。
    2. 找到 com.alibaba.csp.sentinel.dashboard.controller.v2.FlowControllerV2 ,将默认动态规则修改为nacos动态规则。

    修改为:

    1. 找到 sentinel-dashboard/src/main/webapp/resources/app/scripts/directives/sidebar/sidebar.html

    将以下内容注释去掉

    1. 重新编译打包,运行打包后的sentinel-dashboard.jar。
    2. 测试,我们删除nacos中的流量规则配置
    • 在sentinel-dashboard——>流量规则V1中新增一个规则。

    • 刷新nacos,发现多了一个配置

    • 在nacos中修改这个配置,将阀值改为1

    • 刷新sentinel-dashboard,流量阀值修改为1了。

    • 重启服务,重启sentinel-dashboard,发现流控规则依然存在。

    「注意:以上只是演示了流控规则的持久化,sentinel还支持其他规则,如果想实现哪种规则都可以采用相同的方式实现!」

    二、Gateway网关限流

    限流:就是请求多了,对请求进行定制的快速响应处理,应用在服务提供者本身。

    从 1.6.0 版本开始,Sentinel 提供了 Spring Cloud Gateway 的适配模块,可以提供两种资源维度的限流:

    • route 维度:即在 Spring 配置文件中配置的路由条目,资源名为对应的 routeId
    • 自定义 API 维度:用户可以利用 Sentinel 提供的 API 来自定义一些 API 分组
    1. 添加依赖

    2. 注入对应的 SentinelGatewayFilter 实例以及 SentinelGatewayBlockExceptionHandler 实例。

    1. 自定义异常处理

    4. 配置路由

    1. 添加启动参数
    -Dcsp.sentinel.app.type=1 -Dcsp.sentinel.dashboard.server=localhost:8081 -Dproject.name=alibaba-gateway

    1. 访问接口,查看效果

    三、feign调用实现熔断降级

    「降级」:就是服务崩溃了,所以「降级逻辑应该应用在消费者(调用者)那里」,加在服务提供者本身是毫无意义的,因为服务已经断开了。

    我们根据实际需求在sentinel-dashboard中配置降级规则,然后编写代码。

    1. 定义接口

    2. 定义远程服务调用接口

    为了简写fallback,我们更倾向于用fallbackFactory = RmoteTestFallbackFactory.class

    1. 服务降级处理fallback

    4. 服务降级处理fallbackFactory

  • 相关阅读:
    浅谈必应bing搜索国内广告开户流程
    CSAPP Lab5:Shell
    专业人士必知的渗透测试工具!
    @MapperScan的作用
    contenteditable H5聊天室发送表情
    Mybatis-Plus中QueryWrapper的使用
    Halo 开源项目学习(三):注册与登录
    ruoyi-cloud-plus添加一个不要认证的公开新页面
    Verilog 实现CDC中单bit 跨时钟域,从慢时钟域到快时钟域
    仿游戏热血江湖游戏类
  • 原文地址:https://blog.csdn.net/wdj_yyds/article/details/125445284