熔断及算法

熔断与雪崩

上游服务切断或减缓对下游服务的访问。

熔断这一概念来源于电子工程中的断路器(Circuit Breaker)。在互联网系统中,当下游服务因访问压力过大而响应变慢或失败,上游服务为了保护系统整体的可用性,可以暂时切断对下游服务的调用。牺牲局部,保全整体的措施就叫做熔断

假设当前系统中有A,B,C三个服务,服务A是上游,服务B是中游,服务C是下游。一旦下游服务C因某些原因变得不可用,堆积大量的请求,服务B的请求线程也随之阻塞。线程资源逐渐耗尽,使得服务B也变得不可用。紧接着,服务A也变为不可用,整个调用链路被拖垮。这种调用链路的连锁故障叫做雪崩

服务熔断是应对雪崩效应的一种微服务链路保护机制。例如在高压电路中,如果某个地方的电压过高,熔断器就会熔断,对电路进行保护。同样,在微服务架构中,熔断机制也是起着类似的作用。当调用链路的某个微服务不可用或者响应时间太长时,会进行服务熔断,不再有该节点微服务的调用,快速返回错误的响应信息。当检测到该节点微服务调用响应正常后,恢复调用链路。

一种简单的思路

用单位时间内总请求数与成功或失败请求数之比来确定是否熔断,单位时间请求次数的计算可以使用粒度较小的滑动窗口。熔断的状态可以有open、half-open或closed,当消耗完堆积的请求后,就可以调整成closed状态,进行正常的服务。

熔断算法与框架

Google sre弹性熔断算法:https://sre.google/sre-book/handling-overload/#eq2101

Google sre弹性熔断算法的实践:
bilibili kratos:https://github.com/go-kratos/kratos/tree/v1.0.x/pkg/net/netutil/breaker
go-zero:https://github.com/zeromicro/go-zero/tree/master/core/breaker

Hystrix:https://github.com/Netflix/Hystrix
hystrix-go:https://github.com/afex/hystrix-go

gobreaker:https://github.com/sony/gobreaker

Reference

https://en.wikipedia.org/wiki/Circuit_breaker_design_pattern

https://blog.51cto.com/u_15197573/5163214

https://mp.weixin.qq.com/s?__biz=MzU0OTE4MzYzMw==&mid=2247506440&idx=4&sn=5719c4fa0b9c80ed2ea0ab3c35d19a6b&chksm=fbb153f6ccc6dae02cf5caae458cd245bde5ecf9ca3aa2905eab9a47cc4586064928ef82a314&scene=27

https://landscape.cncf.io/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

metabit

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

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

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

打赏作者

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

抵扣说明:

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

余额充值