Sentinel降级规则

news2024/11/18 4:27:03

1.降级规则简介

官方文档

熔断降级概述

除了流量控制以外,对调用链路中不稳定的资源进行熔断降级也是保障高可用的重要措施之一。一个服务常常会调用别的模块,可能是另外的一个远程服务、数据库,或者第三方 API 等。例如,支付的时候,可能需要远程调用银联提供的 API;查询某个商品的价格,可能需要进行数据库查询。然而,这个被依赖服务的稳定性是不能保证的。如果依赖的服务出现了不稳定的情况,请求的响应时间变长,那么调用服务的方法的响应时间也会变长,线程会产生堆积,最终可能耗尽业务自身的线程池,服务本身也变得不可用。

现代微服务架构都是分布式的,由非常多的服务组成。不同服务之间相互调用,组成复杂的调用链路。以上的问题在链路调用中会产生放大的效果。复杂链路上的某一环不稳定,就可能会层层级联,最终导致整个链路都不可用。因此我们需要对不稳定的弱依赖服务调用进行熔断降级,暂时切断不稳定调用,避免局部不稳定因素导致整体的雪崩。熔断降级作为保护自身的手段,通常在客户端(调用端)进行配置。
在这里插入图片描述

  • RT(平均响应时间,秒级)
    • 平均响应时间 超出阈值 且 在时间窗口内通过的请求>=5,两个条件同时满足后触发降级。
    • 窗口期过后关闭断路器。
    • RT最大4900(更大的需要通过-Dcsp.sentinel.statistic.max.rt=XXXX才能生效)。
  • 异常比列(秒级)
    • QPS >= 5且异常比例(秒级统计)超过阈值时,触发降级;时间窗口结束后,关闭降级 。
  • 异常数(分钟级)
    • 异常数(分钟统计)超过阈值时,触发降级;时间窗口结束后,关闭降级

Sentinel熔断降级会在调用链路中某个资源出现不稳定状态时(例如调用超时或异常比例升高),对这个资源的调用进行限制,让请求快速失败,避免影响到其它的资源而导致级联错误。

当资源被降级后,在接下来的降级时间窗口之内,对该资源的调用都自动熔断(默认行为是抛出 DegradeException)。

Sentinei的断路器是没有类似Hystrix半开状态的。(Sentinei 1.8.0 已有半开状态)

半开的状态系统自动去检测是否请求有异常,没有异常就关闭断路器恢复使用,有异常则继续打开断路器不可用。

2.降级-RT

是什么?

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

**注意:**Sentinel 1.7.0才有平均响应时间(DEGRADE_GRADE_RT),Sentinel 1.8.0的没有这项,取而代之的是慢调用比例 (SLOW_REQUEST_RATIO)。

慢调用比例 (SLOW_REQUEST_RATIO):选择以慢调用比例作为阈值,需要设置允许的慢调用 RT(即最大的响应时间),请求的响应时间大于该值则统计为慢调用。当单位统计时长(statIntervalMs)内请求数目大于设置的最小请求数目,并且慢调用的比例大于阈值,则接下来的熔断时长内请求会自动被熔断。经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN 状态),若接下来的一个请求响应时间小于设置的慢调用 RT 则结束熔断,若大于设置的慢调用 RT 则会再次被熔断。

Sentinel 1.7.0的
在这里插入图片描述

测试

/**
 * Sentinel降级 - RT测试
 * @author liqb
 * @date 2023-05-25 19:56
 * @return
 */
@GetMapping("/testD")
public String testD() {
    try {
        TimeUnit.SECONDS.sleep(1);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    log.info("testD 测试RT");
    return "------testD";
}

配置

在这里插入图片描述

jmeter压测
在这里插入图片描述

结论

按照上述配置,永远一秒钟打进来10个线程(大于5个了)调用testD,我们希望200毫秒处理完本次任务,如果超过200毫秒还没处理完,在未来1秒钟的时间窗口内,断路器打开(保险丝跳闸)微服务不可用,保险丝跳闸断电了后续我停止jmeter,没有这么大的访问量了,断路器关闭(保险丝恢复),微服务恢复OK。

3.降级-异常比例

是什么?

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

注意,与Sentinel 1.8.0相比,有些不同(Sentinel 1.8.0才有的半开状态),Sentinel 1.8.0的如下:

异常比例 (ERROR_RATIO):当单位统计时长(statIntervalMs)内请求数目大于设置的最小请求数目,并且异常的比例大于阈值,则接下来的熔断时长内请求会自动被熔断。经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN 状态),若接下来的一个请求成功完成(没有错误)则结束熔断,否则会再次被熔断。异常比率的阈值范围是 [0.0, 1.0],代表 0% - 100%。熔断降级

Sentinel 1.7.0的
在这里插入图片描述

测试

/**
 * Sentinel降级 - 异常比例测试
 * @author liqb
 * @date 2023-05-25 19:56
 * @return
 */
@GetMapping("/testE")
public String testE() {
    log.info("testE 异常比例");
    int age = 10/0;
    return "------testE";
}

配置

在这里插入图片描述

jmeter

在这里插入图片描述

结论:

按照上述配置,单独访问一次,必然来一次报错一次(int age = 10/0),调一次错一次。

开启jmeter后,直接高并发发送请求,多次调用达到我们的配置条件了。断路器开启(保险丝跳闸),微服务不可用了,不再报错error而是服务降级了。

4.降级-异常数

是什么?

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

注意,与Sentinel 1.8.0相比,有些不同(Sentinel 1.8.0才有的半开状态),Sentinel 1.8.0的如下:

异常数 (ERROR_COUNT):当单位统计时长内的异常数目超过阈值之后会自动进行熔断。经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN 状态),若接下来的一个请求成功完成(没有错误)则结束熔断,否则会再次被熔断。

接下来讲解Sentinel 1.7.0的

异常数是按照分钟统计的,时间窗口一定要大于等于60秒

在这里插入图片描述

测试

/**
 * Sentinel降级 - 异常数测试
 * @author liqb
 * @date 2023-05-25 19:56
 * @return
 */
@GetMapping("/testF")
public String testF() {
    log.info("testF 测试异常数");
    int age = 10/0;
    return "------testF 测试异常数";
}

配置

在这里插入图片描述

访问http://localhost:8401/testF

第一次访问绝对报错,因为除数不能为零,我们看到error窗口,但是达到5次报错后,进入熔断后降级。

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

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

相关文章

chatgpt赋能python:Python倒序遍历

Python倒序遍历 Python是一种常用的编程语言,其操作序列化和数据结构的方式使得其在网站开发、科学计算和人工智能领域具有重要作用。本文将重点介绍Python中倒序遍历的基本原则和实现方法。 什么是倒序遍历 倒序遍历是指从后往前迭代序列的过程。Python中提供了…

SSRF之GOPHER协议利用

目录 GOPHER协议 GOPHER协议发起的格式 GOPHER利用工具 案例一:CTFSHOW-359关 GOPHER协议 GOPHER协议是一种比HTTP协议还要古老的协议,默认工作端口70,但是gopher协议在SSRF漏洞利用上比HTTP协议更有优势。GOPHER协议可以以单个URL的形式…

chatgpt赋能python:Python编写接口实践:让API更高效、更可靠

Python编写接口实践:让API更高效、更可靠 随着互联网技术的不断发展,API已经成为了现代应用架构的基石之一。而Python作为一种高效、灵活的语言,也逐渐成为了接口开发的首选。 什么是API接口? API是应用程序接口(Ap…

chatgpt赋能python:Python单行循环:提升开发效率的必备技巧

Python单行循环:提升开发效率的必备技巧 在Python编程中,循环是一种非常重要的控制流程,可以让程序执行特定的操作多次。而Python有一种针对短小的循环语句进行简化的技巧,即“单行循环”,也被称为“列表解析”或“生…

数据分析学习

tableau tableau介绍 tableau可以做数据可视化,但可视化只是tableau的基操,数据赋能和数据探索才是tableau的正确打开方式 数据赋能:让业务一线也可以轻松使用最新数据 数据探索:通过统计分析和数据可视化,从数据发现…

从应用层到MCU,看Windows处理键盘输入 [2.a.1.传球手User32.dll]

副标题:精准型消息断点 引言1. 前文作为系列的开篇,我们站在Notepad.exe的视角,看它接过系统传来的消息,交由Notepad的窗口处理函数(WndProc)进行处理的过程。User32.dll!DispatchMessage API是前面"系统传来"4个字中的一环&#…

Kerberos认证原理及相关漏洞

Kerberos认证协议 Kerberos认证协议也称三头犬协议,因为在Kerberos认证过程中,需要有三个角色:Client、Server以及KDC(Key Distribution Center)密钥分发中心。 Kerberos认证协议的目的是为客户端/服务端提供身份验证。最主要的问题是如何证明…

Win11硬盘分区

电脑重装了Win11系统,按WinE打开主文件夹,再点击此电脑,发现: 磁盘只有一个C盘。硬盘的所有空间都在该盘上了,那么我们怎么将其分区呢? Win11硬盘分区步骤: 步骤1: 按WinR输入dis…

数据库中的事务,隔离级别,以及数据展示

想要知道和学习数据库中的锁,要先学习数据库的事务和并发事务所带来的问题! 1.数据库中的事务! 1.1什么事务 事务是由一组SQL语句组成的逻辑处理单元(多个sql进行修改,新增等),这些操作要么同时…

跟踪任何目标(想跟踪什么就跟踪什么)

结果展示 介绍 该项目是一个简单的跟踪工具,可以用于跟踪任何你感兴趣的东西。它提供了一个基于Web的界面,让用户可以轻松地创建和管理跟踪列表,同时也提供了一个RESTful API,可以方便地进行数据交互。 项目的原理是将用户需要跟踪的内容,通过创建跟踪项的方式存储到数据…

Hausdorff 距离

1. 定义 给定欧氏空间中的两点集 A { a 1 , a 2 , . . . } \rm A\left \{a_1, a_2,... \right\} A{a1​,a2​,...} 和 B { b 1 , b 2 , . . . } \rm B\left \{b_1, b_2,... \right\} B{b1​,b2​,...} , H a u s d o r f f {\rm Hausdorff} Hausdorff 距离就是用…

基于SSM的在线考试系统开发与设计-(附源码文档)-毕业设计

文章目录 1.适用人群2.你将收获3.项目介绍4.系统需求分析4.1 需求特性分析4.2 功能需求分析 5.系统设计5.1 系统总体结构设计5.2 数据库设计5.2.1 数据库概念原则设计5.2.2 数据库各部分模块设计5.2.3 数据库表设计 6.系统详细设计6.1 系统各模块功能设计6.1.1 登录模块6.1.2 注…

chatgpt赋能python:如何利用Python加快计算速度

如何利用Python加快计算速度 在大数据时代,计算效率的问题成为了企业和科研机构普遍关注的焦点问题。Python是一种高级编程语言,其具有灵活、易学、语法简洁、运行速度快等优点,因此在数据分析和科学计算领域广泛应用。然而,Pyth…

chatgpt赋能python:Python内部函数介绍

Python内部函数介绍 Python是一门功能强大、易于学习的编程语言,拥有许多内部函数可供使用。本文将介绍Python的内部函数和其用途,以便更好地利用和理解Python。 什么是内部函数? 内部函数是Python提供的一组内置函数,它们可以…

2023/5/25总结

学习CSS list-style:none 去掉无序列表的带有的样式,比如原点。 border-radius:length 设置圆角,也可以写%,不一定需要些半径大小,也可以顺时针写半径大小,就会出现四个顶点不一样的圆角。或者写:borde…

chatgpt赋能python:Python写Log的技巧与最佳实践

Python 写 Log 的技巧与最佳实践 在编写 Python 应用程序时,日志记录(Logging)是一项非常重要的功能,尤其是在调试或部署过程中。本文将介绍一些 Python 写 Log 的技巧和最佳实践,以帮助你更好地处理日志记录并提高应…

Java的String(字符串详解)

字符串 1.字符串的常见构造方法 主要有三种,一种是直接使用常量去构造,要么使用new String来构造,或者还可以使用字符数组的形式。 public static void main(String[] args) { // 使用常量串构造 String s1 "hello"; System.ou…

order by排序语句的用法

文章目录 学习连接语法用法示例1、按单个列的值排序2、按多个列的值排序3、按指定的规则排序4、按中文拼音字母顺序5、Order by和where条件共用 数据库中常用order by关键字对结果集进行排序,又可使用desc和asc来进行指定规则的排序。 学习连接 数据库:…

chatgpt赋能python:单行for循环:Python编程的神器

单行for循环:Python编程的神器 Python是一门功能强大的编程语言,其中的单行for循环功能更是让它的编程效率倍增。在本文中,我们将探讨单行for循环是如何提升编程效率的。 什么是单行for循环 单行for循环是一种简单而强大的编程方式。它可以…

【利用AI让知识体系化】V8引擎相关知识

文章目录 I. 引言V8引擎的背景和概述 II. V8的设计和工作原理V8的整体设计V8的工作流程和运行机制V8在浏览器中的应用场景 III. 内存管理内存模型和内存管理策略垃圾回收机制和算法内存泄漏和内存优化 IV. JIT编译器JIT编译器的作用和优势V8的编译流程和编译器类型编译器优化技…