作者简介:曾在阿里巴巴,每日有贤等互联网公司工作,担任技术总监,有15年的电子商务互联网经验。
关于断路器,Internet上有很多文章,但很少有文章能使您清楚。
许多作者窃彼此,缺乏自己的知识和理解。
在共享断路器之前,让我们先谈谈更熟悉的超时。
超时与融合有关吗?别担心,如果您往下看,这会很清楚!通常,我们在调用跨系统调用,跨服务调用和调用第三方接口时会设置超时时间。
有两个功能:首先,由于用户体验的考虑,没有返回任何结果,人们不得不永远等待,这实在让人难以忍受。
其次,出于系统性能方面的考虑,当并发度不高时,超时可以避免由于线程阻塞而导致的性能问题,但是当并发度高时,超时不能解决问题。
现在轮到保险丝炫耀了。
什么是保险丝?降级的手段。
当该服务不可用时,将用于避免级联故障和雪崩效应。
在调用服务时发生,调用者进行融合处理。
定影是什么意思?在使用保险丝之前,必须首先弄清楚保险丝的真实含义,以免使用错误的方法给系统造成麻烦。
实际上,一句话可以描述融合的含义:上游服务快速失败并保护下游服务。
为了详细说明,假设上游服务是A,下游服务是B,A调用B,B失败,并且保险丝已打开:对于上游服务A:请求直接返回给A(返回值可以是默认值,或者是通过Fallback方案获取的值),该值会很快失败并且不再发送给B。
避免由于B的失败而导致请求线程连续等待,这将导致线程耗尽池线程和CPU资源,这将导致A变得无响应,甚至整个调用链失败。
对于下游服务B:在保险丝之后,请求被A拦截,不再发送给B。
释放了B上的压力,这防止了幸存的B被淹没,并且B得到了保护。
保险丝状态循环过程:假设上游服务是A,下游服务是B,并且A调用B。
保险丝的生命周期包括三种状态:闭合,半开和断开。
封闭状态->在断开状态下,A呼叫B的失败请求的数量在设定时间内达到阈值,断开保险丝断开状态。
半开状态,在保险丝断开后,保险丝根据设定的时间间隔自动周期性地自动进入半开状态。
处于关闭状态(或打开状态),在半打开状态下,将少量请求从A发送到B以测试B服务是否可以正常提供服务,如果请求成功率达到阈值,则保险丝将将其关闭,否则将返回Fuse打开状态Fuse应用程序场景出于系统性能考虑,当并发度不高时,超时可以避免由于线程阻塞而导致的性能问题,但是当并发度高时,超时不能解决问题。
此时可以使用保险丝。
只要是服务之间的调用,并且可以设计用于获取返回值的合理方案(返回值可以是默认值,或者通过回退方案获得的值),就可以融合一般的业务场景。
例如,在电子商务行业中,在SKU很少的情况下,我们可以在订单服务中提供冗余库存数据(请注意控制合理的安全库存以防止超卖)。
下订单以减少库存时,如果暂停了库存服务,则在打开断路器后,我们可以直接从订单服务中获取库存。
如果订购服务无法获取库存,则库存扣除将失败。
这可以用作后备解决方案。
什么是开源实现Hystrix,Resilience4j等。
免责声明:本文的内容是在21ic授权后发布的,版权属于原始作者。
该平台仅提供信息存储服务。
本文仅代表作者的个人观点,并不代表该平台的立场。
如有任何疑问,请与我们联系,谢谢!