【SpringCloud-11】SCA-sentinel

sentinel是一个流量控制、熔断降级的组件,可以替换第一代中的hystrix。 hystrix用起来没有那么方便:

1、要在调用方引入hystrix,没有ui界面进行配置,需要在代码中进行配置,侵入了业务代码。

2、还要自己搭建监控平台dashboard。

而sentinel就很方便,在微服务引入依赖就可以。 对于控制台,下载jar包启动运行即可。

下载地址:https://github.com/alibaba/Sentinel/releases   

启动:jar -jar sentinel-dashboard-1.7.1.jar &

访问:ip:端口/#/dashboard/home

基本使用:

微服务引入sentinel依赖:

        <!-- Sentinel支持采用 Nacos 作为规则配置数据源,引入该适配依赖 --><dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-datasource-nacos</artifactId></dependency>

yml配置:

server:port: 8098
spring:application:name: lagou-service-autodelivercloud:nacos:discovery:server-addr: 127.0.0.1:8848,127.0.0.1:8849,127.0.0.1:8850sentinel:transport:dashboard: 127.0.0.1:8080 # sentinel dashboard/console 地址port: 8719   #  sentinel会在该端口启动http server,那么这样的话,控制台定义的一些限流等规则才能发送传递过来,#如果8719端口被占用,那么会依次+1management:endpoints:web:exposure:include: "*"# 暴露健康接口的细节endpoint:health:show-details: always
#针对的被调用方微服务名称,不加就是全局生效
lagou-service-resume:ribbon:#请求连接超时时间ConnectTimeout: 2000#请求处理超时时间##########################################Feign超时时长设置ReadTimeout: 3000#对所有操作都进行重试OkToRetryOnAllOperations: true####根据如上配置,当访问到故障请求的时候,它会再尝试访问一次当前实例(次数由MaxAutoRetries配置),####如果不行,就换一个实例进行访问,如果还不行,再换一次实例访问(更换次数由MaxAutoRetriesNextServer配置),####如果依然不行,返回失败信息。MaxAutoRetries: 0 #对当前选中实例重试次数,不包括第一次调用MaxAutoRetriesNextServer: 0 #切换实例的重试次数NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RoundRobinRule #负载策略调整
logging:level:# Feign日志只会对日志级别为debug的做出响应com.lagou.edu.controller.service.ResumeServiceFeignClient: debug

微服务启动后,就可以在控制台查看监控情况。 

sentinel流量控制: 

 在sentinel后台进行配置。

  • 资源名:默认请求路径
  • 针对来源:填写微服务名称,默认default(不区分来源)
  • 阈值类型/单机阈值:
    • QPS:每秒钟请求数量。
    • 线程数:线程处理请求的时候, 如果说业务逻辑执⾏时间很⻓,流量洪峰来临时,会耗费很多线程资源,最终可能服务雪崩。
  • 是否集群:是否集群限流
  • 流控模式:
    • 直接:资源调⽤达到限流条件时,直接限流
    • 关联:关联的资源调⽤达到阈值时候限流⾃⼰ ⽐如⽤户注册接⼝,需要调⽤身份证校验接⼝,如果身份证校验接⼝请求达到阈值,可以对⽤户注册接⼝进⾏限流。
    • 链路:只记录指定链路上的流量。 比如两条链路都调用了nodeA,可以配置只限制某条链路的请求。
  • 流控效果:
    • 快速失败:直接失败,抛出异常
    • Warm Up:根据冷加载因⼦(默认3)的值,从阈值/冷加载因⼦,经过预热时⻓, 才达到设置的QPS阈值。 这样可以防止突然暴增导致服务不可用,比如秒杀。
    • 排队等待:匀速排队,让请求匀速通过,阈值类型必须设置为QPS,否则⽆效。
      例如, QPS 配置为 5 ,则代表请求每 200 ms 才能通过⼀个,多出的请求将排队等
      待通过。超时时间代表最⼤排队时间,超出最⼤排队时间的请求将会直接被拒绝。
      排队等待模式下, QPS 设置值不要超过 1000 (请求间隔 1 ms )。

sentinel服务降级: 

Sentinel 降级在调用某个资源出现不稳定状态时(例如调⽤超时或异常⽐例升⾼),对这个资源的调⽤进⾏限制,让请求快速失败,避免影响到其它的资源⽽导致级联错误。当资源被降级后,在接下来的降级时间窗⼝之内,对该资源的调⽤都⾃动熔断。

另外,sentinel不会像hystrix,在时间窗内对每一次请求都尝试自我修复,而是明确在时间窗后才恢复。 它的熔断策略是:

  • RT(平均响应时间):
    • RT超过500ms的调用是慢调用,统计最近10000ms内的请求,如果请求量超过10次,且慢调用比例>=0.5,则触发熔断,熔断时长为5秒。
  • 异常比例:
    • 异常比例或异常数:统计指定时间内的调用,如果调用次数超过指定请求数,并且出现异常的比例达到设定的比例阈值(或超过指定异常数),则触发熔断

 自定义兜底逻辑:

以上的配置,发生降级后,会抛出降级的相关异常。 可以自定义兜底逻辑。

    @GetMapping("/checkState/{userId}")@SentinelResource(value = "findResumeOpenState",blockHandlerClass = SentinelHandlersClass.class,blockHandler = "handleException",fallbackClass = SentinelHandlersClass.class,fallback = "handleError")public Integer findResumeOpenState(@PathVariable Long userId) {return resumeService.findDefaultResumeByUserId(userId);}

如上,使用@SentinelResource来指定。 

value:指定资源,用方法名。
blockHandlerClass:指定sentinel规则异常后,兜底逻辑所在的类。
blockHandler:指定sentinel规则异常后,兜底逻辑所在的方法。

以上的配置是针对抛出sentinel异常,可能在代码中还会抛出java异常,所以还可以定义异常的降级方法。

fallbackClass:指定java异常后,兜底逻辑所在的类。
fallback:指定java异常后,兜底逻辑所在的方法。

兜底方法:

public class SentinelHandlersClass {// 整体要求和当时Hystrix一样,这里还需要在形参最后添加BlockException参数,用于接收异常// 注意:方法是静态的public static Integer handleException(Long userId, BlockException blockException) {return -100;}public static Integer handleError(Long userId) {return -500;}}

基于 Nacos 实现 Sentinel 规则持久化:

在dashboard后台配置的规则,都是在内存中。 如果微服务停掉就会消失,所以,生产环境下,可以持久化到nacos配置中心,让微服务从nacos获取规则。

  • 微服务引入依赖:
        <!-- Sentinel支持采用 Nacos 作为规则配置数据源,引入该适配依赖 --><dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-datasource-nacos</artifactId></dependency>
  • 在yml中配置nacos数据源(sentinel下的datasource)        
  • server:port: 8098
    spring:application:name: lagou-service-autodelivercloud:nacos:discovery:server-addr: 127.0.0.1:8848,127.0.0.1:8849,127.0.0.1:8850sentinel:transport:dashboard: 127.0.0.1:8080 # sentinel dashboard/console 地址port: 8719   #  sentinel会在该端口启动http server,那么这样的话,控制台定义的一些限流等规则才能发送传递过来,#如果8719端口被占用,那么会依次+1# Sentinel Nacos数据源配置,Nacos中的规则会自动同步到sentinel流控规则中datasource:# 数据源自己取名,这里定义了两个:flow和degrade,代表流控和降级# 自定义的流控规则数据源名称flow:nacos: #类型要指定为nacos,因为sentinel还可以持久化到其他类型中server-addr: ${spring.cloud.nacos.discovery.server-addr}data-id: ${spring.application.name}-flow-rulesgroupId: DEFAULT_GROUPdata-type: jsonrule-type: flow  # 类型来自RuleType类# 自定义的降级规则数据源名称degrade:nacos:server-addr: ${spring.cloud.nacos.discovery.server-addr}data-id: ${spring.application.name}-degrade-rulesgroupId: DEFAULT_GROUPdata-type: jsonrule-type: degrade  # 类型来自RuleType类
    management:endpoints:web:exposure:include: "*"# 暴露健康接口的细节endpoint:health:show-details: always
    #针对的被调用方微服务名称,不加就是全局生效
    lagou-service-resume:ribbon:#请求连接超时时间ConnectTimeout: 2000#请求处理超时时间##########################################Feign超时时长设置ReadTimeout: 3000#对所有操作都进行重试OkToRetryOnAllOperations: true####根据如上配置,当访问到故障请求的时候,它会再尝试访问一次当前实例(次数由MaxAutoRetries配置),####如果不行,就换一个实例进行访问,如果还不行,再换一次实例访问(更换次数由MaxAutoRetriesNextServer配置),####如果依然不行,返回失败信息。MaxAutoRetries: 0 #对当前选中实例重试次数,不包括第一次调用MaxAutoRetriesNextServer: 0 #切换实例的重试次数NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RoundRobinRule #负载策略调整
    logging:level:# Feign日志只会对日志级别为debug的做出响应com.lagou.edu.controller.service.ResumeServiceFeignClient: debug
  • 配置文件中指定好dataid后,就需要去nacos配置管理中配置了(注意:命名空间,分组,dataid等要和yml中对应上),
    • 流控规则:
    • [{"resource":"findResumeOpenState","limitApp":"default","grade":1,"count":1,"strategy":0,"controlBehavior":0,"clusterMode":false}
      ]

      所有属性来⾃源码FlowRule

      • resource:资源名称
      • limitApp:来源应⽤
      • grade:阈值类型 0 线程数 1 QPS
      • count:单机阈值
      • strategy:流控模式,0 直接 1 关联 2 链路
      • controlBehavior:流控效果,0 快速失败 1 Warm Up 2 排队等待
      • clusterModetrue/false 是否集群
    • 降级规则
      • [{"resource":"findResumeOpenState","grade":2,"count":1,"timeWindow":5}
        ]
      • 所有属性来⾃源码 DegradeRule
        • resource:资源名
        • grade :降级策略 0 RT 1 异常⽐例 2 异常数
        • count :阈值
        • timeWindow :时间窗
​​​

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

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

相关文章

MySQL进阶(再论JDBC)——JDBC编程思想的分析 JDBC的规范架构 JDBC相关的类分析

前言 SQL&#xff08;Structured Query Language&#xff09;是一种用于管理关系型数据库的标准化语言&#xff0c;它用于定义、操作和管理数据库中的数据。SQL是一种通用的语言&#xff0c;可以用于多种关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;如MySQ…

数据结构-----红黑树简介

目录 前言 1.什么是红黑树&#xff1f; 2.为什么需要红黑树&#xff1f;&#xff08;与AVL树对比&#xff09; 3.红黑树的特性 前言 在此之前我们学习过了二叉排序树和平衡二叉树&#xff08;AVL树&#xff09;&#xff0c;这两种树都是属于搜索树的一种&#xff0c;那么今天…

web 性能优化详解(Lighthouse工具、优化方式、强缓存和协商缓存、代码优化、算法优化)

1.性能优化包含的方面 优化性能概念宽泛&#xff0c;可以从信号、系统、计算机原理、操作系统、网络通信、DNS解析、负载均衡、页面渲染。只要结合一个实际例子讲述清楚即可。 2.什么是性能&#xff1f; Web 性能是客观的衡量标准&#xff0c;是用户对加载时间和运行时的直观…

2.3 初探Hadoop世界

文章目录 零、学习目标一、导入新课二、新课讲解&#xff08;一&#xff09;Hadoop的前世今生1、Google处理大数据三大技术2、Hadoop如何诞生3、Hadoop主要发展历程 &#xff08;二&#xff09;Hadoop的优势1、扩容能力强2、成本低3、高效率4、可靠性5、高容错性 &#xff08;三…

在C++和Python的项目中使用ROS

如果搜索如何使用ROS&#xff0c;搜索结果肯定是先建立工作空间&#xff0c;在创建功能包等等步骤&#xff0c;但其实不需要这么麻烦。 在Python中使用ROS&#xff0c;只需要在Pycharm的Project Structure中的Add Content Root加入ros的packages就可以了&#xff0c;如下图 在…

二叉树题目:从前序与中序遍历序列构造二叉树

文章目录 题目标题和出处难度题目描述要求示例数据范围 解法一思路和算法代码复杂度分析 解法二思路和算法代码复杂度分析 题目 标题和出处 标题&#xff1a;从前序与中序遍历序列构造二叉树 出处&#xff1a;105. 从前序与中序遍历序列构造二叉树 难度 5 级 题目描述 要…

<三>Qt斗地主游戏开发:主界面初始化显示

1. 主界面效果 效果关键点&#xff1a; 1&#xff09;拖动标题栏可实现主界面拖动 2&#xff09;logo图标名称及主界面背景 3&#xff09;最小化及关闭 2.思路分析 1&#xff09;背景图片及logo图标的设定比较简单&#xff0c;通过stylesheet即可实现。通过QWidget的拖动即可实…

算法leetcode|84. 柱状图中最大的矩形(rust重拳出击)

文章目录 84. 柱状图中最大的矩形&#xff1a;样例 1&#xff1a;样例 2&#xff1a;提示&#xff1a; 分析&#xff1a;题解&#xff1a;rust&#xff1a;go&#xff1a;c&#xff1a;python&#xff1a;java&#xff1a; 84. 柱状图中最大的矩形&#xff1a; 给定 n 个非负整…

【git的使用方法】——上传文件到gitlab仓库

先进入到你克隆下来的仓库的目录里面 比如&#xff1a;我的仓库名字为zhuox 然后将需要上传推送的文件拷贝到你的克隆仓库下 这里的话我需要拷贝的项目是t3 输入命令ls&#xff0c;就可以查看该文件目录下的所有文件信息 然后输入git add 文件名 我这边输入的是 &#x…

处理ElementUI组件默认样式多次重复问题

问题截图&#xff1a; 解决办法&#xff1a; 在postcss.config.js文件里添加配置项&#xff1a; module.exports {plugins: {autoprefixer: {},cssnano: {} //添加这行代码}, } 处理结果&#xff1a; github issues&#xff1a; https://github.com/ElemeFE/element/is…

【LeetCode刷题(数组and排序)】:存在重复元素

给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 &#xff0c;返回 true &#xff1b;如果数组中每个元素互不相同&#xff0c;返回 false 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3,1] 输出&#xff1a;true 示例 2&#xff1a; 输入&#xff1a;nums [1,2…

WorkPlus即时通讯办公软件,助力企业实现移动化办公

在移动互联网的时代背景下&#xff0c;企业对于高效的移动平台需求日益迫切。WorkPlus作为领先品牌&#xff0c;致力于为企业打造卓越的移动平台&#xff0c;助力企业实现协作与效率的突破。本文将探讨WorkPlus如何通过其专业的解决方案&#xff0c;为企业打造无限可能的移动办…

14.8 Socket 一收一发通信

通常情况下我们在编写套接字通信程序时都会实现一收一发的通信模式&#xff0c;当客户端发送数据到服务端后&#xff0c;我们希望服务端处理请求后同样返回给我们一个状态值&#xff0c;并以此判断我们的请求是否被执行成功了&#xff0c;另外增加收发同步有助于避免数据包粘包…

【Kotlin精简】第4章 函数

1 简介 函数是用来运行代码的载体&#xff0c;可以在一个函数里编写很多行代码&#xff0c;当运行这个函数时&#xff0c;函数中的所有代码会全部运行。 Kotlin中的函数同Java完全面向对象的规则不太一样&#xff0c;在Kotlin的世界里&#xff0c;函数也是准C位的&#xff0c;…

微服务架构 | 超时管理

INDEX LSA 级别与全年停机时间速查表LSA 级别实战TP 性能超时时间设计原则 LSA 级别与全年停机时间速查表 计算公式&#xff1a;60 * 60 * 24 * 365 * (1-LSA) 31,536,000‬ * (1-LSA) 系统级别LSA级别全年停机时间099.999%5分钟099.99%52分钟199.9%8.8小时299%3.65 天 LSA…

基于 ACK Fluid 的混合云优化数据访问(五):自动化跨区域中心数据分发

作者&#xff1a;车漾 前文回顾&#xff1a; 本系列将介绍如何基于 ACK Fluid 支持和优化混合云的数据访问场景&#xff0c;相关文章请参考&#xff1a; -基于 ACK Fluid 的混合云优化数据访问&#xff08;一&#xff09;&#xff1a;场景与架构 -基于 ACK Fluid 的混合云优…

科研上新 | 第2期:可驱动3D肖像生成;阅读文本密集图像的大模型;文本控制音色;基于大模型的推荐智能体

编者按&#xff1a;欢迎阅读“科研上新”栏目&#xff01;“科研上新”汇聚了微软亚洲研究院最新的创新成果与科研动态。在这里&#xff0c;你可以快速浏览研究院的亮点资讯&#xff0c;保持对前沿领域的敏锐嗅觉&#xff0c;同时也能找到先进实用的开源工具。 本期内容速览 …

基于yolov2深度学习网络的猫脸检测识别matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 load yolov2.mat% 加载训练好的目标检测器 img_size [224,224]; imgPath test/; % 图…

至强服务器BIOS/UEFI驱动开发笔记

至强服务器BIOS/UEFI驱动开发笔记 驱动开发基础Hello UEFI Driver 项目选择项目位置初始化驱动代码文件结构驱动程序入口和基本功能导入AMI工程AMI平台Hello UEFI Driver 编译问题测试结果打印设备列表继续开发`HelloWorldSupported`函数依赖配置使用脚本编译编译测试此DXE驱动…

SQL如何导入数据以及第一次上机作业

如何导入excel数据 首先得学会导入数据 使用excel格式不需要改成其它格式&#xff08;如csv&#xff0c;txt&#xff09;&#xff0c;因为你改了到时候还是会报错&#xff08;实践过使用Sum统计总数一直说我数据格式有问题&#xff09; 首先右键TSGL数据库->任务->导入数…