服务熔断——断路器

就像电路中的保险丝熔断一样,微服务架构中,上游服务因为过载或者故障不可用时(这种不可用情况是指长时间不可用且持续性远程调用,非暂时故障),需要及时使用断路器在下游的服务调用方暂时熔断调用方和服务提供方之间的调用链,避免出现服务雪崩进而拖挂整个业务系统,从而保证部分服务与系统整体的稳定性和可用性。

服务雪崩,是指调用链的某个环节不可用时,导致下游调用方环节不可用,最终这种影响像雪崩一样扩大到整个系统中,导致整个系统不可用。

断路器模式

断路器代理了服务调用方对提供方的请求,它监控了最近请求的失败和超时次数。在上游服务因为过载或者故障无法提供正常响应时,断路器中的请求失败率会大大提升,在超过一定阀值后,断路器会打开,切断调用方和提供方之间的联系,此时服务调用方会执行失败逻辑或者直接返回异常,避免无效的线程等待。同时断路器中还提供检测恢复机制,允许服务调用方尝试调用服务提供方以检测服务是否恢复,若正常,则关闭断路器,恢复正常调用。

断路器中存在3种状态(关闭、打开、半开),状态机如下图,

  • 关闭状态(Closed):程序正常运行,流量可以正常进入,断路器会统计周期时间内的请求总次数和失败次数的比例,如果达到了阈值就转为打开状态。
  • 打开状态(Open):如果最近失败频率超过预设的阀值后,断路器就会打开,此时拒绝所有流量,走降级逻辑。
  • 半开状态(Half_Open):断路器进入打开状态之后会启动一个超时定时器,在定时器到达时,会进入半开状态,尝试检测恢复,此时断路器允许服务调用方尝试发起少量实际调用请求。如果这些请求都成功,那么断路器就认为服务提供方已恢复正常,进入关闭状态,失败计数器也同时复位,重复进行检测恢复。

关闭 Closed 状态使用的失败计数器基于时间窗口计数,它会定期自动复位。只有在窗口时间内发生的请求总次数和请求失败次数达到一定阀值,断路器才会被打开。半开 Half_Open 状态使用成功计数器记录调用操作的成功尝试次数,在指定数量的连续操作调用成功后,断路器恢复到关闭 Closed 状态。如果任何调用失败,断路器会立即进入断开 Open 状态,成功计数器将在下次进入半开 Half_Open 状态时重新清零。半开 Half_Open 状态仅允许有限的请求发生真正的调用,这有助于防止刚恢复的服务突然被请求淹没而再次宕机。

Hystrix

Hystrix 是 Netflix 开源的一款服务间断路器,hystrix-go 除了提供断路器模式外,还提供信号量和线程隔离的方式来保护服务调用方的线程资源,对延迟和失败提供了强大的容错能力。

自己实现一个简单的断路器

参考:

Spring Cloud hystrix——服务熔断——what、why、how_向上爬的小蜗牛的博客-CSDN博客

Have Fun

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值