Resilicence4j中的熔断机制(CircuitBreaker)关于slidingWindowSize(滑动窗口大小)和minimumNumberOfCalls(计算失败率最小调用数)的讲解

本文详细解释了Resilience4j中CircuitBreaker熔断机制中的slidingWindowSize(滑动窗口大小)和minimumNumberOfCalls(计算失败率最小调用数)的作用,并通过实际案例展示了它们如何影响熔断策略。
摘要由CSDN通过智能技术生成

关于Resilicence4j中的熔断机制(CircuitBreaker)部分这里不再讲解,不懂得同学们可以查看以下几篇优秀的博客以及B站尚硅谷相关的教学视频。

该篇博客记录自己学习Resilicence4j中的熔断机制(CircuitBreaker时关于slidingWindowSize(滑动窗口大小)和minimumNumberOfCalls(计算失败率最小调用数)这两个参数的解惑过程。也可以看看我录制的讲解视频

Resilicence4j中的熔断机制(CircuitBreaker)关于slidingWindowSize(滑动窗口大小)和minimumNumberOfCa

疑惑:他们俩的作用分别是什么?

答:slidingWindowSize设置滑动窗口的大小,当需要计算是否达到熔断开启的阈值时,样本从该大小的窗口中取出计算。
minimumNumberOfCalls设置计算失败率最小调用数。
第一次听以上概念估计很懵,似懂非懂,但是好像不知道具体如何设置,以及设置怎样的值才能取得自己想要的效果。没事,请接着往下继续阅读。

实践出真知

既然不知道他们的作用是什么,那么不妨设置几个值去实践看看到底如何他们俩起了什么作用。

slidingWindowSize

准备条件:

  • 设置滑动窗口的类型为基于数量的
  • 同时自定义滑动窗口大小slidingWindowSize为6
  • 失败阈值为50%,即有一半数量的请求失败了则熔断
  • 从开启到半开状态等待时间设置为5秒
  • 半开状态运行通过的请求数为2
  • minimumNumberOfCalls不设置,即为系统默认

如下图所示:
在这里插入图片描述
测试:
以下表格中1表示成功的请求,0表示故意发送的一个失败的请求用于模拟失败请求。红色格子表示发送正常的请求却失败了,即表示熔断机制已经开启了。黄色单元格表示当前的滑动窗口中的数据。绿色格子表示发送正常的请求被正确接收了
在这里插入图片描述

实验结果记录如上。
现在一条一条分析结果,每一行表示一次实验。

  • 第1次实验:先发送3次正确的请求,再发送3次失败的请求。可以看到,目前滑动窗口中有3次正确和3次失败,失败率达到50%,即开启熔断。
  • 第2次实验:先发送6次正确的请求,再发送1次失败的请求。可以看到,目前滑动窗口中有5次正确和1次失败,失败率没有达到50%,即继续正常执行。
  • 第3次实验:先发送6次正确的请求,再发送2次失败的请求。可以看到,目前滑动窗口中有4次正确和2次失败,失败率没有达到50%,即继续正常执行。
  • 第4次实验:先发送6次正确的请求,再发送3次失败的请求。可以看到,目前滑动窗口中有3次正确和3次失败,败率达到50%,开启熔断。
  • 第5次实验:先发送3次失败的请求,再发送3次正确的请求。可以看到,目前滑动窗口中有3次正确和3次失败,败率达到50%,开启熔断。
  • 第6次实验:先发送4次正确的请求,再发送3次失败的请求。可以看到,目前滑动窗口中有3次正确和3次失败,失败率达到50%,即开启熔断。
  • 第7次实验:先发送4次正确的请求,再发送2次失败的请求。可以看到,目前滑动窗口中有4次正确和2次失败,失败率没有达到50%,即继续正常执行。

以上结果验证了如果只设置slidingWindowSize的大小,那么只要滑动窗口中的失败数达到设定的比例,则会开启熔断,好像minimumNumberOfCalls没啥用呀?

minimumNumberOfCalls

以上既然已经验证了slidingWindowSize可以控制什么时候开始熔断,那还要minimumNumberOfCalls干什么呢?这也是我当时很困惑的一个点。于是继续实验,这次在上述实验的前提条件下,设置minimumNumberOfCalls为4,故意让他比slidingWindowSize小,看看有什么影响吗?
实验结果如下:
在这里插入图片描述

分析结果:

  • 第1次实验:先发送3次正确的请求,再发送3次失败的请求。可以看到,目前滑动窗口中有3次正确和3次失败,失败率达到50%,即开启熔断。
  • 第2次实验:先发送2次失败的请求,再发送2次成功的请求。可以看到,目前滑动窗口中一共有4个请求记录,达到了设定了的minimumNumberOfCalls为4,则开始计算失败率,达到50%,虽然滑动窗口还有两个空的,但是依旧立即开启熔断。
  • 第3次实验:先发送3次正确的请求,再发送1次失败的请求。可以看到,目前滑动窗口中有3次正确和1次失败,达到了设定了的minimumNumberOfCalls4,则开始计算失败率,失败率没有达到50%,即继续正常执行。
  • 第4次实验:先发送3次失败的请求,再发送1次正确的请求。可以看到,目前滑动窗口中有1次正确和3次失败,败率达到50%,开启熔断。
  • 第5次实验:先发送6次正确的请求,再发送2次正确的请求。可以看到,目前滑动窗口中有3次正确和3次失败,数量为6也超过minimumNumberOfCalls设定的4,同时失败率达到50%,开启熔断。
  • 第6次实验:先发送3次正确的请求,再发送2次失败的请求。可以看到,目前滑动窗口中有3次正确和2次失败,失败率没有达到50%,即正常执行。

上述结果分析我只分析了最后的情况,其实在超过4次请求的实验中,只要超过第4次的请求,系统都会进行一次计算,也就是在实验1,5,6的第五次请求、实验1,5的第六次请求以及实验5的第七次请求都会进行以及失败率的计算和是否熔断的判定。因为滑动窗口中的数量已经达到了设定的minimumNumberOfCalls最小触发次数。

  • 14
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kivi闭关编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值