微服务守护神-Sentinel-降级规则
创始人
2024-03-28 16:13:52
0

引言

书接上篇 微服务守护神-Sentinel-流控规则 ,上面介绍了Sentinel流控规则,本篇继续来Sentinel的降级规则。

降级规则

那啥为降级呢?降级可以理解为下降等次,比如:你从广州到北京,有钱时,你可以坐头等舱去北京,没钱时,你可以坐动车去北京。目标一样,方式不同,体验不同。飞机比动车,动车就是降级。开发中也是一样,比如:服务A调用服务B,理想状态返回服务A想要的结果,如果哪天服务B宕机了调不通,此时走降级,快速返回调用异常提示结果。保证时间用在该用的地方。

Sentinel降级规则就是设置当满足什么条件的时候,对服务进行降级。Sentinel提供了三个衡量条件:

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

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

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

慢调用比例案例

步骤1:在shop-order-server项目中新增FallBackController.java类

package cn.wolfcode.controller;
@RestController
@Slf4j
public class FallBackController {@RequestMapping("/fallBack1")public String fallBack1(){try {log.info("fallBack1执行业务逻辑");//模拟业务耗时TimeUnit.SECONDS.sleep(1);} catch (InterruptedException e) {e.printStackTrace();}return "fallBack1";}
}

步骤2:新增降级规则

上面配置表示,如果在1S之内,有【超过1个的请求】且这些请求中【响应时间>最大RT】的【请求数量比例>10%】,就会触发熔断,在接下来的10s之内都不会调用真实方法,直接走降级方法。

比如: 最大RT=900,比例阈值=0.1,熔断时长=10,最小请求数=10

  • 情况1: 1秒内的有20个请求,只有10个请求响应时间>900ms, 那慢调用比例=0.5,这种情况就会触发熔断

  • 情况2: 1秒内的有20个请求,只有1个请求响应时间>900ms, 那慢调用比例=0.05,这种情况不会触发熔断

  • 情况3: 1秒内的有8个请求,只有6个请求响应时间>900ms, 那慢调用比例=0.75,这种情况不会触发熔断,因为最小请求数这个条件没有满足.

注意: 我们做实验的时候把最小请求数设置为1,因为在1秒内,手动操作很难在1s内发两个请求过去,所以要做出效果,最好把最小请求数设置为1。

步骤3:测试访问: http://localhost:8091/fallBack1

异常比例案例

 步骤1:在shop-order-server项目的FallBackController.java类新增fallBack2方法

int i=0;
@RequestMapping("/fallBack2")
public String fallBack2(){log.info("fallBack2执行业务逻辑");//模拟出现异常,异常比例为33%if(++i%3==0){throw new RuntimeException();}return "fallBack2";
}

步骤2:新增降级规则

 上面配置表示,在1s之内,,有【超过3个的请求】,异常比例30%的情况下,触发熔断,熔断时长为10s.

步骤3:测试访问: http://localhost:8091/fallBack2

异常数案例

步骤1:在shop-order-server项目的FallBackController.java类新增fallBack3方法

@RequestMapping("/fallBack3")
public String fallBack3(String name){log.info("fallBack3执行业务逻辑");if("wolfcode".equals(name)){throw new RuntimeException();}return "fallBack3";
}

步骤2:新增降级规则

上面配置表示,在1s之内,,有【超过3个的请求】,请求中超过2个请求出现异常就会触发熔断,熔断时长为10s  

步骤3:测试访问: http://localhost:8091/fallBack3

ok,到这,sentinel的降级规则就ok啦,后面还有啥规则呢?且听下回分解。

 看文字不过瘾可以切换视频版:SpringCloud Alibaba 极简入门

相关内容

热门资讯

前端-session、jwt 目录:   (1)session (2&#x...
linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
关于测试,我发现了哪些新大陆 关于测试 平常也只是听说过一些关于测试的术语,但并没有使用过测试工具。偶然看到编程老师...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
nodejs:本地安装nvm实... 一、背景-使用不同版本node的原因 vue3+ts、nuxt3版本,node...
JAVA集合知识整理 Java集合知识整理 HashMap相关 HashMap的底层数据结构:jdk1.8之...
无刷直流电机介绍及单片机控制实... 无刷直流电机介绍及单片机控制实例前言基本概念优势与劣势使用寿命基本结构使用单片机控制实例电子调速器&...
fwdiary(2) dp2 1.传纸条  AcWing 275. 传纸条 - AcWing 走两条路,走一条最大的...
常用的DOS命令 常用的DOS命令 DOS(Disk Operating System,磁...
<C++> 类和对象(下) 1.const成员函数将const修饰的“成员函数”称之为const成员函数,cons...