【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.rhkb.cn/news/159862.html

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

相关文章

微服务11-Sentinel中的授权规则以及Sentinel服务规则持久化

文章目录 授权规则自定义异常结果规则持久化实现Push模式 授权规则 根据来源名称对请求进行拦截 ——>我们需要解析来源名称&#xff08;RequestOriginParser默认解析都为default&#xff09;&#xff0c;所以我们要自定义一个实现类&#xff08;根据请求头解析&#xff0c…

单链表---结构体实现

定义 链表称为线性表的链式存储&#xff0c;顺序表逻辑上相邻的数据&#xff0c;存储位置也相邻。链表逻辑上相邻的数据&#xff0c;存储位置是随机分布在内存的各个位置上的。 故 对于每一个结点&#xff0c;定义的结构体是&#xff1a; typedef struct _LinkNode {int d…

C# Winform编程(3)对话框

C# Winform编程&#xff08;3&#xff09;对话框 Show(string text);Show(string text, string caption);Show(string text, string caption, MessageBoxButtons buttons);Show(string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon); using System;…

大模型的背景与现状问题

一、大模型的发展背景 谈起大模型&#xff0c;第一时间想到的是什么&#xff1f;是主流的ChatGPT&#xff1f;或者GPT4&#xff1f;还是DALL-E3&#xff1f;亦或者Midjourney&#xff1f;以及Stablediffusion&#xff1f;还是层出不穷的其他各类AI Agent应用工具&#xff1f;大…

ST-SSL:基于自监督学习的交通流预测模型

文章信息 文章题为“Spatio-Temporal Self-Supervised Learning for Traffic Flow Prediction”&#xff0c;是一篇发表于The Thirty-Seventh AAAI Conference on Artificial Intelligence (AAAI-23)的一篇论文。该论文主要针对交通流预测任务&#xff0c;结合自监督学习&#…

香港学界呼吁RWA“在港先发”,构建基于港元稳定币的Web3生态!

2023年以来&#xff0c;市场对于RWA&#xff08;Real World Assets&#xff09;即真实世界资产“代币化”的讨论愈发频繁&#xff0c;一些观点认为 RWA将在下一轮加密资产牛市中成为焦点&#xff0c;部分Web3创业者和传统金融企业也快速将业务方向瞄准相关赛道&#xff0c;而被…

架构-设计原则

1、面向对象的SOLID 1.1 概述 SOLID是5个设计原则开头字母的缩写&#xff0c;其本身就有“稳定的”的意思&#xff0c;寓意是“遵从SOLID原则可以建立稳定、灵活、健壮的系统”。5个原则分别如下&#xff1a; Single Responsibility Principle&#xff08;SRP&#xff09;&am…

grafana api创建dashboard 记录

文章目录 json model导入申请api key创建dashboard删除dashboard json model导入 直接在ui通过json model 导入&#xff0c;开发自己用还好&#xff0c;但对非开发人员不太友好&#xff0c;故考虑通过api后台自动创建 api doc : https://grafana.com/docs/grafana/v9.3/devel…

R实现动态条件相关模型与GARCH模型结合研究中美股市动态相关性(DCC-GARCH模型)

大家好&#xff0c;我是带我去滑雪&#xff01; 中美两国是全球最大的经济体&#xff0c;其经济活动对全球产业链和贸易体系都具有巨大影响。中美之间的经济互动包括大规模的贸易、投资和金融往来。这些互动不仅仅反映在经济数据上&#xff0c;还体现在股市上。中美股市的联动关…

吃瓜教程-模型的评估与选择

在训练集上的误差称为训练误差&#xff08;training error&#xff09;或经验误差&#xff08;empirical error&#xff09;。在测试集上的误差称为测试误差&#xff08;test error&#xff09;。学习器在所有新样本上的误差称为泛化误差&#xff08;generalization error&…

drawio简介以及下载安装

drawio简介以及下载安装 drawio是一款非常强大的开源在线的流程图编辑器&#xff0c;支持绘制各种形式的图表&#xff0c;提供了 Web端与客户端支持&#xff0c;同时也支持多种资源类型的导出。 访问网址&#xff1a;draw.io或者直接使用app.diagrams.net直接打开可以使用在线版…

PyTorch 深度学习之处理多维特征的输入Multiple Dimension Input(六)

1.Multiple Dimension Logistic Regression Model 1.1 Mini-Batch (N samples) 8D->1D 8D->2D 8D->6D 1.2 Neural Network 学习能力太好也不行&#xff08;学习到的是数据集中的噪声&#xff09;&#xff0c;最好的是要泛化能力&#xff0c;超参数尝试 Example, Arti…

软件工程与计算总结(九)软件体系结构基础

目录 ​编辑 一.体系结构的发展 二.理解体系结构 1.定义 2.区分体系结构的抽象与实现 3.部件 4.连接件 5.配置 三.体系结构风格初步 1.主程序/子程序 2.面向对象式 3.分层 4.MVC 一.体系结构的发展 小规模编程的重点在于模块内部的程序结构非常依赖于程序设计语言…

仪酷LabVIEW OD实战(3)——Object Detection+onnx工具包快速实现yolo目标检测

‍‍&#x1f3e1;博客主页&#xff1a; virobotics(仪酷智能)&#xff1a;LabVIEW深度学习、人工智能博主 &#x1f384;所属专栏&#xff1a;『LabVIEW深度学习工具包』『仪酷LabVIEW目标检测工具包实战』 &#x1f4d1;上期文章&#xff1a;『仪酷LabVIEW OD实战(2)——Obje…

E047-论坛漏洞分析及利用-针对Wordpress论坛进行信息收集与漏洞扫描的探索

任务实施: E047-论坛漏洞分析及利用-针对Wordpress论坛进行信息收集与漏洞扫描的探索 任务环境说明&#xff1a; 服务器场景&#xff1a;p9_kali-6&#xff08;用户名&#xff1a;root&#xff1b;密码&#xff1a;toor&#xff09; 服务器场景操作系统&#xff1a;Kali Li…

MPNN 模型:GNN 传递规则的实现

首先&#xff0c;假如我们定义一个极简的传递规则 A是邻接矩阵&#xff0c;X是特征矩阵&#xff0c; 其物理意义就是 通过矩阵乘法操作&#xff0c;批量把图中的相邻节点汇聚到当前节点。 但是由于A的对角线都是 0.因此自身的节点特征会被过滤掉。 图神经网络的核心是 吸周围…

mysql中的几种排名函数

mysql中的排名函数 mysql里面的排名函数&#xff0c;涉及有以下几个&#xff1a; rank()、dense_rank()、row_number() 1、rank() 函数 RANK() OVER (PARTITION BY <expression>[{,<expression>...}]ORDER BY <expression> [ASC|DESC], [{,<expression…

MySQL有时候命中索引有时候又不命中

索引失效的情况 -----可能 索引主要看where 、group by 、order by 1.组合索引不遵循最佳左前缀法制。最佳左前缀法制&#xff1a;如果索引了多列&#xff0c;要遵循最左前缀法则&#xff0c;指的是查询从索引的最左前列开始并且不跳过索引中的列。如组合索引为A B C 只有ABC,A…

C# RestoreFormer 图像修复

效果 项目 代码 using Microsoft.ML.OnnxRuntime; using Microsoft.ML.OnnxRuntime.Tensors; using OpenCvSharp; using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Imaging; using System.Windows.Forms;namespace 图像修复 {pu…

【SpringCloud-10】SCA-nacos

前言&#xff1a; 前面介绍的springcloud&#xff0c;可以看做第一代&#xff0c;称为&#xff1a;SCN&#xff08;spring cloud Netflix&#xff09;; 接下来介绍的是第二代&#xff1a;SCA&#xff08;spring cloud alibaba&#xff09;&#xff1b; SCA主要有以下组件&#…