快速学习-Sentinel 熔断降级
时间:2022-07-22
本文章向大家介绍快速学习-Sentinel 熔断降级,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
7、Sentinel 熔断降级
7.1 概述
熔断降级是指当资源处于不稳定的情况下,在接下来的时间窗口之内,对该资源的调用都自动熔断。我们通常用两种方式来衡量资源是否处于稳定的状态:
- 平均响应时间(DEGRADE_GRADE_RT):当资源的平均响应时间超过阈值(DegradeRule 中的count,以ms 为单位)之后,资源进入准降级状态。
- 接下来如果持续进入5 个请求,它们的RT 都持续超过这个阈值,那么在接下的时间窗口(DegradeRule 中的timeWindow,以s 为单位)之内,对这个方法的调用都会自动地返回。
如RT Degrade demo 所示,一个资源每次需要500 ms。那么观察这个例子的结果,发现每过10 秒,就会恢复对该资源的调用,但是很快这个资源又会被降级(平均响应时间仍然不满足需求)。
- 异常比例(DEGRADE_GRADE_EXCEPTION):当资源的每秒异常总数占通过总数的比值超过阈值(DegradeRule 中的count)之后,资源进入降级状态,即在接下的时间窗口(DegradeRule 中的timeWindow,以s 为单位)之内,对这个方法的调用都会自动地返回。
注意:为了统计异常比例,必须保证资源用下面的代码包围:
Entry entry = null;
try {
entry = SphU.entry(key, EntryType.IN, key);
// Write your biz code here.
// <<BIZ CODE>>
} catch (Throwable t) {
if (!BlockException.isBlockException(t) {
Tracer.trace(t);
}
} finally {
if (entry != null) {
entry.exit();
}
}
7.2 示例
运行Demo,将可以看到:
1529399827825,total:0, pass:0, block:0
1529399828825,total:4263, pass:100, block:4164 // 第一秒的平均RT 都还比较小
1529399829825,total:19179, pass:4, block:19176
1529399830824,total:19806, pass:0, block:19806 // 开始被降级
1529399831825,total:19198, pass:0, block:19198
1529399832824,total:19481, pass:0, block:19481
1529399833826,total:19241, pass:0, block:19241
1529399834826,total:17276, pass:0, block:17276
1529399835826,total:18722, pass:0, block:18722
1529399836826,total:19490, pass:0, block:19492
1529399837828,total:19355, pass:0, block:19355
1529399838827,total:11388, pass:0, block:11388
1529399839829,total:14494, pass:104, block:14390 // 10 秒之后恢复,然而又迅速地
被降级
1529399840854,total:18505, pass:0, block:18505
1529399841854,total:19673, pass:0, block:19676
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 简析Spark Streaming/Flink的Kafka动态感知
- 微信小程序开发实战(19):页面导航
- Kotlin:02-函数的声明
- 「MoreThanJava」Day 5:面向对象进阶—继承详解
- 要点1:指针、数组和复合字面量
- akka-typed(9) - 业务分片、整合,谈谈lagom, 需要吗?
- com-IFileDlg 进行文件的 打开或者保存
- 哆啦A梦?不好记!安利一下Prometheus这款开源的企业监控报警平台
- Kotlin:03-变量、常量、数据类型
- nginx工程师,需要上承天命,下召九幽
- 新版视频流媒体平台EasyNVR如何在前端显示当前页面所在位置?
- Kotlin:04-基本数据类型详细介绍
- Kotlin:05-控制流 if、when、for、while
- android: API24 及以上版本调用系统相机时报:FileUriExposedException 的解决
- Typora 完美结合 PicGo,写作体验更佳!