Sentinel实现服务降级并与api解耦

news2024/10/5 21:55:46

Sentinel怎样实现熔断降级

熔断降级介绍

sentinel支持服务的熔断降级

熔断类似于保险丝,在超出了阈值的情况下,在一定的时间内不会执行业务逻辑,直接执行服务降级的方法。服务降级利用本地fallback方法,返回一个有好的提示给客户端,不会真实的去执行业务逻辑。除了流量控制以外,对调用链路中不稳定的资源进行熔断降级也是保障高可用的重要措施之一。由于调用关系的复杂性,如果调用链路中的某个资源不稳定,最终会导致请求发生堆积。Sentinel 熔断降级会在调用链路中某个资源出现不稳定状态时(例如调用超时或异常比例升高),对这个资源的调用进行限制,让请求快速失败,避免影响到其它的资源而导致级联错误。当资源被降级后,在接下来的降级时间窗口之内,对该资源的调用都自动熔断(默认行为是抛出 DegradeException)。

降级的策略

1.平均响应时间 (DEGRADE_GRADE_RT)
当 1s 内持续进入 5 个请求,对应时刻的平均响应时间(秒级)均超过阈值(count,以 ms 为单位),那么在接下的时间窗口(DegradeRule 中的 timeWindow,以 s 为单位)之内,对这个方法的调用都会自动地熔断(抛出 DegradeException)。注意 Sentinel 默认统计的 RT 上限是 4900 ms,超出此阈值的都会算作 4900 ms,若需要变更此上限可以通过启动配置项 -Dcsp.sentinel.statistic.max.rt=xxx 来配置。

2.异常比例(DEGRADE_GRADE_EXCEPTION_RATIO)
当资源的每秒请求量 >= 5,并且每秒异常总数占通过量的比值超过阈值(DegradeRule 中的 count)之后,资源进入降级状态,即在接下的时间窗口(DegradeRule 中的 timeWindow,以 s 为单位)之内,对这个方法的调用都会自动地返回。异常比率的阈值范围是 [0.0, 1.0],代表 0% - 100%。

3.异常数(DEGRADE_GRADE_EXCEPTION_COUNT)
当资源近 1 分钟的异常数目超过阈值之后会进行熔断。注意由于统计时间窗口是分钟级别的,若 timeWindow 小于 60s,则结束熔断状态后仍可能再进入熔断状态。

平均的响应时间

image-20221126105715934

如果在1s秒,平均有5个请求的响应时间大于配置的10rt毫秒时间 阈值,则会执行一定时间窗口的熔断和降级。

基于平均相应时间实现降级代码:

@SentinelResource(value = "getOrderDowngradeRtType", fallback = "getOrderDowngradeRtTypeFallback")
@RequestMapping("/getOrderDowngradeRtType")
public String getOrderDowngradeRtType() {
    try {
        Thread.sleep(300);
    } catch (Exception e) {
    }
    return "getOrderDowngradeRtType";
}

public String getOrderDowngradeRtTypeFallback() {
    return "服务降级啦,当前服务器请求次数过多,请稍后重试!";
}

异常的比例

image-20221126105748147

当我们每秒的请求大于5的时候,会根据一定比例执行我们的熔断降级的策略。

@SentinelResource(value = "getOrderDowngradeErrorType", fallback = "getOrderDowngradeErrorTypeFallback")
@RequestMapping("/getOrderDowngradeErrorType")
public String getOrderDowngradeErrorType(int age) {
    int j = 1 / age;
    return "正常执行我们的业务逻辑";
}

public String getOrderDowngradeErrorTypeFallback(int age) {
    return "服务降级啦,当前服务器请求次数过多,请稍后重试!";
}

异常的次数

image-20221126105817163

当资源近 1 分钟的异常数目超过阈值之后会进行熔断。注意由于统计时间窗口是分钟级别的,若 timeWindow 小于 60s,则结束熔断状态后仍可能再进入熔断状态。

服务降级解耦

传统的降级方式是通过@SentinelResource注解以及里面的fallback属性来实现的,这种方式比较大的问题是注解与接口依旧有一定耦合,需要让降级与接口完全隔离,这时我们可以通过openFeign声明的接口进行实现来达到目的,下面介绍一下通过实现类的方式实现

被调用方接口服务,业务中故意包含报错

image-20221126112123481

调用方api层,调用本微服务中声明的需要被调用的user服务

image-20221126112504661

调用方声明的UserService接口

image-20221126112744073

调用方的服务降级实现类UserFallbackServiceImpl,这里需要注意的是一定要记得加@Component,否则会导致项目都无法启动

image-20221126112932427

测试

浏览器中访问接口,提示自定义的降级信息,成功实现

image-20221126113140594

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

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

相关文章

Scala配置和Spark配置以及Scala一些函数的用法(附带词频统计实例)

文章目录配置Spark配置Scala生成RDDfilter过滤器map方法flatMap方法reduceByKeyspark下wordcount程序参考先给出spark和Scala的下载地址,这是我用的版本https://pan.baidu.com/s/1rcG1xckk3zmp9BLmf74hsg?pwd1111也可以自己去官网下载。配置Spark 解压文件到softw…

public,private,protected,default的区别

public public(公开)表示任何人都可以访问和使用该元素; public class Test {public static void main(String[] args) {Person pnew Person();System.out.println(p.name);//输出小明} } class Person{public String name"小明"…

Go 开发环境安装之Goland和vscode

一、前言 Go语言或将成为新的主力开发语言,Go是google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言,所以我们有必要学习并掌握它。第一件事情,就是把环境搭建起来,大家可以跟着步骤一起将Go语…

【计算机网络】数据链路层:点对点协议PPP

对于点对点链路,目前使用最为广泛的数据链路层协议是点对点协议PPP。 简单(首要要求) 封装成帧:保证数据传输的透明性 多种网络层协议:能够在同一条物理链路上同时支持多种网络层协议。 多种类型链路:能…

2020牛客暑期多校训练营(第十场)I.Tournament(构造/贪心)

题目 t(1<t<30)组样例&#xff0c;n(2<n<300)个球队&#xff0c; 每个球队都和其它所有球队比一场&#xff0c;一共有场比赛。 每天只比一场比赛&#xff0c;每个球队会在其第一场比赛开始时到&#xff0c;最后一场比赛后走。 安排一个日程表&#xff0c;使所有…

Linux多线程C++版(五) 线程同步和线程互斥

目录1.线程同步和线程互斥2.线程互斥案例---ATM取钱--没有使用互斥锁3.线程互斥----互斥锁(互斥量)4.互斥锁创建和销毁5.互斥锁上锁和解锁6.线程互斥案例---ATM取钱--使用互斥锁7.互斥锁属性创建和销毁8.互斥锁属性之一---进程共享属性操作9.互斥锁属性之一----互斥锁类型操作1…

[附源码]计算机毕业设计JAVA人口老龄化社区服务与管理平台

[附源码]计算机毕业设计JAVA人口老龄化社区服务与管理平台 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; …

Apollo 应用与源码分析:Monitor监控 - Monitor_managerecurrent_runner分析

目录 monitor_manager 分析 结构分析 单例模式宏定义 描述现在的系统状态 HMI上显示的状态信息 仿真判断状态 判断是不是自动驾驶状态 日志缓存 当前node 所有monitor 的reader 管理map 开启一次监控 start frame分析 end frame分析 recurrent_runner 分析 结构…

计算机键盘用途及快捷键

用途&#xff1a; 电脑键盘上有那么多按键&#xff0c;到底都有什么作用呢&#xff1f; 几个重要的按键&#xff0c;一起来了解一下吧。 最上面一排&#xff1a; F1帮助 F2改名 F3搜索 F4地址 F5刷新 F6切换 F10菜单 1、键盘中间区域的所有输入按键。 一共是26个英文字母…

初次接触氛围系统架构,聊聊我这三个月的理解

本文主要介绍了作者对于氛围中心的业务理解。从氛围的概念出发&#xff0c;阐述了氛围系统的必要性&#xff0c;然后展示了配置端的数据写入、调用端的配置读取等氛围系统的架构细节&#xff0c;最后作者提出了一些对于氛围中心未来的想法和思考。概述▐ 氛围的概念氛围是能够…

V5.1.1,新版发布|软件安全大于一切

主要内容&#xff1a;本次版本除了常规的BUG修复&#xff0c;最重要的是对系统安全全面升级&#xff0c;加强了系统安全检测机制&#xff0c;更新了Thinkphp核心版本&#xff0c;强化了密码等安全。 本次新增了在线用户&#xff0c;支持在线用户下强制下线处理。 本次新增的超级…

java项目-第161期ssm弹幕视频网站系统_ssm毕业设计_计算机毕业设计

java项目-第161期ssm弹幕视频网站系统_ssm毕业设计_计算机毕业设计 【源码请到资源专栏下载】 今天分享的项目是《ssm弹幕视频网站》 该项目分为2个角色&#xff0c;管理员、用户。 用户可以浏览前台视频信息、商品信息&#xff0c;并且可以进行购买。 管理员角色拥有的权限最…

基于jquery 实现导航条高亮显示的两种方法

本篇文章是基于jquery实现导航菜单高亮显示&#xff0c;当点击不同导航菜单实现当前点击的菜单是高亮的&#xff0c;有需要的朋友可以关注下本文 实现原理&#xff1a;当选中当前元素时&#xff0c;给当前元素添加样式&#xff0c;同级元素移除样式。 点击不同的导航菜单实现…

基于SpringBoot的校园志愿者管理系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SpringBoot 前端&#xff1a;HTML、Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#…

Java23种设计模式之第三弹-工厂模式

说起工厂&#xff0c;我们第一反应是制作什么东西的吧~。在现实生活中&#xff0c;工厂 &#xff0c; 就是用于生成一些特定事物的厂商。 回到我们此处说的工厂模式上&#xff0c;什么是工厂模式呢 &#xff0c; 顾名思义&#xff0c;就是生成我们的对象的类就会称成为工厂。 …

机器学习模型与backtrader框架整合

原创文章第116篇&#xff0c;专注“个人成长与财富自由、世界运作的逻辑&#xff0c; AI量化投资”。 北京疫情似乎还没有到拐点&#xff0c;但这三天结束后应该会到来。 今天重点说说&#xff0c;机器学习模型整合到我们的回测框架中&#xff0c;并与backtrader连接起来回测…

【Python模块】logging 日志模块

当入门一门语言时&#xff0c;最简单最直观的打印日志信息方式就是使用 print() 函数了&#xff0c;而这毕竟是自己练习和测试才会这样做。当参与项目时一定会去使用日志模块实现日志信息的打印和记录&#xff0c;而 Python 提供了内置的日志模块 logging&#xff0c;有必要深入…

解决每次打开pycharm都特别慢的几个方法

Python编写时&#xff0c;通常都会用vscode和pycharm两个工具&#xff0c;使用过程中&#xff0c;发现每次打开pycharm都特别特别慢&#xff0c;有时候要等十来分钟。相信大家可能都有遇到一样的情况&#xff0c;所以分享我自己的解决方法给大家参考。 1&#xff0c;每次需要关…

[附源码]java毕业设计置地房屋租赁信息系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

嵌入式驱动初级-中断

文章目录前言一、Linux 中断 API 函数二、Linux 中断实现三、中断上半部与下半部四、下半部机制之tasklet ---- 基于软中断五、按键中断下半部机制之tasklet六、下半部机制之workqueue ----- 基于内核线程七、按键中断下半部机制之workqueue前言 记录嵌入式驱动学习笔记 一、Li…