手把手带你领略双十一背后的核心技术Sentinel之服务的熔断降级
Posted IT挖掘机y
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了手把手带你领略双十一背后的核心技术Sentinel之服务的熔断降级相关的知识,希望对你有一定的参考价值。
这 种 日 子 该 到 头 了 {这种日子该到头了} 这种日子该到头了
代码来自:https://blog.csdn.net/Kevinnsm/article/details/117520719?spm=1001.2014.3001.5501
文章目录
1 、 为 什 么 要 进 行 服 务 降 级 ? {1、为什么要进行服务降级?} 1、为什么要进行服务降级?
现在的微服务架构是分布式的,由许多服务组成。服务之间的调用是错综复杂的,比如A调B,B调C,C调D等等;一旦某个模块出现了问题,可能就会出现级联效应,最终导致整个链路的不可用是。通过服务降级,将不稳定的服务进行熔断降级,避免整个链路的雪崩。这个降级是配置在客户端!
官网文档地址:https://sentinelguard.io/zh-cn/docs/circuit-breaking.html
2 、 熔 断 策 略 之 慢 调 用 比 例 {2、熔断策略之慢调用比例} 2、熔断策略之慢调用比例
慢调用比例 (SLOW_REQUEST_RATIO):选择以慢调用比例作为阈值,需要设置允许的慢调用 RT(即最大的响应时间),请求的响应时间大于该值则统计为慢调用。当单位统计时长(statIntervalMs)内请求数目大于设置的最小请求数目,并且慢调用的比例大于阈值,则接下来的熔断时长内请求会自动被熔断。经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN 状态),若接下来的一个请求响应时间小于设置的慢调用 RT 则结束熔断,若大于设置的慢调用 RT 则会再次被熔断。
以上是官网提供的,经过我的分析需要满足两个条件就会进行服务熔断降级!
1、请求的响应时间大于RT(设置的最大响应时间
2、单位统计时长内请求数目大于最小请求数目
实例分析
设置最大RT为200ms,意味着一旦请求响应超过这个时间就会被统计为慢调用,如果在统计时长1000ms内慢调用的数量大于了最小请求数5,则会进行服务的熔断降级(熔断时长为2s,过了两秒后会进行进入探测状态,若接下来的一个请求的响应时间小于RT,则结束熔断;否则继续进入熔断状态)
@GetMapping("/good")
public String good() throws InterruptedException {
Thread.sleep(1000);
log.info("---------->"+Thread.currentThread().getName());
return "good";
}
设置线程暂停1s,那么由于我上面设置的RT为0.2s,所以每次都会超时。100%会进行熔断降级
使用JMeter进行测试
零基础带你入门JMeter-模拟高并发接口测试,小白教程!:https://blog.csdn.net/Kevinnsm/article/details/117302197?spm=1001.2014.3001.5501
开始测试
由于我设置的是一直循环访问,所以可以得出只要不关闭JMeter,那么/good接口将一直处于熔断状态,怎么得出来呢?同时通过浏览器访问
当结束JMeter,然后通过浏览器访问
3 、 熔 断 策 略 之 异 常 比 例 {3、熔断策略之异常比例} 3、熔断策略之异常比例
异常比例 (ERROR_RATIO):当单位统计时长(statIntervalMs)内请求数目大于设置的最小请求数目,并且异常的比例大于阈值,则接下来的熔断时长内请求会自动被熔断。经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN 状态),若接下来的一个请求成功完成(没有错误)则结束熔断,否则会再次被熔断。异常比率的阈值范围是 [0.0, 1.0],代表 0% - 100%。
也就是满足两个条件就会发生熔断降级
1、请求数大于设置得最小请求数目
2、异常得比例大于设置得阈值
如下图分析
当在1000ms统计时长内,如果异常比例大于0.8,且请求数大于5,则进行熔断降级
代码模拟
@GetMapping("/good")
public String good() {
int a = 1 / 0;
log.info("---------->"+Thread.currentThread().getName());
return "good";
}
我 故 意 将 其 1 / 0 报 异 常 ! {我故意将其1/0报异常!} 我故意将其1/0报异常!
使用JMeter测试
每
次
10
个
请
求
数
,
一
直
循
环
访
问
{每次10个请求数,一直循环访问}
每次10个请求数,一直循环访问
运行
从响应数据可以看出已经进入了熔断状态!
循环访问过程中从浏览器进行访问
当结束JMeter循环访问,然后浏览器访问,发现已经结束了熔断状态!
4 、 熔 断 策 略 之 异 常 数 {4、熔断策略之异常数} 4、熔断策略之异常数
异常数 (ERROR_COUNT):当单位统计时长内的异常数目超过阈值之后会自动进行熔断。经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN 状态),若接下来的一个请求成功完成(没有错误)则结束熔断,否则会再次被熔断。
1、单位统计时长内异常数超过设置的异常数阈值
2、请求数大于设置得最小请求数
如上图所示,在1000ms内,如果异常数大于3,且请求数大于5;则发生熔断降级!
JMeter进行测试,一直循环访问
可以看出已经熔断降级,当我停掉JMeter之后,浏览器访问该API报出异常!
以上是关于手把手带你领略双十一背后的核心技术Sentinel之服务的熔断降级的主要内容,如果未能解决你的问题,请参考以下文章
手把手带你领略双十一背后的核心组件Sentinel之流控规则
简单几行代码带你快速了解淘宝双十一的强大技术支撑点Sentinel+Nacos